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

revert "limit rx processing to one frame per poll", which caused etherlab
frame timeouts in setups with more than one frame per cycle.
2401
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     1
/*
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     2
 * r8169.c: RealTek 8169/8168/8101 ethernet driver.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     3
 *
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     4
 * Copyright (c) 2002 ShuChen <shuchen@realtek.com.tw>
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     5
 * Copyright (c) 2003 - 2007 Francois Romieu <romieu@fr.zoreil.com>
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     6
 * Copyright (c) a lot of people too. Please respect their work.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     7
 *
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     8
 * See MAINTAINERS file for support contact information.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
     9
 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    10
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    11
#include <linux/module.h>
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    12
#include <linux/moduleparam.h>
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    13
#include <linux/pci.h>
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    14
#include <linux/netdevice.h>
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    15
#include <linux/etherdevice.h>
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    16
#include <linux/delay.h>
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    17
#include <linux/ethtool.h>
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    18
#include <linux/mii.h>
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    19
#include <linux/if_vlan.h>
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    20
#include <linux/crc32.h>
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    21
#include <linux/in.h>
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    22
#include <linux/ip.h>
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    23
#include <linux/tcp.h>
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    24
#include <linux/init.h>
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    25
#include <linux/dma-mapping.h>
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    26
#include <linux/pm_runtime.h>
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    27
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    28
#include <asm/system.h>
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    29
#include <asm/io.h>
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    30
#include <asm/irq.h>
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    31
#include "../globals.h"
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    32
#include "ecdev.h"
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    33
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    34
#define RTL8169_VERSION "2.3LK-NAPI"
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    35
#define MODULENAME "ec_r8169"
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    36
#define PFX MODULENAME ": "
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    37
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    38
#ifdef RTL8169_DEBUG
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    39
#define assert(expr) \
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    40
	if (!(expr)) {					\
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    41
		printk( "Assertion failed! %s,%s,%s,line=%d\n",	\
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    42
		#expr,__FILE__,__func__,__LINE__);		\
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    43
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    44
#define dprintk(fmt, args...) \
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    45
	do { printk(KERN_DEBUG PFX fmt, ## args); } while (0)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    46
#else
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    47
#define assert(expr) do {} while (0)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    48
#define dprintk(fmt, args...)	do {} while (0)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    49
#endif /* RTL8169_DEBUG */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    50
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    51
#define R8169_MSG_DEFAULT \
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    52
	(NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_IFUP | NETIF_MSG_IFDOWN)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    53
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    54
#define TX_BUFFS_AVAIL(tp) \
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    55
	(tp->dirty_tx + NUM_TX_DESC - tp->cur_tx - 1)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    56
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    57
/* Maximum number of multicast addresses to filter (vs. Rx-all-multicast).
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    58
   The RTL chips use a 64 element hash table based on the Ethernet CRC. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    59
static const int multicast_filter_limit = 32;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    60
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    61
/* MAC address length */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    62
#define MAC_ADDR_LEN	6
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    63
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    64
#define MAX_READ_REQUEST_SHIFT	12
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    65
#define RX_FIFO_THRESH	7	/* 7 means NO threshold, Rx buffer level before first PCI xfer. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    66
#define RX_DMA_BURST	6	/* Maximum PCI burst, '6' is 1024 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    67
#define TX_DMA_BURST	6	/* Maximum PCI burst, '6' is 1024 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    68
#define EarlyTxThld	0x3F	/* 0x3F means NO early transmit */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    69
#define SafeMtu		0x1c20	/* ... actually life sucks beyond ~7k */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    70
#define InterFrameGap	0x03	/* 3 means InterFrameGap = the shortest one */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    71
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    72
#define R8169_REGS_SIZE		256
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    73
#define R8169_NAPI_WEIGHT	64
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    74
#define NUM_TX_DESC	64	/* Number of Tx descriptor registers */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    75
#define NUM_RX_DESC	256	/* Number of Rx descriptor registers */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    76
#define RX_BUF_SIZE	1536	/* Rx Buffer size */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    77
#define R8169_TX_RING_BYTES	(NUM_TX_DESC * sizeof(struct TxDesc))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    78
#define R8169_RX_RING_BYTES	(NUM_RX_DESC * sizeof(struct RxDesc))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    79
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    80
#define RTL8169_TX_TIMEOUT	(6*HZ)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    81
#define RTL8169_PHY_TIMEOUT	(10*HZ)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    82
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    83
#define RTL_EEPROM_SIG		cpu_to_le32(0x8129)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    84
#define RTL_EEPROM_SIG_MASK	cpu_to_le32(0xffff)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    85
#define RTL_EEPROM_SIG_ADDR	0x0000
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    86
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    87
/* write/read MMIO register */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    88
#define RTL_W8(reg, val8)	writeb ((val8), ioaddr + (reg))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    89
#define RTL_W16(reg, val16)	writew ((val16), ioaddr + (reg))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    90
#define RTL_W32(reg, val32)	writel ((val32), ioaddr + (reg))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    91
#define RTL_R8(reg)		readb (ioaddr + (reg))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    92
#define RTL_R16(reg)		readw (ioaddr + (reg))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    93
#define RTL_R32(reg)		readl (ioaddr + (reg))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    94
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    95
enum mac_version {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    96
	RTL_GIGA_MAC_NONE   = 0x00,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    97
	RTL_GIGA_MAC_VER_01 = 0x01, // 8169
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    98
	RTL_GIGA_MAC_VER_02 = 0x02, // 8169S
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
    99
	RTL_GIGA_MAC_VER_03 = 0x03, // 8110S
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   100
	RTL_GIGA_MAC_VER_04 = 0x04, // 8169SB
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   101
	RTL_GIGA_MAC_VER_05 = 0x05, // 8110SCd
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   102
	RTL_GIGA_MAC_VER_06 = 0x06, // 8110SCe
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   103
	RTL_GIGA_MAC_VER_07 = 0x07, // 8102e
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   104
	RTL_GIGA_MAC_VER_08 = 0x08, // 8102e
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   105
	RTL_GIGA_MAC_VER_09 = 0x09, // 8102e
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   106
	RTL_GIGA_MAC_VER_10 = 0x0a, // 8101e
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   107
	RTL_GIGA_MAC_VER_11 = 0x0b, // 8168Bb
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   108
	RTL_GIGA_MAC_VER_12 = 0x0c, // 8168Be
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   109
	RTL_GIGA_MAC_VER_13 = 0x0d, // 8101Eb
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   110
	RTL_GIGA_MAC_VER_14 = 0x0e, // 8101 ?
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   111
	RTL_GIGA_MAC_VER_15 = 0x0f, // 8101 ?
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   112
	RTL_GIGA_MAC_VER_16 = 0x11, // 8101Ec
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   113
	RTL_GIGA_MAC_VER_17 = 0x10, // 8168Bf
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   114
	RTL_GIGA_MAC_VER_18 = 0x12, // 8168CP
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   115
	RTL_GIGA_MAC_VER_19 = 0x13, // 8168C
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   116
	RTL_GIGA_MAC_VER_20 = 0x14, // 8168C
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   117
	RTL_GIGA_MAC_VER_21 = 0x15, // 8168C
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   118
	RTL_GIGA_MAC_VER_22 = 0x16, // 8168C
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   119
	RTL_GIGA_MAC_VER_23 = 0x17, // 8168CP
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   120
	RTL_GIGA_MAC_VER_24 = 0x18, // 8168CP
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   121
	RTL_GIGA_MAC_VER_25 = 0x19, // 8168D
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   122
	RTL_GIGA_MAC_VER_26 = 0x1a, // 8168D
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   123
	RTL_GIGA_MAC_VER_27 = 0x1b  // 8168DP
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   124
};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   125
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   126
#define _R(NAME,MAC,MASK) \
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   127
	{ .name = NAME, .mac_version = MAC, .RxConfigMask = MASK }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   128
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   129
static const struct {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   130
	const char *name;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   131
	u8 mac_version;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   132
	u32 RxConfigMask;	/* Clears the bits supported by this chip */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   133
} rtl_chip_info[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   134
	_R("RTL8169",		RTL_GIGA_MAC_VER_01, 0xff7e1880), // 8169
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   135
	_R("RTL8169s",		RTL_GIGA_MAC_VER_02, 0xff7e1880), // 8169S
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   136
	_R("RTL8110s",		RTL_GIGA_MAC_VER_03, 0xff7e1880), // 8110S
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   137
	_R("RTL8169sb/8110sb",	RTL_GIGA_MAC_VER_04, 0xff7e1880), // 8169SB
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   138
	_R("RTL8169sc/8110sc",	RTL_GIGA_MAC_VER_05, 0xff7e1880), // 8110SCd
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   139
	_R("RTL8169sc/8110sc",	RTL_GIGA_MAC_VER_06, 0xff7e1880), // 8110SCe
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   140
	_R("RTL8102e",		RTL_GIGA_MAC_VER_07, 0xff7e1880), // PCI-E
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   141
	_R("RTL8102e",		RTL_GIGA_MAC_VER_08, 0xff7e1880), // PCI-E
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   142
	_R("RTL8102e",		RTL_GIGA_MAC_VER_09, 0xff7e1880), // PCI-E
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   143
	_R("RTL8101e",		RTL_GIGA_MAC_VER_10, 0xff7e1880), // PCI-E
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   144
	_R("RTL8168b/8111b",	RTL_GIGA_MAC_VER_11, 0xff7e1880), // PCI-E
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   145
	_R("RTL8168b/8111b",	RTL_GIGA_MAC_VER_12, 0xff7e1880), // PCI-E
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   146
	_R("RTL8101e",		RTL_GIGA_MAC_VER_13, 0xff7e1880), // PCI-E 8139
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   147
	_R("RTL8100e",		RTL_GIGA_MAC_VER_14, 0xff7e1880), // PCI-E 8139
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   148
	_R("RTL8100e",		RTL_GIGA_MAC_VER_15, 0xff7e1880), // PCI-E 8139
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   149
	_R("RTL8168b/8111b",	RTL_GIGA_MAC_VER_17, 0xff7e1880), // PCI-E
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   150
	_R("RTL8101e",		RTL_GIGA_MAC_VER_16, 0xff7e1880), // PCI-E
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   151
	_R("RTL8168cp/8111cp",	RTL_GIGA_MAC_VER_18, 0xff7e1880), // PCI-E
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   152
	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_19, 0xff7e1880), // PCI-E
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   153
	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_20, 0xff7e1880), // PCI-E
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   154
	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_21, 0xff7e1880), // PCI-E
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   155
	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_22, 0xff7e1880), // PCI-E
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   156
	_R("RTL8168cp/8111cp",	RTL_GIGA_MAC_VER_23, 0xff7e1880), // PCI-E
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   157
	_R("RTL8168cp/8111cp",	RTL_GIGA_MAC_VER_24, 0xff7e1880), // PCI-E
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   158
	_R("RTL8168d/8111d",	RTL_GIGA_MAC_VER_25, 0xff7e1880), // PCI-E
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   159
	_R("RTL8168d/8111d",	RTL_GIGA_MAC_VER_26, 0xff7e1880), // PCI-E
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   160
	_R("RTL8168dp/8111dp",	RTL_GIGA_MAC_VER_27, 0xff7e1880)  // PCI-E
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   161
};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   162
#undef _R
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   163
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   164
enum cfg_version {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   165
	RTL_CFG_0 = 0x00,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   166
	RTL_CFG_1,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   167
	RTL_CFG_2
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   168
};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   169
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   170
static void rtl_hw_start_8169(struct net_device *);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   171
static void rtl_hw_start_8168(struct net_device *);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   172
static void rtl_hw_start_8101(struct net_device *);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   173
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   174
static DEFINE_PCI_DEVICE_TABLE(rtl8169_pci_tbl) = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   175
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8129), 0, 0, RTL_CFG_0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   176
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8136), 0, 0, RTL_CFG_2 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   177
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8167), 0, 0, RTL_CFG_0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   178
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8168), 0, 0, RTL_CFG_1 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   179
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8169), 0, 0, RTL_CFG_0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   180
	{ PCI_DEVICE(PCI_VENDOR_ID_DLINK,	0x4300), 0, 0, RTL_CFG_0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   181
	{ PCI_DEVICE(PCI_VENDOR_ID_AT,		0xc107), 0, 0, RTL_CFG_0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   182
	{ PCI_DEVICE(0x16ec,			0x0116), 0, 0, RTL_CFG_0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   183
	{ PCI_VENDOR_ID_LINKSYS,		0x1032,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   184
		PCI_ANY_ID, 0x0024, 0, 0, RTL_CFG_0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   185
	{ 0x0001,				0x8168,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   186
		PCI_ANY_ID, 0x2410, 0, 0, RTL_CFG_2 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   187
	{0,},
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   188
};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   189
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   190
/* prevent driver from being loaded automatically */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   191
//MODULE_DEVICE_TABLE(pci, rtl8169_pci_tbl);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   192
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   193
/*
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   194
 * we set our copybreak very high so that we don't have
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   195
 * to allocate 16k frames all the time (see note in
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   196
 * rtl8169_open()
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   197
 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   198
static int rx_copybreak = 16383;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   199
static int use_dac;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   200
static struct {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   201
	u32 msg_enable;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   202
} debug = { -1 };
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   203
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   204
enum rtl_registers {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   205
	MAC0		= 0,	/* Ethernet hardware address. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   206
	MAC4		= 4,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   207
	MAR0		= 8,	/* Multicast filter. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   208
	CounterAddrLow		= 0x10,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   209
	CounterAddrHigh		= 0x14,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   210
	TxDescStartAddrLow	= 0x20,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   211
	TxDescStartAddrHigh	= 0x24,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   212
	TxHDescStartAddrLow	= 0x28,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   213
	TxHDescStartAddrHigh	= 0x2c,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   214
	FLASH		= 0x30,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   215
	ERSR		= 0x36,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   216
	ChipCmd		= 0x37,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   217
	TxPoll		= 0x38,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   218
	IntrMask	= 0x3c,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   219
	IntrStatus	= 0x3e,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   220
	TxConfig	= 0x40,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   221
	RxConfig	= 0x44,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   222
	RxMissed	= 0x4c,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   223
	Cfg9346		= 0x50,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   224
	Config0		= 0x51,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   225
	Config1		= 0x52,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   226
	Config2		= 0x53,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   227
	Config3		= 0x54,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   228
	Config4		= 0x55,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   229
	Config5		= 0x56,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   230
	MultiIntr	= 0x5c,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   231
	PHYAR		= 0x60,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   232
	PHYstatus	= 0x6c,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   233
	RxMaxSize	= 0xda,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   234
	CPlusCmd	= 0xe0,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   235
	IntrMitigate	= 0xe2,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   236
	RxDescAddrLow	= 0xe4,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   237
	RxDescAddrHigh	= 0xe8,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   238
	EarlyTxThres	= 0xec,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   239
	FuncEvent	= 0xf0,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   240
	FuncEventMask	= 0xf4,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   241
	FuncPresetState	= 0xf8,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   242
	FuncForceEvent	= 0xfc,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   243
};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   244
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   245
enum rtl8110_registers {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   246
	TBICSR			= 0x64,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   247
	TBI_ANAR		= 0x68,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   248
	TBI_LPAR		= 0x6a,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   249
};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   250
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   251
enum rtl8168_8101_registers {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   252
	CSIDR			= 0x64,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   253
	CSIAR			= 0x68,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   254
#define	CSIAR_FLAG			0x80000000
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   255
#define	CSIAR_WRITE_CMD			0x80000000
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   256
#define	CSIAR_BYTE_ENABLE		0x0f
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   257
#define	CSIAR_BYTE_ENABLE_SHIFT		12
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   258
#define	CSIAR_ADDR_MASK			0x0fff
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   259
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   260
	EPHYAR			= 0x80,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   261
#define	EPHYAR_FLAG			0x80000000
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   262
#define	EPHYAR_WRITE_CMD		0x80000000
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   263
#define	EPHYAR_REG_MASK			0x1f
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   264
#define	EPHYAR_REG_SHIFT		16
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   265
#define	EPHYAR_DATA_MASK		0xffff
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   266
	DBG_REG			= 0xd1,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   267
#define	FIX_NAK_1			(1 << 4)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   268
#define	FIX_NAK_2			(1 << 3)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   269
	EFUSEAR			= 0xdc,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   270
#define	EFUSEAR_FLAG			0x80000000
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   271
#define	EFUSEAR_WRITE_CMD		0x80000000
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   272
#define	EFUSEAR_READ_CMD		0x00000000
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   273
#define	EFUSEAR_REG_MASK		0x03ff
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   274
#define	EFUSEAR_REG_SHIFT		8
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   275
#define	EFUSEAR_DATA_MASK		0xff
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   276
};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   277
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   278
enum rtl_register_content {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   279
	/* InterruptStatusBits */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   280
	SYSErr		= 0x8000,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   281
	PCSTimeout	= 0x4000,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   282
	SWInt		= 0x0100,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   283
	TxDescUnavail	= 0x0080,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   284
	RxFIFOOver	= 0x0040,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   285
	LinkChg		= 0x0020,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   286
	RxOverflow	= 0x0010,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   287
	TxErr		= 0x0008,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   288
	TxOK		= 0x0004,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   289
	RxErr		= 0x0002,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   290
	RxOK		= 0x0001,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   291
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   292
	/* RxStatusDesc */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   293
	RxFOVF	= (1 << 23),
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   294
	RxRWT	= (1 << 22),
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   295
	RxRES	= (1 << 21),
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   296
	RxRUNT	= (1 << 20),
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   297
	RxCRC	= (1 << 19),
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   298
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   299
	/* ChipCmdBits */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   300
	CmdReset	= 0x10,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   301
	CmdRxEnb	= 0x08,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   302
	CmdTxEnb	= 0x04,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   303
	RxBufEmpty	= 0x01,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   304
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   305
	/* TXPoll register p.5 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   306
	HPQ		= 0x80,		/* Poll cmd on the high prio queue */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   307
	NPQ		= 0x40,		/* Poll cmd on the low prio queue */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   308
	FSWInt		= 0x01,		/* Forced software interrupt */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   309
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   310
	/* Cfg9346Bits */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   311
	Cfg9346_Lock	= 0x00,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   312
	Cfg9346_Unlock	= 0xc0,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   313
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   314
	/* rx_mode_bits */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   315
	AcceptErr	= 0x20,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   316
	AcceptRunt	= 0x10,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   317
	AcceptBroadcast	= 0x08,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   318
	AcceptMulticast	= 0x04,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   319
	AcceptMyPhys	= 0x02,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   320
	AcceptAllPhys	= 0x01,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   321
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   322
	/* RxConfigBits */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   323
	RxCfgFIFOShift	= 13,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   324
	RxCfgDMAShift	=  8,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   325
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   326
	/* TxConfigBits */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   327
	TxInterFrameGapShift = 24,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   328
	TxDMAShift = 8,	/* DMA burst value (0-7) is shift this many bits */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   329
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   330
	/* Config1 register p.24 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   331
	LEDS1		= (1 << 7),
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   332
	LEDS0		= (1 << 6),
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   333
	MSIEnable	= (1 << 5),	/* Enable Message Signaled Interrupt */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   334
	Speed_down	= (1 << 4),
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   335
	MEMMAP		= (1 << 3),
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   336
	IOMAP		= (1 << 2),
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   337
	VPD		= (1 << 1),
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   338
	PMEnable	= (1 << 0),	/* Power Management Enable */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   339
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   340
	/* Config2 register p. 25 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   341
	PCI_Clock_66MHz = 0x01,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   342
	PCI_Clock_33MHz = 0x00,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   343
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   344
	/* Config3 register p.25 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   345
	MagicPacket	= (1 << 5),	/* Wake up when receives a Magic Packet */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   346
	LinkUp		= (1 << 4),	/* Wake up when the cable connection is re-established */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   347
	Beacon_en	= (1 << 0),	/* 8168 only. Reserved in the 8168b */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   348
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   349
	/* Config5 register p.27 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   350
	BWF		= (1 << 6),	/* Accept Broadcast wakeup frame */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   351
	MWF		= (1 << 5),	/* Accept Multicast wakeup frame */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   352
	UWF		= (1 << 4),	/* Accept Unicast wakeup frame */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   353
	LanWake		= (1 << 1),	/* LanWake enable/disable */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   354
	PMEStatus	= (1 << 0),	/* PME status can be reset by PCI RST# */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   355
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   356
	/* TBICSR p.28 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   357
	TBIReset	= 0x80000000,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   358
	TBILoopback	= 0x40000000,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   359
	TBINwEnable	= 0x20000000,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   360
	TBINwRestart	= 0x10000000,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   361
	TBILinkOk	= 0x02000000,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   362
	TBINwComplete	= 0x01000000,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   363
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   364
	/* CPlusCmd p.31 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   365
	EnableBist	= (1 << 15),	// 8168 8101
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   366
	Mac_dbgo_oe	= (1 << 14),	// 8168 8101
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   367
	Normal_mode	= (1 << 13),	// unused
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   368
	Force_half_dup	= (1 << 12),	// 8168 8101
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   369
	Force_rxflow_en	= (1 << 11),	// 8168 8101
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   370
	Force_txflow_en	= (1 << 10),	// 8168 8101
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   371
	Cxpl_dbg_sel	= (1 << 9),	// 8168 8101
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   372
	ASF		= (1 << 8),	// 8168 8101
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   373
	PktCntrDisable	= (1 << 7),	// 8168 8101
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   374
	Mac_dbgo_sel	= 0x001c,	// 8168
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   375
	RxVlan		= (1 << 6),
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   376
	RxChkSum	= (1 << 5),
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   377
	PCIDAC		= (1 << 4),
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   378
	PCIMulRW	= (1 << 3),
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   379
	INTT_0		= 0x0000,	// 8168
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   380
	INTT_1		= 0x0001,	// 8168
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   381
	INTT_2		= 0x0002,	// 8168
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   382
	INTT_3		= 0x0003,	// 8168
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   383
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   384
	/* rtl8169_PHYstatus */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   385
	TBI_Enable	= 0x80,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   386
	TxFlowCtrl	= 0x40,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   387
	RxFlowCtrl	= 0x20,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   388
	_1000bpsF	= 0x10,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   389
	_100bps		= 0x08,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   390
	_10bps		= 0x04,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   391
	LinkStatus	= 0x02,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   392
	FullDup		= 0x01,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   393
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   394
	/* _TBICSRBit */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   395
	TBILinkOK	= 0x02000000,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   396
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   397
	/* DumpCounterCommand */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   398
	CounterDump	= 0x8,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   399
};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   400
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   401
enum desc_status_bit {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   402
	DescOwn		= (1 << 31), /* Descriptor is owned by NIC */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   403
	RingEnd		= (1 << 30), /* End of descriptor ring */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   404
	FirstFrag	= (1 << 29), /* First segment of a packet */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   405
	LastFrag	= (1 << 28), /* Final segment of a packet */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   406
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   407
	/* Tx private */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   408
	LargeSend	= (1 << 27), /* TCP Large Send Offload (TSO) */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   409
	MSSShift	= 16,        /* MSS value position */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   410
	MSSMask		= 0xfff,     /* MSS value + LargeSend bit: 12 bits */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   411
	IPCS		= (1 << 18), /* Calculate IP checksum */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   412
	UDPCS		= (1 << 17), /* Calculate UDP/IP checksum */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   413
	TCPCS		= (1 << 16), /* Calculate TCP/IP checksum */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   414
	TxVlanTag	= (1 << 17), /* Add VLAN tag */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   415
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   416
	/* Rx private */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   417
	PID1		= (1 << 18), /* Protocol ID bit 1/2 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   418
	PID0		= (1 << 17), /* Protocol ID bit 2/2 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   419
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   420
#define RxProtoUDP	(PID1)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   421
#define RxProtoTCP	(PID0)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   422
#define RxProtoIP	(PID1 | PID0)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   423
#define RxProtoMask	RxProtoIP
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   424
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   425
	IPFail		= (1 << 16), /* IP checksum failed */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   426
	UDPFail		= (1 << 15), /* UDP/IP checksum failed */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   427
	TCPFail		= (1 << 14), /* TCP/IP checksum failed */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   428
	RxVlanTag	= (1 << 16), /* VLAN tag available */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   429
};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   430
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   431
#define RsvdMask	0x3fffc000
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   432
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   433
struct TxDesc {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   434
	__le32 opts1;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   435
	__le32 opts2;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   436
	__le64 addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   437
};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   438
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   439
struct RxDesc {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   440
	__le32 opts1;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   441
	__le32 opts2;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   442
	__le64 addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   443
};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   444
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   445
struct ring_info {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   446
	struct sk_buff	*skb;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   447
	u32		len;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   448
	u8		__pad[sizeof(void *) - sizeof(u32)];
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   449
};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   450
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   451
enum features {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   452
	RTL_FEATURE_WOL		= (1 << 0),
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   453
	RTL_FEATURE_MSI		= (1 << 1),
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   454
	RTL_FEATURE_GMII	= (1 << 2),
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   455
};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   456
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   457
struct rtl8169_counters {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   458
	__le64	tx_packets;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   459
	__le64	rx_packets;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   460
	__le64	tx_errors;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   461
	__le32	rx_errors;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   462
	__le16	rx_missed;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   463
	__le16	align_errors;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   464
	__le32	tx_one_collision;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   465
	__le32	tx_multi_collision;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   466
	__le64	rx_unicast;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   467
	__le64	rx_broadcast;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   468
	__le32	rx_multicast;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   469
	__le16	tx_aborted;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   470
	__le16	tx_underun;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   471
};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   472
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   473
struct rtl8169_private {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   474
	void __iomem *mmio_addr;	/* memory map physical address */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   475
	struct pci_dev *pci_dev;	/* Index of PCI device */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   476
	struct net_device *dev;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   477
	struct napi_struct napi;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   478
	spinlock_t lock;		/* spin lock flag */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   479
	u32 msg_enable;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   480
	int chipset;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   481
	int mac_version;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   482
	u32 cur_rx; /* Index into the Rx descriptor buffer of next Rx pkt. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   483
	u32 cur_tx; /* Index into the Tx descriptor buffer of next Rx pkt. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   484
	u32 dirty_rx;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   485
	u32 dirty_tx;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   486
	struct TxDesc *TxDescArray;	/* 256-aligned Tx descriptor ring */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   487
	struct RxDesc *RxDescArray;	/* 256-aligned Rx descriptor ring */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   488
	dma_addr_t TxPhyAddr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   489
	dma_addr_t RxPhyAddr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   490
	struct sk_buff *Rx_skbuff[NUM_RX_DESC];	/* Rx data buffers */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   491
	struct ring_info tx_skb[NUM_TX_DESC];	/* Tx data buffers */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   492
	unsigned align;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   493
	unsigned rx_buf_sz;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   494
	struct timer_list timer;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   495
	u16 cp_cmd;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   496
	u16 intr_event;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   497
	u16 napi_event;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   498
	u16 intr_mask;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   499
	int phy_1000_ctrl_reg;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   500
#ifdef CONFIG_R8169_VLAN
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   501
	struct vlan_group *vlgrp;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   502
#endif
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   503
	int (*set_speed)(struct net_device *, u8 autoneg, u16 speed, u8 duplex);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   504
	int (*get_settings)(struct net_device *, struct ethtool_cmd *);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   505
	void (*phy_reset_enable)(void __iomem *);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   506
	void (*hw_start)(struct net_device *);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   507
	unsigned int (*phy_reset_pending)(void __iomem *);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   508
	unsigned int (*link_ok)(void __iomem *);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   509
	int (*do_ioctl)(struct rtl8169_private *tp, struct mii_ioctl_data *data, int cmd);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   510
	int pcie_cap;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   511
	struct delayed_work task;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   512
	unsigned features;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   513
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   514
	struct mii_if_info mii;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   515
	struct rtl8169_counters counters;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   516
	u32 saved_wolopts;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   517
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   518
	ec_device_t *ecdev;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   519
	unsigned long ec_watchdog_jiffies;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   520
};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   521
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   522
MODULE_AUTHOR("Florian Pose <fp@igh-essen.com>");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   523
MODULE_DESCRIPTION("EtherCAT-capable RealTek RTL-8169 Gigabit Ethernet driver");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   524
module_param(rx_copybreak, int, 0);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   525
MODULE_PARM_DESC(rx_copybreak, "Copy breakpoint for copy-only-tiny-frames");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   526
module_param(use_dac, int, 0);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   527
MODULE_PARM_DESC(use_dac, "Enable PCI DAC. Unsafe on 32 bit PCI slot.");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   528
module_param_named(debug, debug.msg_enable, int, 0);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   529
MODULE_PARM_DESC(debug, "Debug verbosity level (0=none, ..., 16=all)");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   530
MODULE_LICENSE("GPL");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   531
MODULE_VERSION(EC_MASTER_VERSION);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   532
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   533
static int rtl8169_open(struct net_device *dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   534
static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   535
				      struct net_device *dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   536
static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   537
static int rtl8169_init_ring(struct net_device *dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   538
static void rtl_hw_start(struct net_device *dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   539
static int rtl8169_close(struct net_device *dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   540
static void rtl_set_rx_mode(struct net_device *dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   541
static void rtl8169_tx_timeout(struct net_device *dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   542
static struct net_device_stats *rtl8169_get_stats(struct net_device *dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   543
static int rtl8169_rx_interrupt(struct net_device *, struct rtl8169_private *,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   544
				void __iomem *, u32 budget);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   545
static int rtl8169_change_mtu(struct net_device *dev, int new_mtu);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   546
static void rtl8169_down(struct net_device *dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   547
static void rtl8169_rx_clear(struct rtl8169_private *tp);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   548
static void ec_poll(struct net_device *dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   549
static int rtl8169_poll(struct napi_struct *napi, int budget);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   550
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   551
static const unsigned int rtl8169_rx_config =
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   552
	(RX_FIFO_THRESH << RxCfgFIFOShift) | (RX_DMA_BURST << RxCfgDMAShift);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   553
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   554
static void mdio_write(void __iomem *ioaddr, int reg_addr, int value)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   555
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   556
	int i;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   557
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   558
	RTL_W32(PHYAR, 0x80000000 | (reg_addr & 0x1f) << 16 | (value & 0xffff));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   559
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   560
	for (i = 20; i > 0; i--) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   561
		/*
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   562
		 * Check if the RTL8169 has completed writing to the specified
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   563
		 * MII register.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   564
		 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   565
		if (!(RTL_R32(PHYAR) & 0x80000000))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   566
			break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   567
		udelay(25);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   568
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   569
	/*
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   570
	 * According to hardware specs a 20us delay is required after write
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   571
	 * complete indication, but before sending next command.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   572
	 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   573
	udelay(20);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   574
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   575
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   576
static int mdio_read(void __iomem *ioaddr, int reg_addr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   577
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   578
	int i, value = -1;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   579
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   580
	RTL_W32(PHYAR, 0x0 | (reg_addr & 0x1f) << 16);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   581
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   582
	for (i = 20; i > 0; i--) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   583
		/*
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   584
		 * Check if the RTL8169 has completed retrieving data from
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   585
		 * the specified MII register.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   586
		 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   587
		if (RTL_R32(PHYAR) & 0x80000000) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   588
			value = RTL_R32(PHYAR) & 0xffff;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   589
			break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   590
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   591
		udelay(25);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   592
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   593
	/*
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   594
	 * According to hardware specs a 20us delay is required after read
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   595
	 * complete indication, but before sending next command.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   596
	 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   597
	udelay(20);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   598
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   599
	return value;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   600
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   601
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   602
static void mdio_patch(void __iomem *ioaddr, int reg_addr, int value)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   603
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   604
	mdio_write(ioaddr, reg_addr, mdio_read(ioaddr, reg_addr) | value);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   605
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   606
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   607
static void mdio_plus_minus(void __iomem *ioaddr, int reg_addr, int p, int m)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   608
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   609
	int val;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   610
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   611
	val = mdio_read(ioaddr, reg_addr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   612
	mdio_write(ioaddr, reg_addr, (val | p) & ~m);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   613
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   614
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   615
static void rtl_mdio_write(struct net_device *dev, int phy_id, int location,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   616
			   int val)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   617
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   618
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   619
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   620
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   621
	mdio_write(ioaddr, location, val);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   622
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   623
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   624
static int rtl_mdio_read(struct net_device *dev, int phy_id, int location)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   625
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   626
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   627
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   628
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   629
	return mdio_read(ioaddr, location);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   630
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   631
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   632
static void rtl_ephy_write(void __iomem *ioaddr, int reg_addr, int value)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   633
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   634
	unsigned int i;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   635
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   636
	RTL_W32(EPHYAR, EPHYAR_WRITE_CMD | (value & EPHYAR_DATA_MASK) |
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   637
		(reg_addr & EPHYAR_REG_MASK) << EPHYAR_REG_SHIFT);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   638
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   639
	for (i = 0; i < 100; i++) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   640
		if (!(RTL_R32(EPHYAR) & EPHYAR_FLAG))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   641
			break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   642
		udelay(10);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   643
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   644
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   645
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   646
static u16 rtl_ephy_read(void __iomem *ioaddr, int reg_addr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   647
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   648
	u16 value = 0xffff;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   649
	unsigned int i;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   650
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   651
	RTL_W32(EPHYAR, (reg_addr & EPHYAR_REG_MASK) << EPHYAR_REG_SHIFT);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   652
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   653
	for (i = 0; i < 100; i++) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   654
		if (RTL_R32(EPHYAR) & EPHYAR_FLAG) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   655
			value = RTL_R32(EPHYAR) & EPHYAR_DATA_MASK;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   656
			break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   657
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   658
		udelay(10);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   659
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   660
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   661
	return value;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   662
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   663
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   664
static void rtl_csi_write(void __iomem *ioaddr, int addr, int value)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   665
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   666
	unsigned int i;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   667
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   668
	RTL_W32(CSIDR, value);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   669
	RTL_W32(CSIAR, CSIAR_WRITE_CMD | (addr & CSIAR_ADDR_MASK) |
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   670
		CSIAR_BYTE_ENABLE << CSIAR_BYTE_ENABLE_SHIFT);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   671
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   672
	for (i = 0; i < 100; i++) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   673
		if (!(RTL_R32(CSIAR) & CSIAR_FLAG))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   674
			break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   675
		udelay(10);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   676
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   677
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   678
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   679
static u32 rtl_csi_read(void __iomem *ioaddr, int addr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   680
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   681
	u32 value = ~0x00;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   682
	unsigned int i;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   683
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   684
	RTL_W32(CSIAR, (addr & CSIAR_ADDR_MASK) |
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   685
		CSIAR_BYTE_ENABLE << CSIAR_BYTE_ENABLE_SHIFT);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   686
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   687
	for (i = 0; i < 100; i++) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   688
		if (RTL_R32(CSIAR) & CSIAR_FLAG) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   689
			value = RTL_R32(CSIDR);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   690
			break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   691
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   692
		udelay(10);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   693
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   694
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   695
	return value;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   696
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   697
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   698
static u8 rtl8168d_efuse_read(void __iomem *ioaddr, int reg_addr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   699
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   700
	u8 value = 0xff;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   701
	unsigned int i;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   702
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   703
	RTL_W32(EFUSEAR, (reg_addr & EFUSEAR_REG_MASK) << EFUSEAR_REG_SHIFT);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   704
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   705
	for (i = 0; i < 300; i++) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   706
		if (RTL_R32(EFUSEAR) & EFUSEAR_FLAG) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   707
			value = RTL_R32(EFUSEAR) & EFUSEAR_DATA_MASK;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   708
			break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   709
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   710
		udelay(100);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   711
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   712
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   713
	return value;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   714
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   715
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   716
static void rtl8169_irq_mask_and_ack(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   717
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   718
	RTL_W16(IntrMask, 0x0000);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   719
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   720
	RTL_W16(IntrStatus, 0xffff);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   721
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   722
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   723
static void rtl8169_asic_down(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   724
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   725
	RTL_W8(ChipCmd, 0x00);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   726
	rtl8169_irq_mask_and_ack(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   727
	RTL_R16(CPlusCmd);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   728
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   729
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   730
static unsigned int rtl8169_tbi_reset_pending(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   731
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   732
	return RTL_R32(TBICSR) & TBIReset;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   733
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   734
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   735
static unsigned int rtl8169_xmii_reset_pending(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   736
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   737
	return mdio_read(ioaddr, MII_BMCR) & BMCR_RESET;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   738
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   739
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   740
static unsigned int rtl8169_tbi_link_ok(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   741
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   742
	return RTL_R32(TBICSR) & TBILinkOk;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   743
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   744
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   745
static unsigned int rtl8169_xmii_link_ok(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   746
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   747
	return RTL_R8(PHYstatus) & LinkStatus;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   748
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   749
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   750
static void rtl8169_tbi_reset_enable(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   751
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   752
	RTL_W32(TBICSR, RTL_R32(TBICSR) | TBIReset);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   753
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   754
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   755
static void rtl8169_xmii_reset_enable(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   756
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   757
	unsigned int val;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   758
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   759
	val = mdio_read(ioaddr, MII_BMCR) | BMCR_RESET;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   760
	mdio_write(ioaddr, MII_BMCR, val & 0xffff);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   761
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   762
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   763
static void rtl8169_check_link_status(struct net_device *dev,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   764
				      struct rtl8169_private *tp,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   765
				      void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   766
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   767
	unsigned long flags;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   768
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   769
	if (tp->ecdev) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   770
		ecdev_set_link(tp->ecdev, tp->link_ok(ioaddr) ? 1 : 0);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   771
	} else {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   772
		spin_lock_irqsave(&tp->lock, flags);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   773
		if (tp->link_ok(ioaddr)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   774
			/* This is to cancel a scheduled suspend if there's one. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   775
			pm_request_resume(&tp->pci_dev->dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   776
			netif_carrier_on(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   777
			netif_info(tp, ifup, dev, "link up\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   778
		} else {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   779
			netif_carrier_off(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   780
			netif_info(tp, ifdown, dev, "link down\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   781
			pm_schedule_suspend(&tp->pci_dev->dev, 100);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   782
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   783
		spin_unlock_irqrestore(&tp->lock, flags);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   784
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   785
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   786
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   787
#define WAKE_ANY (WAKE_PHY | WAKE_MAGIC | WAKE_UCAST | WAKE_BCAST | WAKE_MCAST)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   788
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   789
static u32 __rtl8169_get_wol(struct rtl8169_private *tp)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   790
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   791
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   792
	u8 options;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   793
	u32 wolopts = 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   794
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   795
	options = RTL_R8(Config1);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   796
	if (!(options & PMEnable))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   797
		return 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   798
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   799
	options = RTL_R8(Config3);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   800
	if (options & LinkUp)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   801
		wolopts |= WAKE_PHY;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   802
	if (options & MagicPacket)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   803
		wolopts |= WAKE_MAGIC;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   804
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   805
	options = RTL_R8(Config5);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   806
	if (options & UWF)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   807
		wolopts |= WAKE_UCAST;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   808
	if (options & BWF)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   809
		wolopts |= WAKE_BCAST;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   810
	if (options & MWF)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   811
		wolopts |= WAKE_MCAST;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   812
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   813
	return wolopts;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   814
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   815
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   816
static void rtl8169_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   817
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   818
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   819
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   820
	spin_lock_irq(&tp->lock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   821
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   822
	wol->supported = WAKE_ANY;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   823
	wol->wolopts = __rtl8169_get_wol(tp);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   824
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   825
	spin_unlock_irq(&tp->lock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   826
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   827
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   828
static void __rtl8169_set_wol(struct rtl8169_private *tp, u32 wolopts)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   829
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   830
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   831
	unsigned int i;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   832
	static const struct {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   833
		u32 opt;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   834
		u16 reg;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   835
		u8  mask;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   836
	} cfg[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   837
		{ WAKE_ANY,   Config1, PMEnable },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   838
		{ WAKE_PHY,   Config3, LinkUp },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   839
		{ WAKE_MAGIC, Config3, MagicPacket },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   840
		{ WAKE_UCAST, Config5, UWF },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   841
		{ WAKE_BCAST, Config5, BWF },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   842
		{ WAKE_MCAST, Config5, MWF },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   843
		{ WAKE_ANY,   Config5, LanWake }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   844
	};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   845
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   846
	RTL_W8(Cfg9346, Cfg9346_Unlock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   847
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   848
	for (i = 0; i < ARRAY_SIZE(cfg); i++) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   849
		u8 options = RTL_R8(cfg[i].reg) & ~cfg[i].mask;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   850
		if (wolopts & cfg[i].opt)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   851
			options |= cfg[i].mask;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   852
		RTL_W8(cfg[i].reg, options);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   853
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   854
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   855
	RTL_W8(Cfg9346, Cfg9346_Lock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   856
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   857
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   858
static int rtl8169_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   859
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   860
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   861
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   862
	spin_lock_irq(&tp->lock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   863
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   864
	if (wol->wolopts)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   865
		tp->features |= RTL_FEATURE_WOL;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   866
	else
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   867
		tp->features &= ~RTL_FEATURE_WOL;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   868
	__rtl8169_set_wol(tp, wol->wolopts);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   869
	device_set_wakeup_enable(&tp->pci_dev->dev, wol->wolopts);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   870
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   871
	spin_unlock_irq(&tp->lock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   872
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   873
	return 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   874
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   875
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   876
static void rtl8169_get_drvinfo(struct net_device *dev,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   877
				struct ethtool_drvinfo *info)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   878
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   879
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   880
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   881
	strcpy(info->driver, MODULENAME);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   882
	strcpy(info->version, RTL8169_VERSION);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   883
	strcpy(info->bus_info, pci_name(tp->pci_dev));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   884
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   885
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   886
static int rtl8169_get_regs_len(struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   887
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   888
	return R8169_REGS_SIZE;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   889
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   890
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   891
static int rtl8169_set_speed_tbi(struct net_device *dev,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   892
				 u8 autoneg, u16 speed, u8 duplex)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   893
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   894
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   895
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   896
	int ret = 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   897
	u32 reg;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   898
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   899
	reg = RTL_R32(TBICSR);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   900
	if ((autoneg == AUTONEG_DISABLE) && (speed == SPEED_1000) &&
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   901
	    (duplex == DUPLEX_FULL)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   902
		RTL_W32(TBICSR, reg & ~(TBINwEnable | TBINwRestart));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   903
	} else if (autoneg == AUTONEG_ENABLE)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   904
		RTL_W32(TBICSR, reg | TBINwEnable | TBINwRestart);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   905
	else {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   906
		netif_warn(tp, link, dev,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   907
			   "incorrect speed setting refused in TBI mode\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   908
		ret = -EOPNOTSUPP;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   909
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   910
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   911
	return ret;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   912
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   913
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   914
static int rtl8169_set_speed_xmii(struct net_device *dev,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   915
				  u8 autoneg, u16 speed, u8 duplex)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   916
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   917
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   918
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   919
	int giga_ctrl, bmcr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   920
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   921
	if (autoneg == AUTONEG_ENABLE) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   922
		int auto_nego;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   923
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   924
		auto_nego = mdio_read(ioaddr, MII_ADVERTISE);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   925
		auto_nego |= (ADVERTISE_10HALF | ADVERTISE_10FULL |
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   926
			      ADVERTISE_100HALF | ADVERTISE_100FULL);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   927
		auto_nego |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   928
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   929
		giga_ctrl = mdio_read(ioaddr, MII_CTRL1000);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   930
		giga_ctrl &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   931
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   932
		/* The 8100e/8101e/8102e do Fast Ethernet only. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   933
		if ((tp->mac_version != RTL_GIGA_MAC_VER_07) &&
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   934
		    (tp->mac_version != RTL_GIGA_MAC_VER_08) &&
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   935
		    (tp->mac_version != RTL_GIGA_MAC_VER_09) &&
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   936
		    (tp->mac_version != RTL_GIGA_MAC_VER_10) &&
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   937
		    (tp->mac_version != RTL_GIGA_MAC_VER_13) &&
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   938
		    (tp->mac_version != RTL_GIGA_MAC_VER_14) &&
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   939
		    (tp->mac_version != RTL_GIGA_MAC_VER_15) &&
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   940
		    (tp->mac_version != RTL_GIGA_MAC_VER_16)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   941
			giga_ctrl |= ADVERTISE_1000FULL | ADVERTISE_1000HALF;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   942
		} else {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   943
			netif_info(tp, link, dev,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   944
				   "PHY does not support 1000Mbps\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   945
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   946
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   947
		bmcr = BMCR_ANENABLE | BMCR_ANRESTART;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   948
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   949
		if ((tp->mac_version == RTL_GIGA_MAC_VER_11) ||
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   950
		    (tp->mac_version == RTL_GIGA_MAC_VER_12) ||
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   951
		    (tp->mac_version >= RTL_GIGA_MAC_VER_17)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   952
			/*
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   953
			 * Wake up the PHY.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   954
			 * Vendor specific (0x1f) and reserved (0x0e) MII
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   955
			 * registers.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   956
			 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   957
			mdio_write(ioaddr, 0x1f, 0x0000);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   958
			mdio_write(ioaddr, 0x0e, 0x0000);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   959
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   960
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   961
		mdio_write(ioaddr, MII_ADVERTISE, auto_nego);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   962
		mdio_write(ioaddr, MII_CTRL1000, giga_ctrl);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   963
	} else {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   964
		giga_ctrl = 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   965
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   966
		if (speed == SPEED_10)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   967
			bmcr = 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   968
		else if (speed == SPEED_100)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   969
			bmcr = BMCR_SPEED100;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   970
		else
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   971
			return -EINVAL;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   972
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   973
		if (duplex == DUPLEX_FULL)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   974
			bmcr |= BMCR_FULLDPLX;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   975
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   976
		mdio_write(ioaddr, 0x1f, 0x0000);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   977
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   978
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   979
	tp->phy_1000_ctrl_reg = giga_ctrl;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   980
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   981
	mdio_write(ioaddr, MII_BMCR, bmcr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   982
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   983
	if ((tp->mac_version == RTL_GIGA_MAC_VER_02) ||
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   984
	    (tp->mac_version == RTL_GIGA_MAC_VER_03)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   985
		if ((speed == SPEED_100) && (autoneg != AUTONEG_ENABLE)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   986
			mdio_write(ioaddr, 0x17, 0x2138);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   987
			mdio_write(ioaddr, 0x0e, 0x0260);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   988
		} else {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   989
			mdio_write(ioaddr, 0x17, 0x2108);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   990
			mdio_write(ioaddr, 0x0e, 0x0000);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   991
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   992
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   993
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   994
	return 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   995
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   996
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   997
static int rtl8169_set_speed(struct net_device *dev,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   998
			     u8 autoneg, u16 speed, u8 duplex)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
   999
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1000
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1001
	int ret;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1002
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1003
	ret = tp->set_speed(dev, autoneg, speed, duplex);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1004
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1005
	if (netif_running(dev) && (tp->phy_1000_ctrl_reg & ADVERTISE_1000FULL))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1006
		mod_timer(&tp->timer, jiffies + RTL8169_PHY_TIMEOUT);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1007
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1008
	return ret;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1009
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1010
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1011
static int rtl8169_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1012
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1013
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1014
	unsigned long flags;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1015
	int ret;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1016
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1017
	spin_lock_irqsave(&tp->lock, flags);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1018
	ret = rtl8169_set_speed(dev, cmd->autoneg, cmd->speed, cmd->duplex);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1019
	spin_unlock_irqrestore(&tp->lock, flags);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1020
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1021
	return ret;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1022
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1023
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1024
static u32 rtl8169_get_rx_csum(struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1025
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1026
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1027
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1028
	return tp->cp_cmd & RxChkSum;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1029
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1030
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1031
static int rtl8169_set_rx_csum(struct net_device *dev, u32 data)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1032
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1033
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1034
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1035
	unsigned long flags;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1036
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1037
	spin_lock_irqsave(&tp->lock, flags);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1038
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1039
	if (data)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1040
		tp->cp_cmd |= RxChkSum;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1041
	else
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1042
		tp->cp_cmd &= ~RxChkSum;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1043
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1044
	RTL_W16(CPlusCmd, tp->cp_cmd);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1045
	RTL_R16(CPlusCmd);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1046
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1047
	spin_unlock_irqrestore(&tp->lock, flags);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1048
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1049
	return 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1050
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1051
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1052
#ifdef CONFIG_R8169_VLAN
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1053
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1054
static inline u32 rtl8169_tx_vlan_tag(struct rtl8169_private *tp,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1055
				      struct sk_buff *skb)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1056
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1057
	return (tp->vlgrp && vlan_tx_tag_present(skb)) ?
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1058
		TxVlanTag | swab16(vlan_tx_tag_get(skb)) : 0x00;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1059
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1060
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1061
static void rtl8169_vlan_rx_register(struct net_device *dev,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1062
				     struct vlan_group *grp)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1063
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1064
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1065
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1066
	unsigned long flags;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1067
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1068
	spin_lock_irqsave(&tp->lock, flags);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1069
	tp->vlgrp = grp;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1070
	/*
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1071
	 * Do not disable RxVlan on 8110SCd.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1072
	 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1073
	if (tp->vlgrp || (tp->mac_version == RTL_GIGA_MAC_VER_05))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1074
		tp->cp_cmd |= RxVlan;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1075
	else
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1076
		tp->cp_cmd &= ~RxVlan;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1077
	RTL_W16(CPlusCmd, tp->cp_cmd);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1078
	RTL_R16(CPlusCmd);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1079
	spin_unlock_irqrestore(&tp->lock, flags);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1080
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1081
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1082
static int rtl8169_rx_vlan_skb(struct rtl8169_private *tp, struct RxDesc *desc,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1083
			       struct sk_buff *skb, int polling)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1084
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1085
	u32 opts2 = le32_to_cpu(desc->opts2);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1086
	struct vlan_group *vlgrp = tp->vlgrp;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1087
	int ret;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1088
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1089
	if (vlgrp && (opts2 & RxVlanTag)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1090
		__vlan_hwaccel_rx(skb, vlgrp, swab16(opts2 & 0xffff), polling);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1091
		ret = 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1092
	} else
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1093
		ret = -1;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1094
	desc->opts2 = 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1095
	return ret;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1096
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1097
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1098
#else /* !CONFIG_R8169_VLAN */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1099
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1100
static inline u32 rtl8169_tx_vlan_tag(struct rtl8169_private *tp,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1101
				      struct sk_buff *skb)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1102
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1103
	return 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1104
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1105
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1106
static int rtl8169_rx_vlan_skb(struct rtl8169_private *tp, struct RxDesc *desc,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1107
			       struct sk_buff *skb, int polling)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1108
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1109
	return -1;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1110
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1111
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1112
#endif
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1113
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1114
static int rtl8169_gset_tbi(struct net_device *dev, struct ethtool_cmd *cmd)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1115
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1116
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1117
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1118
	u32 status;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1119
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1120
	cmd->supported =
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1121
		SUPPORTED_1000baseT_Full | SUPPORTED_Autoneg | SUPPORTED_FIBRE;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1122
	cmd->port = PORT_FIBRE;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1123
	cmd->transceiver = XCVR_INTERNAL;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1124
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1125
	status = RTL_R32(TBICSR);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1126
	cmd->advertising = (status & TBINwEnable) ?  ADVERTISED_Autoneg : 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1127
	cmd->autoneg = !!(status & TBINwEnable);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1128
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1129
	cmd->speed = SPEED_1000;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1130
	cmd->duplex = DUPLEX_FULL; /* Always set */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1131
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1132
	return 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1133
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1134
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1135
static int rtl8169_gset_xmii(struct net_device *dev, struct ethtool_cmd *cmd)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1136
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1137
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1138
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1139
	return mii_ethtool_gset(&tp->mii, cmd);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1140
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1141
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1142
static int rtl8169_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1143
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1144
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1145
	unsigned long flags;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1146
	int rc;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1147
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1148
	spin_lock_irqsave(&tp->lock, flags);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1149
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1150
	rc = tp->get_settings(dev, cmd);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1151
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1152
	spin_unlock_irqrestore(&tp->lock, flags);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1153
	return rc;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1154
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1155
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1156
static void rtl8169_get_regs(struct net_device *dev, struct ethtool_regs *regs,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1157
			     void *p)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1158
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1159
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1160
	unsigned long flags;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1161
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1162
	if (regs->len > R8169_REGS_SIZE)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1163
		regs->len = R8169_REGS_SIZE;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1164
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1165
	spin_lock_irqsave(&tp->lock, flags);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1166
	memcpy_fromio(p, tp->mmio_addr, regs->len);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1167
	spin_unlock_irqrestore(&tp->lock, flags);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1168
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1169
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1170
static u32 rtl8169_get_msglevel(struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1171
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1172
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1173
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1174
	return tp->msg_enable;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1175
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1176
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1177
static void rtl8169_set_msglevel(struct net_device *dev, u32 value)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1178
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1179
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1180
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1181
	tp->msg_enable = value;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1182
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1183
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1184
static const char rtl8169_gstrings[][ETH_GSTRING_LEN] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1185
	"tx_packets",
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1186
	"rx_packets",
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1187
	"tx_errors",
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1188
	"rx_errors",
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1189
	"rx_missed",
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1190
	"align_errors",
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1191
	"tx_single_collisions",
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1192
	"tx_multi_collisions",
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1193
	"unicast",
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1194
	"broadcast",
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1195
	"multicast",
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1196
	"tx_aborted",
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1197
	"tx_underrun",
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1198
};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1199
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1200
static int rtl8169_get_sset_count(struct net_device *dev, int sset)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1201
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1202
	switch (sset) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1203
	case ETH_SS_STATS:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1204
		return ARRAY_SIZE(rtl8169_gstrings);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1205
	default:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1206
		return -EOPNOTSUPP;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1207
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1208
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1209
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1210
static void rtl8169_update_counters(struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1211
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1212
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1213
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1214
	struct rtl8169_counters *counters;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1215
	dma_addr_t paddr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1216
	u32 cmd;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1217
	int wait = 1000;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1218
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1219
	/*
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1220
	 * Some chips are unable to dump tally counters when the receiver
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1221
	 * is disabled.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1222
	 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1223
	if ((RTL_R8(ChipCmd) & CmdRxEnb) == 0)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1224
		return;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1225
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1226
	counters = dma_alloc_coherent(&tp->pci_dev->dev, sizeof(*counters),
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1227
				      &paddr, GFP_KERNEL);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1228
	if (!counters)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1229
		return;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1230
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1231
	RTL_W32(CounterAddrHigh, (u64)paddr >> 32);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1232
	cmd = (u64)paddr & DMA_BIT_MASK(32);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1233
	RTL_W32(CounterAddrLow, cmd);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1234
	RTL_W32(CounterAddrLow, cmd | CounterDump);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1235
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1236
	while (wait--) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1237
		if ((RTL_R32(CounterAddrLow) & CounterDump) == 0) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1238
			/* copy updated counters */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1239
			memcpy(&tp->counters, counters, sizeof(*counters));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1240
			break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1241
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1242
		udelay(10);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1243
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1244
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1245
	RTL_W32(CounterAddrLow, 0);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1246
	RTL_W32(CounterAddrHigh, 0);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1247
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1248
	dma_free_coherent(&tp->pci_dev->dev, sizeof(*counters), counters,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1249
			  paddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1250
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1251
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1252
static void rtl8169_get_ethtool_stats(struct net_device *dev,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1253
				      struct ethtool_stats *stats, u64 *data)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1254
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1255
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1256
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1257
	ASSERT_RTNL();
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1258
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1259
	rtl8169_update_counters(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1260
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1261
	data[0] = le64_to_cpu(tp->counters.tx_packets);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1262
	data[1] = le64_to_cpu(tp->counters.rx_packets);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1263
	data[2] = le64_to_cpu(tp->counters.tx_errors);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1264
	data[3] = le32_to_cpu(tp->counters.rx_errors);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1265
	data[4] = le16_to_cpu(tp->counters.rx_missed);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1266
	data[5] = le16_to_cpu(tp->counters.align_errors);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1267
	data[6] = le32_to_cpu(tp->counters.tx_one_collision);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1268
	data[7] = le32_to_cpu(tp->counters.tx_multi_collision);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1269
	data[8] = le64_to_cpu(tp->counters.rx_unicast);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1270
	data[9] = le64_to_cpu(tp->counters.rx_broadcast);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1271
	data[10] = le32_to_cpu(tp->counters.rx_multicast);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1272
	data[11] = le16_to_cpu(tp->counters.tx_aborted);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1273
	data[12] = le16_to_cpu(tp->counters.tx_underun);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1274
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1275
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1276
static void rtl8169_get_strings(struct net_device *dev, u32 stringset, u8 *data)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1277
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1278
	switch(stringset) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1279
	case ETH_SS_STATS:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1280
		memcpy(data, *rtl8169_gstrings, sizeof(rtl8169_gstrings));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1281
		break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1282
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1283
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1284
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1285
static const struct ethtool_ops rtl8169_ethtool_ops = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1286
	.get_drvinfo		= rtl8169_get_drvinfo,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1287
	.get_regs_len		= rtl8169_get_regs_len,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1288
	.get_link		= ethtool_op_get_link,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1289
	.get_settings		= rtl8169_get_settings,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1290
	.set_settings		= rtl8169_set_settings,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1291
	.get_msglevel		= rtl8169_get_msglevel,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1292
	.set_msglevel		= rtl8169_set_msglevel,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1293
	.get_rx_csum		= rtl8169_get_rx_csum,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1294
	.set_rx_csum		= rtl8169_set_rx_csum,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1295
	.set_tx_csum		= ethtool_op_set_tx_csum,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1296
	.set_sg			= ethtool_op_set_sg,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1297
	.set_tso		= ethtool_op_set_tso,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1298
	.get_regs		= rtl8169_get_regs,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1299
	.get_wol		= rtl8169_get_wol,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1300
	.set_wol		= rtl8169_set_wol,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1301
	.get_strings		= rtl8169_get_strings,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1302
	.get_sset_count		= rtl8169_get_sset_count,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1303
	.get_ethtool_stats	= rtl8169_get_ethtool_stats,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1304
};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1305
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1306
static void rtl8169_get_mac_version(struct rtl8169_private *tp,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1307
				    void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1308
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1309
	/*
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1310
	 * The driver currently handles the 8168Bf and the 8168Be identically
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1311
	 * but they can be identified more specifically through the test below
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1312
	 * if needed:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1313
	 *
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1314
	 * (RTL_R32(TxConfig) & 0x700000) == 0x500000 ? 8168Bf : 8168Be
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1315
	 *
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1316
	 * Same thing for the 8101Eb and the 8101Ec:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1317
	 *
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1318
	 * (RTL_R32(TxConfig) & 0x700000) == 0x200000 ? 8101Eb : 8101Ec
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1319
	 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1320
	static const struct {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1321
		u32 mask;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1322
		u32 val;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1323
		int mac_version;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1324
	} mac_info[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1325
		/* 8168D family. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1326
		{ 0x7cf00000, 0x28300000,	RTL_GIGA_MAC_VER_26 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1327
		{ 0x7cf00000, 0x28100000,	RTL_GIGA_MAC_VER_25 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1328
		{ 0x7c800000, 0x28800000,	RTL_GIGA_MAC_VER_27 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1329
		{ 0x7c800000, 0x28000000,	RTL_GIGA_MAC_VER_26 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1330
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1331
		/* 8168C family. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1332
		{ 0x7cf00000, 0x3cb00000,	RTL_GIGA_MAC_VER_24 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1333
		{ 0x7cf00000, 0x3c900000,	RTL_GIGA_MAC_VER_23 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1334
		{ 0x7cf00000, 0x3c800000,	RTL_GIGA_MAC_VER_18 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1335
		{ 0x7c800000, 0x3c800000,	RTL_GIGA_MAC_VER_24 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1336
		{ 0x7cf00000, 0x3c000000,	RTL_GIGA_MAC_VER_19 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1337
		{ 0x7cf00000, 0x3c200000,	RTL_GIGA_MAC_VER_20 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1338
		{ 0x7cf00000, 0x3c300000,	RTL_GIGA_MAC_VER_21 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1339
		{ 0x7cf00000, 0x3c400000,	RTL_GIGA_MAC_VER_22 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1340
		{ 0x7c800000, 0x3c000000,	RTL_GIGA_MAC_VER_22 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1341
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1342
		/* 8168B family. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1343
		{ 0x7cf00000, 0x38000000,	RTL_GIGA_MAC_VER_12 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1344
		{ 0x7cf00000, 0x38500000,	RTL_GIGA_MAC_VER_17 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1345
		{ 0x7c800000, 0x38000000,	RTL_GIGA_MAC_VER_17 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1346
		{ 0x7c800000, 0x30000000,	RTL_GIGA_MAC_VER_11 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1347
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1348
		/* 8101 family. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1349
		{ 0x7cf00000, 0x34a00000,	RTL_GIGA_MAC_VER_09 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1350
		{ 0x7cf00000, 0x24a00000,	RTL_GIGA_MAC_VER_09 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1351
		{ 0x7cf00000, 0x34900000,	RTL_GIGA_MAC_VER_08 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1352
		{ 0x7cf00000, 0x24900000,	RTL_GIGA_MAC_VER_08 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1353
		{ 0x7cf00000, 0x34800000,	RTL_GIGA_MAC_VER_07 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1354
		{ 0x7cf00000, 0x24800000,	RTL_GIGA_MAC_VER_07 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1355
		{ 0x7cf00000, 0x34000000,	RTL_GIGA_MAC_VER_13 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1356
		{ 0x7cf00000, 0x34300000,	RTL_GIGA_MAC_VER_10 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1357
		{ 0x7cf00000, 0x34200000,	RTL_GIGA_MAC_VER_16 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1358
		{ 0x7c800000, 0x34800000,	RTL_GIGA_MAC_VER_09 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1359
		{ 0x7c800000, 0x24800000,	RTL_GIGA_MAC_VER_09 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1360
		{ 0x7c800000, 0x34000000,	RTL_GIGA_MAC_VER_16 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1361
		/* FIXME: where did these entries come from ? -- FR */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1362
		{ 0xfc800000, 0x38800000,	RTL_GIGA_MAC_VER_15 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1363
		{ 0xfc800000, 0x30800000,	RTL_GIGA_MAC_VER_14 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1364
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1365
		/* 8110 family. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1366
		{ 0xfc800000, 0x98000000,	RTL_GIGA_MAC_VER_06 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1367
		{ 0xfc800000, 0x18000000,	RTL_GIGA_MAC_VER_05 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1368
		{ 0xfc800000, 0x10000000,	RTL_GIGA_MAC_VER_04 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1369
		{ 0xfc800000, 0x04000000,	RTL_GIGA_MAC_VER_03 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1370
		{ 0xfc800000, 0x00800000,	RTL_GIGA_MAC_VER_02 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1371
		{ 0xfc800000, 0x00000000,	RTL_GIGA_MAC_VER_01 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1372
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1373
		/* Catch-all */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1374
		{ 0x00000000, 0x00000000,	RTL_GIGA_MAC_NONE   }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1375
	}, *p = mac_info;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1376
	u32 reg;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1377
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1378
	reg = RTL_R32(TxConfig);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1379
	while ((reg & p->mask) != p->val)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1380
		p++;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1381
	tp->mac_version = p->mac_version;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1382
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1383
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1384
static void rtl8169_print_mac_version(struct rtl8169_private *tp)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1385
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1386
	dprintk("mac_version = 0x%02x\n", tp->mac_version);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1387
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1388
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1389
struct phy_reg {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1390
	u16 reg;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1391
	u16 val;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1392
};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1393
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1394
static void rtl_phy_write(void __iomem *ioaddr, const struct phy_reg *regs, int len)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1395
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1396
	while (len-- > 0) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1397
		mdio_write(ioaddr, regs->reg, regs->val);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1398
		regs++;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1399
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1400
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1401
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1402
static void rtl8169s_hw_phy_config(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1403
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1404
	static const struct phy_reg phy_reg_init[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1405
		{ 0x1f, 0x0001 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1406
		{ 0x06, 0x006e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1407
		{ 0x08, 0x0708 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1408
		{ 0x15, 0x4000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1409
		{ 0x18, 0x65c7 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1410
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1411
		{ 0x1f, 0x0001 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1412
		{ 0x03, 0x00a1 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1413
		{ 0x02, 0x0008 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1414
		{ 0x01, 0x0120 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1415
		{ 0x00, 0x1000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1416
		{ 0x04, 0x0800 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1417
		{ 0x04, 0x0000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1418
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1419
		{ 0x03, 0xff41 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1420
		{ 0x02, 0xdf60 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1421
		{ 0x01, 0x0140 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1422
		{ 0x00, 0x0077 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1423
		{ 0x04, 0x7800 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1424
		{ 0x04, 0x7000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1425
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1426
		{ 0x03, 0x802f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1427
		{ 0x02, 0x4f02 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1428
		{ 0x01, 0x0409 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1429
		{ 0x00, 0xf0f9 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1430
		{ 0x04, 0x9800 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1431
		{ 0x04, 0x9000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1432
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1433
		{ 0x03, 0xdf01 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1434
		{ 0x02, 0xdf20 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1435
		{ 0x01, 0xff95 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1436
		{ 0x00, 0xba00 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1437
		{ 0x04, 0xa800 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1438
		{ 0x04, 0xa000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1439
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1440
		{ 0x03, 0xff41 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1441
		{ 0x02, 0xdf20 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1442
		{ 0x01, 0x0140 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1443
		{ 0x00, 0x00bb },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1444
		{ 0x04, 0xb800 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1445
		{ 0x04, 0xb000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1446
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1447
		{ 0x03, 0xdf41 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1448
		{ 0x02, 0xdc60 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1449
		{ 0x01, 0x6340 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1450
		{ 0x00, 0x007d },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1451
		{ 0x04, 0xd800 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1452
		{ 0x04, 0xd000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1453
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1454
		{ 0x03, 0xdf01 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1455
		{ 0x02, 0xdf20 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1456
		{ 0x01, 0x100a },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1457
		{ 0x00, 0xa0ff },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1458
		{ 0x04, 0xf800 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1459
		{ 0x04, 0xf000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1460
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1461
		{ 0x1f, 0x0000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1462
		{ 0x0b, 0x0000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1463
		{ 0x00, 0x9200 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1464
	};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1465
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1466
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1467
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1468
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1469
static void rtl8169sb_hw_phy_config(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1470
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1471
	static const struct phy_reg phy_reg_init[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1472
		{ 0x1f, 0x0002 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1473
		{ 0x01, 0x90d0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1474
		{ 0x1f, 0x0000 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1475
	};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1476
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1477
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1478
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1479
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1480
static void rtl8169scd_hw_phy_config_quirk(struct rtl8169_private *tp,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1481
					   void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1482
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1483
	struct pci_dev *pdev = tp->pci_dev;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1484
	u16 vendor_id, device_id;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1485
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1486
	pci_read_config_word(pdev, PCI_SUBSYSTEM_VENDOR_ID, &vendor_id);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1487
	pci_read_config_word(pdev, PCI_SUBSYSTEM_ID, &device_id);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1488
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1489
	if ((vendor_id != PCI_VENDOR_ID_GIGABYTE) || (device_id != 0xe000))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1490
		return;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1491
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1492
	mdio_write(ioaddr, 0x1f, 0x0001);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1493
	mdio_write(ioaddr, 0x10, 0xf01b);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1494
	mdio_write(ioaddr, 0x1f, 0x0000);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1495
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1496
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1497
static void rtl8169scd_hw_phy_config(struct rtl8169_private *tp,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1498
				     void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1499
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1500
	static const struct phy_reg phy_reg_init[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1501
		{ 0x1f, 0x0001 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1502
		{ 0x04, 0x0000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1503
		{ 0x03, 0x00a1 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1504
		{ 0x02, 0x0008 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1505
		{ 0x01, 0x0120 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1506
		{ 0x00, 0x1000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1507
		{ 0x04, 0x0800 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1508
		{ 0x04, 0x9000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1509
		{ 0x03, 0x802f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1510
		{ 0x02, 0x4f02 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1511
		{ 0x01, 0x0409 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1512
		{ 0x00, 0xf099 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1513
		{ 0x04, 0x9800 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1514
		{ 0x04, 0xa000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1515
		{ 0x03, 0xdf01 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1516
		{ 0x02, 0xdf20 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1517
		{ 0x01, 0xff95 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1518
		{ 0x00, 0xba00 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1519
		{ 0x04, 0xa800 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1520
		{ 0x04, 0xf000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1521
		{ 0x03, 0xdf01 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1522
		{ 0x02, 0xdf20 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1523
		{ 0x01, 0x101a },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1524
		{ 0x00, 0xa0ff },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1525
		{ 0x04, 0xf800 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1526
		{ 0x04, 0x0000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1527
		{ 0x1f, 0x0000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1528
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1529
		{ 0x1f, 0x0001 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1530
		{ 0x10, 0xf41b },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1531
		{ 0x14, 0xfb54 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1532
		{ 0x18, 0xf5c7 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1533
		{ 0x1f, 0x0000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1534
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1535
		{ 0x1f, 0x0001 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1536
		{ 0x17, 0x0cc0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1537
		{ 0x1f, 0x0000 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1538
	};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1539
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1540
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1541
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1542
	rtl8169scd_hw_phy_config_quirk(tp, ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1543
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1544
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1545
static void rtl8169sce_hw_phy_config(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1546
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1547
	static const struct phy_reg phy_reg_init[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1548
		{ 0x1f, 0x0001 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1549
		{ 0x04, 0x0000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1550
		{ 0x03, 0x00a1 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1551
		{ 0x02, 0x0008 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1552
		{ 0x01, 0x0120 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1553
		{ 0x00, 0x1000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1554
		{ 0x04, 0x0800 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1555
		{ 0x04, 0x9000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1556
		{ 0x03, 0x802f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1557
		{ 0x02, 0x4f02 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1558
		{ 0x01, 0x0409 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1559
		{ 0x00, 0xf099 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1560
		{ 0x04, 0x9800 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1561
		{ 0x04, 0xa000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1562
		{ 0x03, 0xdf01 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1563
		{ 0x02, 0xdf20 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1564
		{ 0x01, 0xff95 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1565
		{ 0x00, 0xba00 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1566
		{ 0x04, 0xa800 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1567
		{ 0x04, 0xf000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1568
		{ 0x03, 0xdf01 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1569
		{ 0x02, 0xdf20 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1570
		{ 0x01, 0x101a },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1571
		{ 0x00, 0xa0ff },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1572
		{ 0x04, 0xf800 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1573
		{ 0x04, 0x0000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1574
		{ 0x1f, 0x0000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1575
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1576
		{ 0x1f, 0x0001 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1577
		{ 0x0b, 0x8480 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1578
		{ 0x1f, 0x0000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1579
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1580
		{ 0x1f, 0x0001 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1581
		{ 0x18, 0x67c7 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1582
		{ 0x04, 0x2000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1583
		{ 0x03, 0x002f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1584
		{ 0x02, 0x4360 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1585
		{ 0x01, 0x0109 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1586
		{ 0x00, 0x3022 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1587
		{ 0x04, 0x2800 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1588
		{ 0x1f, 0x0000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1589
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1590
		{ 0x1f, 0x0001 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1591
		{ 0x17, 0x0cc0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1592
		{ 0x1f, 0x0000 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1593
	};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1594
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1595
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1596
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1597
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1598
static void rtl8168bb_hw_phy_config(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1599
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1600
	static const struct phy_reg phy_reg_init[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1601
		{ 0x10, 0xf41b },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1602
		{ 0x1f, 0x0000 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1603
	};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1604
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1605
	mdio_write(ioaddr, 0x1f, 0x0001);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1606
	mdio_patch(ioaddr, 0x16, 1 << 0);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1607
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1608
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1609
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1610
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1611
static void rtl8168bef_hw_phy_config(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1612
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1613
	static const struct phy_reg phy_reg_init[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1614
		{ 0x1f, 0x0001 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1615
		{ 0x10, 0xf41b },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1616
		{ 0x1f, 0x0000 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1617
	};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1618
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1619
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1620
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1621
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1622
static void rtl8168cp_1_hw_phy_config(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1623
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1624
	static const struct phy_reg phy_reg_init[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1625
		{ 0x1f, 0x0000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1626
		{ 0x1d, 0x0f00 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1627
		{ 0x1f, 0x0002 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1628
		{ 0x0c, 0x1ec8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1629
		{ 0x1f, 0x0000 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1630
	};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1631
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1632
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1633
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1634
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1635
static void rtl8168cp_2_hw_phy_config(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1636
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1637
	static const struct phy_reg phy_reg_init[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1638
		{ 0x1f, 0x0001 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1639
		{ 0x1d, 0x3d98 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1640
		{ 0x1f, 0x0000 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1641
	};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1642
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1643
	mdio_write(ioaddr, 0x1f, 0x0000);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1644
	mdio_patch(ioaddr, 0x14, 1 << 5);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1645
	mdio_patch(ioaddr, 0x0d, 1 << 5);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1646
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1647
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1648
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1649
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1650
static void rtl8168c_1_hw_phy_config(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1651
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1652
	static const struct phy_reg phy_reg_init[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1653
		{ 0x1f, 0x0001 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1654
		{ 0x12, 0x2300 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1655
		{ 0x1f, 0x0002 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1656
		{ 0x00, 0x88d4 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1657
		{ 0x01, 0x82b1 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1658
		{ 0x03, 0x7002 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1659
		{ 0x08, 0x9e30 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1660
		{ 0x09, 0x01f0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1661
		{ 0x0a, 0x5500 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1662
		{ 0x0c, 0x00c8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1663
		{ 0x1f, 0x0003 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1664
		{ 0x12, 0xc096 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1665
		{ 0x16, 0x000a },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1666
		{ 0x1f, 0x0000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1667
		{ 0x1f, 0x0000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1668
		{ 0x09, 0x2000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1669
		{ 0x09, 0x0000 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1670
	};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1671
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1672
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1673
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1674
	mdio_patch(ioaddr, 0x14, 1 << 5);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1675
	mdio_patch(ioaddr, 0x0d, 1 << 5);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1676
	mdio_write(ioaddr, 0x1f, 0x0000);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1677
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1678
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1679
static void rtl8168c_2_hw_phy_config(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1680
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1681
	static const struct phy_reg phy_reg_init[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1682
		{ 0x1f, 0x0001 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1683
		{ 0x12, 0x2300 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1684
		{ 0x03, 0x802f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1685
		{ 0x02, 0x4f02 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1686
		{ 0x01, 0x0409 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1687
		{ 0x00, 0xf099 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1688
		{ 0x04, 0x9800 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1689
		{ 0x04, 0x9000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1690
		{ 0x1d, 0x3d98 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1691
		{ 0x1f, 0x0002 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1692
		{ 0x0c, 0x7eb8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1693
		{ 0x06, 0x0761 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1694
		{ 0x1f, 0x0003 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1695
		{ 0x16, 0x0f0a },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1696
		{ 0x1f, 0x0000 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1697
	};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1698
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1699
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1700
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1701
	mdio_patch(ioaddr, 0x16, 1 << 0);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1702
	mdio_patch(ioaddr, 0x14, 1 << 5);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1703
	mdio_patch(ioaddr, 0x0d, 1 << 5);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1704
	mdio_write(ioaddr, 0x1f, 0x0000);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1705
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1706
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1707
static void rtl8168c_3_hw_phy_config(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1708
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1709
	static const struct phy_reg phy_reg_init[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1710
		{ 0x1f, 0x0001 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1711
		{ 0x12, 0x2300 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1712
		{ 0x1d, 0x3d98 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1713
		{ 0x1f, 0x0002 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1714
		{ 0x0c, 0x7eb8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1715
		{ 0x06, 0x5461 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1716
		{ 0x1f, 0x0003 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1717
		{ 0x16, 0x0f0a },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1718
		{ 0x1f, 0x0000 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1719
	};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1720
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1721
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1722
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1723
	mdio_patch(ioaddr, 0x16, 1 << 0);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1724
	mdio_patch(ioaddr, 0x14, 1 << 5);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1725
	mdio_patch(ioaddr, 0x0d, 1 << 5);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1726
	mdio_write(ioaddr, 0x1f, 0x0000);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1727
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1728
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1729
static void rtl8168c_4_hw_phy_config(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1730
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1731
	rtl8168c_3_hw_phy_config(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1732
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1733
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1734
static void rtl8168d_1_hw_phy_config(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1735
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1736
	static const struct phy_reg phy_reg_init_0[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1737
		{ 0x1f, 0x0001 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1738
		{ 0x06, 0x4064 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1739
		{ 0x07, 0x2863 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1740
		{ 0x08, 0x059c },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1741
		{ 0x09, 0x26b4 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1742
		{ 0x0a, 0x6a19 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1743
		{ 0x0b, 0xdcc8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1744
		{ 0x10, 0xf06d },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1745
		{ 0x14, 0x7f68 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1746
		{ 0x18, 0x7fd9 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1747
		{ 0x1c, 0xf0ff },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1748
		{ 0x1d, 0x3d9c },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1749
		{ 0x1f, 0x0003 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1750
		{ 0x12, 0xf49f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1751
		{ 0x13, 0x070b },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1752
		{ 0x1a, 0x05ad },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1753
		{ 0x14, 0x94c0 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1754
	};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1755
	static const struct phy_reg phy_reg_init_1[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1756
		{ 0x1f, 0x0002 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1757
		{ 0x06, 0x5561 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1758
		{ 0x1f, 0x0005 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1759
		{ 0x05, 0x8332 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1760
		{ 0x06, 0x5561 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1761
	};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1762
	static const struct phy_reg phy_reg_init_2[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1763
		{ 0x1f, 0x0005 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1764
		{ 0x05, 0xffc2 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1765
		{ 0x1f, 0x0005 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1766
		{ 0x05, 0x8000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1767
		{ 0x06, 0xf8f9 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1768
		{ 0x06, 0xfaef },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1769
		{ 0x06, 0x59ee },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1770
		{ 0x06, 0xf8ea },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1771
		{ 0x06, 0x00ee },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1772
		{ 0x06, 0xf8eb },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1773
		{ 0x06, 0x00e0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1774
		{ 0x06, 0xf87c },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1775
		{ 0x06, 0xe1f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1776
		{ 0x06, 0x7d59 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1777
		{ 0x06, 0x0fef },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1778
		{ 0x06, 0x0139 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1779
		{ 0x06, 0x029e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1780
		{ 0x06, 0x06ef },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1781
		{ 0x06, 0x1039 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1782
		{ 0x06, 0x089f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1783
		{ 0x06, 0x2aee },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1784
		{ 0x06, 0xf8ea },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1785
		{ 0x06, 0x00ee },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1786
		{ 0x06, 0xf8eb },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1787
		{ 0x06, 0x01e0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1788
		{ 0x06, 0xf87c },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1789
		{ 0x06, 0xe1f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1790
		{ 0x06, 0x7d58 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1791
		{ 0x06, 0x409e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1792
		{ 0x06, 0x0f39 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1793
		{ 0x06, 0x46aa },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1794
		{ 0x06, 0x0bbf },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1795
		{ 0x06, 0x8290 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1796
		{ 0x06, 0xd682 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1797
		{ 0x06, 0x9802 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1798
		{ 0x06, 0x014f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1799
		{ 0x06, 0xae09 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1800
		{ 0x06, 0xbf82 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1801
		{ 0x06, 0x98d6 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1802
		{ 0x06, 0x82a0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1803
		{ 0x06, 0x0201 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1804
		{ 0x06, 0x4fef },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1805
		{ 0x06, 0x95fe },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1806
		{ 0x06, 0xfdfc },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1807
		{ 0x06, 0x05f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1808
		{ 0x06, 0xf9fa },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1809
		{ 0x06, 0xeef8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1810
		{ 0x06, 0xea00 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1811
		{ 0x06, 0xeef8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1812
		{ 0x06, 0xeb00 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1813
		{ 0x06, 0xe2f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1814
		{ 0x06, 0x7ce3 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1815
		{ 0x06, 0xf87d },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1816
		{ 0x06, 0xa511 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1817
		{ 0x06, 0x1112 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1818
		{ 0x06, 0xd240 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1819
		{ 0x06, 0xd644 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1820
		{ 0x06, 0x4402 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1821
		{ 0x06, 0x8217 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1822
		{ 0x06, 0xd2a0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1823
		{ 0x06, 0xd6aa },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1824
		{ 0x06, 0xaa02 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1825
		{ 0x06, 0x8217 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1826
		{ 0x06, 0xae0f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1827
		{ 0x06, 0xa544 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1828
		{ 0x06, 0x4402 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1829
		{ 0x06, 0xae4d },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1830
		{ 0x06, 0xa5aa },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1831
		{ 0x06, 0xaa02 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1832
		{ 0x06, 0xae47 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1833
		{ 0x06, 0xaf82 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1834
		{ 0x06, 0x13ee },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1835
		{ 0x06, 0x834e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1836
		{ 0x06, 0x00ee },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1837
		{ 0x06, 0x834d },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1838
		{ 0x06, 0x0fee },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1839
		{ 0x06, 0x834c },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1840
		{ 0x06, 0x0fee },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1841
		{ 0x06, 0x834f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1842
		{ 0x06, 0x00ee },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1843
		{ 0x06, 0x8351 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1844
		{ 0x06, 0x00ee },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1845
		{ 0x06, 0x834a },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1846
		{ 0x06, 0xffee },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1847
		{ 0x06, 0x834b },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1848
		{ 0x06, 0xffe0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1849
		{ 0x06, 0x8330 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1850
		{ 0x06, 0xe183 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1851
		{ 0x06, 0x3158 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1852
		{ 0x06, 0xfee4 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1853
		{ 0x06, 0xf88a },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1854
		{ 0x06, 0xe5f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1855
		{ 0x06, 0x8be0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1856
		{ 0x06, 0x8332 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1857
		{ 0x06, 0xe183 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1858
		{ 0x06, 0x3359 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1859
		{ 0x06, 0x0fe2 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1860
		{ 0x06, 0x834d },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1861
		{ 0x06, 0x0c24 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1862
		{ 0x06, 0x5af0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1863
		{ 0x06, 0x1e12 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1864
		{ 0x06, 0xe4f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1865
		{ 0x06, 0x8ce5 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1866
		{ 0x06, 0xf88d },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1867
		{ 0x06, 0xaf82 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1868
		{ 0x06, 0x13e0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1869
		{ 0x06, 0x834f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1870
		{ 0x06, 0x10e4 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1871
		{ 0x06, 0x834f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1872
		{ 0x06, 0xe083 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1873
		{ 0x06, 0x4e78 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1874
		{ 0x06, 0x009f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1875
		{ 0x06, 0x0ae0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1876
		{ 0x06, 0x834f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1877
		{ 0x06, 0xa010 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1878
		{ 0x06, 0xa5ee },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1879
		{ 0x06, 0x834e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1880
		{ 0x06, 0x01e0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1881
		{ 0x06, 0x834e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1882
		{ 0x06, 0x7805 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1883
		{ 0x06, 0x9e9a },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1884
		{ 0x06, 0xe083 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1885
		{ 0x06, 0x4e78 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1886
		{ 0x06, 0x049e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1887
		{ 0x06, 0x10e0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1888
		{ 0x06, 0x834e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1889
		{ 0x06, 0x7803 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1890
		{ 0x06, 0x9e0f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1891
		{ 0x06, 0xe083 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1892
		{ 0x06, 0x4e78 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1893
		{ 0x06, 0x019e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1894
		{ 0x06, 0x05ae },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1895
		{ 0x06, 0x0caf },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1896
		{ 0x06, 0x81f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1897
		{ 0x06, 0xaf81 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1898
		{ 0x06, 0xa3af },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1899
		{ 0x06, 0x81dc },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1900
		{ 0x06, 0xaf82 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1901
		{ 0x06, 0x13ee },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1902
		{ 0x06, 0x8348 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1903
		{ 0x06, 0x00ee },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1904
		{ 0x06, 0x8349 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1905
		{ 0x06, 0x00e0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1906
		{ 0x06, 0x8351 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1907
		{ 0x06, 0x10e4 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1908
		{ 0x06, 0x8351 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1909
		{ 0x06, 0x5801 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1910
		{ 0x06, 0x9fea },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1911
		{ 0x06, 0xd000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1912
		{ 0x06, 0xd180 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1913
		{ 0x06, 0x1f66 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1914
		{ 0x06, 0xe2f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1915
		{ 0x06, 0xeae3 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1916
		{ 0x06, 0xf8eb },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1917
		{ 0x06, 0x5af8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1918
		{ 0x06, 0x1e20 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1919
		{ 0x06, 0xe6f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1920
		{ 0x06, 0xeae5 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1921
		{ 0x06, 0xf8eb },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1922
		{ 0x06, 0xd302 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1923
		{ 0x06, 0xb3fe },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1924
		{ 0x06, 0xe2f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1925
		{ 0x06, 0x7cef },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1926
		{ 0x06, 0x325b },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1927
		{ 0x06, 0x80e3 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1928
		{ 0x06, 0xf87d },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1929
		{ 0x06, 0x9e03 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1930
		{ 0x06, 0x7dff },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1931
		{ 0x06, 0xff0d },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1932
		{ 0x06, 0x581c },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1933
		{ 0x06, 0x551a },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1934
		{ 0x06, 0x6511 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1935
		{ 0x06, 0xa190 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1936
		{ 0x06, 0xd3e2 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1937
		{ 0x06, 0x8348 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1938
		{ 0x06, 0xe383 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1939
		{ 0x06, 0x491b },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1940
		{ 0x06, 0x56ab },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1941
		{ 0x06, 0x08ef },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1942
		{ 0x06, 0x56e6 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1943
		{ 0x06, 0x8348 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1944
		{ 0x06, 0xe783 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1945
		{ 0x06, 0x4910 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1946
		{ 0x06, 0xd180 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1947
		{ 0x06, 0x1f66 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1948
		{ 0x06, 0xa004 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1949
		{ 0x06, 0xb9e2 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1950
		{ 0x06, 0x8348 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1951
		{ 0x06, 0xe383 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1952
		{ 0x06, 0x49ef },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1953
		{ 0x06, 0x65e2 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1954
		{ 0x06, 0x834a },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1955
		{ 0x06, 0xe383 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1956
		{ 0x06, 0x4b1b },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1957
		{ 0x06, 0x56aa },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1958
		{ 0x06, 0x0eef },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1959
		{ 0x06, 0x56e6 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1960
		{ 0x06, 0x834a },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1961
		{ 0x06, 0xe783 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1962
		{ 0x06, 0x4be2 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1963
		{ 0x06, 0x834d },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1964
		{ 0x06, 0xe683 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1965
		{ 0x06, 0x4ce0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1966
		{ 0x06, 0x834d },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1967
		{ 0x06, 0xa000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1968
		{ 0x06, 0x0caf },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1969
		{ 0x06, 0x81dc },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1970
		{ 0x06, 0xe083 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1971
		{ 0x06, 0x4d10 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1972
		{ 0x06, 0xe483 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1973
		{ 0x06, 0x4dae },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1974
		{ 0x06, 0x0480 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1975
		{ 0x06, 0xe483 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1976
		{ 0x06, 0x4de0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1977
		{ 0x06, 0x834e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1978
		{ 0x06, 0x7803 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1979
		{ 0x06, 0x9e0b },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1980
		{ 0x06, 0xe083 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1981
		{ 0x06, 0x4e78 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1982
		{ 0x06, 0x049e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1983
		{ 0x06, 0x04ee },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1984
		{ 0x06, 0x834e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1985
		{ 0x06, 0x02e0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1986
		{ 0x06, 0x8332 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1987
		{ 0x06, 0xe183 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1988
		{ 0x06, 0x3359 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1989
		{ 0x06, 0x0fe2 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1990
		{ 0x06, 0x834d },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1991
		{ 0x06, 0x0c24 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1992
		{ 0x06, 0x5af0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1993
		{ 0x06, 0x1e12 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1994
		{ 0x06, 0xe4f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1995
		{ 0x06, 0x8ce5 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1996
		{ 0x06, 0xf88d },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1997
		{ 0x06, 0xe083 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1998
		{ 0x06, 0x30e1 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  1999
		{ 0x06, 0x8331 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2000
		{ 0x06, 0x6801 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2001
		{ 0x06, 0xe4f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2002
		{ 0x06, 0x8ae5 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2003
		{ 0x06, 0xf88b },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2004
		{ 0x06, 0xae37 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2005
		{ 0x06, 0xee83 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2006
		{ 0x06, 0x4e03 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2007
		{ 0x06, 0xe083 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2008
		{ 0x06, 0x4ce1 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2009
		{ 0x06, 0x834d },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2010
		{ 0x06, 0x1b01 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2011
		{ 0x06, 0x9e04 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2012
		{ 0x06, 0xaaa1 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2013
		{ 0x06, 0xaea8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2014
		{ 0x06, 0xee83 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2015
		{ 0x06, 0x4e04 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2016
		{ 0x06, 0xee83 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2017
		{ 0x06, 0x4f00 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2018
		{ 0x06, 0xaeab },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2019
		{ 0x06, 0xe083 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2020
		{ 0x06, 0x4f78 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2021
		{ 0x06, 0x039f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2022
		{ 0x06, 0x14ee },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2023
		{ 0x06, 0x834e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2024
		{ 0x06, 0x05d2 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2025
		{ 0x06, 0x40d6 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2026
		{ 0x06, 0x5554 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2027
		{ 0x06, 0x0282 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2028
		{ 0x06, 0x17d2 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2029
		{ 0x06, 0xa0d6 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2030
		{ 0x06, 0xba00 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2031
		{ 0x06, 0x0282 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2032
		{ 0x06, 0x17fe },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2033
		{ 0x06, 0xfdfc },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2034
		{ 0x06, 0x05f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2035
		{ 0x06, 0xe0f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2036
		{ 0x06, 0x60e1 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2037
		{ 0x06, 0xf861 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2038
		{ 0x06, 0x6802 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2039
		{ 0x06, 0xe4f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2040
		{ 0x06, 0x60e5 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2041
		{ 0x06, 0xf861 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2042
		{ 0x06, 0xe0f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2043
		{ 0x06, 0x48e1 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2044
		{ 0x06, 0xf849 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2045
		{ 0x06, 0x580f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2046
		{ 0x06, 0x1e02 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2047
		{ 0x06, 0xe4f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2048
		{ 0x06, 0x48e5 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2049
		{ 0x06, 0xf849 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2050
		{ 0x06, 0xd000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2051
		{ 0x06, 0x0282 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2052
		{ 0x06, 0x5bbf },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2053
		{ 0x06, 0x8350 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2054
		{ 0x06, 0xef46 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2055
		{ 0x06, 0xdc19 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2056
		{ 0x06, 0xddd0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2057
		{ 0x06, 0x0102 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2058
		{ 0x06, 0x825b },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2059
		{ 0x06, 0x0282 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2060
		{ 0x06, 0x77e0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2061
		{ 0x06, 0xf860 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2062
		{ 0x06, 0xe1f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2063
		{ 0x06, 0x6158 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2064
		{ 0x06, 0xfde4 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2065
		{ 0x06, 0xf860 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2066
		{ 0x06, 0xe5f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2067
		{ 0x06, 0x61fc },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2068
		{ 0x06, 0x04f9 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2069
		{ 0x06, 0xfafb },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2070
		{ 0x06, 0xc6bf },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2071
		{ 0x06, 0xf840 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2072
		{ 0x06, 0xbe83 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2073
		{ 0x06, 0x50a0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2074
		{ 0x06, 0x0101 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2075
		{ 0x06, 0x071b },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2076
		{ 0x06, 0x89cf },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2077
		{ 0x06, 0xd208 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2078
		{ 0x06, 0xebdb },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2079
		{ 0x06, 0x19b2 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2080
		{ 0x06, 0xfbff },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2081
		{ 0x06, 0xfefd },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2082
		{ 0x06, 0x04f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2083
		{ 0x06, 0xe0f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2084
		{ 0x06, 0x48e1 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2085
		{ 0x06, 0xf849 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2086
		{ 0x06, 0x6808 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2087
		{ 0x06, 0xe4f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2088
		{ 0x06, 0x48e5 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2089
		{ 0x06, 0xf849 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2090
		{ 0x06, 0x58f7 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2091
		{ 0x06, 0xe4f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2092
		{ 0x06, 0x48e5 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2093
		{ 0x06, 0xf849 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2094
		{ 0x06, 0xfc04 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2095
		{ 0x06, 0x4d20 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2096
		{ 0x06, 0x0002 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2097
		{ 0x06, 0x4e22 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2098
		{ 0x06, 0x0002 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2099
		{ 0x06, 0x4ddf },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2100
		{ 0x06, 0xff01 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2101
		{ 0x06, 0x4edd },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2102
		{ 0x06, 0xff01 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2103
		{ 0x05, 0x83d4 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2104
		{ 0x06, 0x8000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2105
		{ 0x05, 0x83d8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2106
		{ 0x06, 0x8051 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2107
		{ 0x02, 0x6010 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2108
		{ 0x03, 0xdc00 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2109
		{ 0x05, 0xfff6 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2110
		{ 0x06, 0x00fc },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2111
		{ 0x1f, 0x0000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2112
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2113
		{ 0x1f, 0x0000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2114
		{ 0x0d, 0xf880 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2115
		{ 0x1f, 0x0000 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2116
	};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2117
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2118
	rtl_phy_write(ioaddr, phy_reg_init_0, ARRAY_SIZE(phy_reg_init_0));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2119
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2120
	mdio_write(ioaddr, 0x1f, 0x0002);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2121
	mdio_plus_minus(ioaddr, 0x0b, 0x0010, 0x00ef);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2122
	mdio_plus_minus(ioaddr, 0x0c, 0xa200, 0x5d00);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2123
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2124
	rtl_phy_write(ioaddr, phy_reg_init_1, ARRAY_SIZE(phy_reg_init_1));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2125
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2126
	if (rtl8168d_efuse_read(ioaddr, 0x01) == 0xb1) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2127
		static const struct phy_reg phy_reg_init[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2128
			{ 0x1f, 0x0002 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2129
			{ 0x05, 0x669a },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2130
			{ 0x1f, 0x0005 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2131
			{ 0x05, 0x8330 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2132
			{ 0x06, 0x669a },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2133
			{ 0x1f, 0x0002 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2134
		};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2135
		int val;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2136
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2137
		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2138
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2139
		val = mdio_read(ioaddr, 0x0d);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2140
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2141
		if ((val & 0x00ff) != 0x006c) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2142
			static const u32 set[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2143
				0x0065, 0x0066, 0x0067, 0x0068,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2144
				0x0069, 0x006a, 0x006b, 0x006c
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2145
			};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2146
			int i;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2147
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2148
			mdio_write(ioaddr, 0x1f, 0x0002);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2149
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2150
			val &= 0xff00;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2151
			for (i = 0; i < ARRAY_SIZE(set); i++)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2152
				mdio_write(ioaddr, 0x0d, val | set[i]);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2153
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2154
	} else {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2155
		static const struct phy_reg phy_reg_init[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2156
			{ 0x1f, 0x0002 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2157
			{ 0x05, 0x6662 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2158
			{ 0x1f, 0x0005 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2159
			{ 0x05, 0x8330 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2160
			{ 0x06, 0x6662 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2161
		};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2162
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2163
		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2164
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2165
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2166
	mdio_write(ioaddr, 0x1f, 0x0002);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2167
	mdio_patch(ioaddr, 0x0d, 0x0300);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2168
	mdio_patch(ioaddr, 0x0f, 0x0010);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2169
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2170
	mdio_write(ioaddr, 0x1f, 0x0002);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2171
	mdio_plus_minus(ioaddr, 0x02, 0x0100, 0x0600);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2172
	mdio_plus_minus(ioaddr, 0x03, 0x0000, 0xe000);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2173
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2174
	rtl_phy_write(ioaddr, phy_reg_init_2, ARRAY_SIZE(phy_reg_init_2));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2175
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2176
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2177
static void rtl8168d_2_hw_phy_config(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2178
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2179
	static const struct phy_reg phy_reg_init_0[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2180
		{ 0x1f, 0x0001 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2181
		{ 0x06, 0x4064 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2182
		{ 0x07, 0x2863 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2183
		{ 0x08, 0x059c },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2184
		{ 0x09, 0x26b4 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2185
		{ 0x0a, 0x6a19 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2186
		{ 0x0b, 0xdcc8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2187
		{ 0x10, 0xf06d },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2188
		{ 0x14, 0x7f68 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2189
		{ 0x18, 0x7fd9 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2190
		{ 0x1c, 0xf0ff },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2191
		{ 0x1d, 0x3d9c },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2192
		{ 0x1f, 0x0003 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2193
		{ 0x12, 0xf49f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2194
		{ 0x13, 0x070b },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2195
		{ 0x1a, 0x05ad },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2196
		{ 0x14, 0x94c0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2197
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2198
		{ 0x1f, 0x0002 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2199
		{ 0x06, 0x5561 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2200
		{ 0x1f, 0x0005 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2201
		{ 0x05, 0x8332 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2202
		{ 0x06, 0x5561 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2203
	};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2204
	static const struct phy_reg phy_reg_init_1[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2205
		{ 0x1f, 0x0005 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2206
		{ 0x05, 0xffc2 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2207
		{ 0x1f, 0x0005 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2208
		{ 0x05, 0x8000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2209
		{ 0x06, 0xf8f9 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2210
		{ 0x06, 0xfaee },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2211
		{ 0x06, 0xf8ea },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2212
		{ 0x06, 0x00ee },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2213
		{ 0x06, 0xf8eb },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2214
		{ 0x06, 0x00e2 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2215
		{ 0x06, 0xf87c },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2216
		{ 0x06, 0xe3f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2217
		{ 0x06, 0x7da5 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2218
		{ 0x06, 0x1111 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2219
		{ 0x06, 0x12d2 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2220
		{ 0x06, 0x40d6 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2221
		{ 0x06, 0x4444 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2222
		{ 0x06, 0x0281 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2223
		{ 0x06, 0xc6d2 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2224
		{ 0x06, 0xa0d6 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2225
		{ 0x06, 0xaaaa },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2226
		{ 0x06, 0x0281 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2227
		{ 0x06, 0xc6ae },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2228
		{ 0x06, 0x0fa5 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2229
		{ 0x06, 0x4444 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2230
		{ 0x06, 0x02ae },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2231
		{ 0x06, 0x4da5 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2232
		{ 0x06, 0xaaaa },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2233
		{ 0x06, 0x02ae },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2234
		{ 0x06, 0x47af },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2235
		{ 0x06, 0x81c2 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2236
		{ 0x06, 0xee83 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2237
		{ 0x06, 0x4e00 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2238
		{ 0x06, 0xee83 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2239
		{ 0x06, 0x4d0f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2240
		{ 0x06, 0xee83 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2241
		{ 0x06, 0x4c0f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2242
		{ 0x06, 0xee83 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2243
		{ 0x06, 0x4f00 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2244
		{ 0x06, 0xee83 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2245
		{ 0x06, 0x5100 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2246
		{ 0x06, 0xee83 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2247
		{ 0x06, 0x4aff },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2248
		{ 0x06, 0xee83 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2249
		{ 0x06, 0x4bff },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2250
		{ 0x06, 0xe083 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2251
		{ 0x06, 0x30e1 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2252
		{ 0x06, 0x8331 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2253
		{ 0x06, 0x58fe },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2254
		{ 0x06, 0xe4f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2255
		{ 0x06, 0x8ae5 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2256
		{ 0x06, 0xf88b },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2257
		{ 0x06, 0xe083 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2258
		{ 0x06, 0x32e1 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2259
		{ 0x06, 0x8333 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2260
		{ 0x06, 0x590f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2261
		{ 0x06, 0xe283 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2262
		{ 0x06, 0x4d0c },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2263
		{ 0x06, 0x245a },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2264
		{ 0x06, 0xf01e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2265
		{ 0x06, 0x12e4 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2266
		{ 0x06, 0xf88c },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2267
		{ 0x06, 0xe5f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2268
		{ 0x06, 0x8daf },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2269
		{ 0x06, 0x81c2 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2270
		{ 0x06, 0xe083 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2271
		{ 0x06, 0x4f10 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2272
		{ 0x06, 0xe483 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2273
		{ 0x06, 0x4fe0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2274
		{ 0x06, 0x834e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2275
		{ 0x06, 0x7800 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2276
		{ 0x06, 0x9f0a },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2277
		{ 0x06, 0xe083 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2278
		{ 0x06, 0x4fa0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2279
		{ 0x06, 0x10a5 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2280
		{ 0x06, 0xee83 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2281
		{ 0x06, 0x4e01 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2282
		{ 0x06, 0xe083 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2283
		{ 0x06, 0x4e78 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2284
		{ 0x06, 0x059e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2285
		{ 0x06, 0x9ae0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2286
		{ 0x06, 0x834e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2287
		{ 0x06, 0x7804 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2288
		{ 0x06, 0x9e10 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2289
		{ 0x06, 0xe083 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2290
		{ 0x06, 0x4e78 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2291
		{ 0x06, 0x039e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2292
		{ 0x06, 0x0fe0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2293
		{ 0x06, 0x834e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2294
		{ 0x06, 0x7801 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2295
		{ 0x06, 0x9e05 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2296
		{ 0x06, 0xae0c },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2297
		{ 0x06, 0xaf81 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2298
		{ 0x06, 0xa7af },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2299
		{ 0x06, 0x8152 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2300
		{ 0x06, 0xaf81 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2301
		{ 0x06, 0x8baf },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2302
		{ 0x06, 0x81c2 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2303
		{ 0x06, 0xee83 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2304
		{ 0x06, 0x4800 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2305
		{ 0x06, 0xee83 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2306
		{ 0x06, 0x4900 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2307
		{ 0x06, 0xe083 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2308
		{ 0x06, 0x5110 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2309
		{ 0x06, 0xe483 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2310
		{ 0x06, 0x5158 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2311
		{ 0x06, 0x019f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2312
		{ 0x06, 0xead0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2313
		{ 0x06, 0x00d1 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2314
		{ 0x06, 0x801f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2315
		{ 0x06, 0x66e2 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2316
		{ 0x06, 0xf8ea },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2317
		{ 0x06, 0xe3f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2318
		{ 0x06, 0xeb5a },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2319
		{ 0x06, 0xf81e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2320
		{ 0x06, 0x20e6 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2321
		{ 0x06, 0xf8ea },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2322
		{ 0x06, 0xe5f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2323
		{ 0x06, 0xebd3 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2324
		{ 0x06, 0x02b3 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2325
		{ 0x06, 0xfee2 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2326
		{ 0x06, 0xf87c },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2327
		{ 0x06, 0xef32 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2328
		{ 0x06, 0x5b80 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2329
		{ 0x06, 0xe3f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2330
		{ 0x06, 0x7d9e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2331
		{ 0x06, 0x037d },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2332
		{ 0x06, 0xffff },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2333
		{ 0x06, 0x0d58 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2334
		{ 0x06, 0x1c55 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2335
		{ 0x06, 0x1a65 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2336
		{ 0x06, 0x11a1 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2337
		{ 0x06, 0x90d3 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2338
		{ 0x06, 0xe283 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2339
		{ 0x06, 0x48e3 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2340
		{ 0x06, 0x8349 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2341
		{ 0x06, 0x1b56 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2342
		{ 0x06, 0xab08 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2343
		{ 0x06, 0xef56 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2344
		{ 0x06, 0xe683 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2345
		{ 0x06, 0x48e7 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2346
		{ 0x06, 0x8349 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2347
		{ 0x06, 0x10d1 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2348
		{ 0x06, 0x801f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2349
		{ 0x06, 0x66a0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2350
		{ 0x06, 0x04b9 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2351
		{ 0x06, 0xe283 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2352
		{ 0x06, 0x48e3 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2353
		{ 0x06, 0x8349 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2354
		{ 0x06, 0xef65 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2355
		{ 0x06, 0xe283 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2356
		{ 0x06, 0x4ae3 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2357
		{ 0x06, 0x834b },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2358
		{ 0x06, 0x1b56 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2359
		{ 0x06, 0xaa0e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2360
		{ 0x06, 0xef56 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2361
		{ 0x06, 0xe683 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2362
		{ 0x06, 0x4ae7 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2363
		{ 0x06, 0x834b },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2364
		{ 0x06, 0xe283 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2365
		{ 0x06, 0x4de6 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2366
		{ 0x06, 0x834c },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2367
		{ 0x06, 0xe083 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2368
		{ 0x06, 0x4da0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2369
		{ 0x06, 0x000c },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2370
		{ 0x06, 0xaf81 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2371
		{ 0x06, 0x8be0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2372
		{ 0x06, 0x834d },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2373
		{ 0x06, 0x10e4 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2374
		{ 0x06, 0x834d },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2375
		{ 0x06, 0xae04 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2376
		{ 0x06, 0x80e4 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2377
		{ 0x06, 0x834d },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2378
		{ 0x06, 0xe083 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2379
		{ 0x06, 0x4e78 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2380
		{ 0x06, 0x039e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2381
		{ 0x06, 0x0be0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2382
		{ 0x06, 0x834e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2383
		{ 0x06, 0x7804 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2384
		{ 0x06, 0x9e04 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2385
		{ 0x06, 0xee83 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2386
		{ 0x06, 0x4e02 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2387
		{ 0x06, 0xe083 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2388
		{ 0x06, 0x32e1 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2389
		{ 0x06, 0x8333 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2390
		{ 0x06, 0x590f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2391
		{ 0x06, 0xe283 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2392
		{ 0x06, 0x4d0c },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2393
		{ 0x06, 0x245a },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2394
		{ 0x06, 0xf01e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2395
		{ 0x06, 0x12e4 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2396
		{ 0x06, 0xf88c },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2397
		{ 0x06, 0xe5f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2398
		{ 0x06, 0x8de0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2399
		{ 0x06, 0x8330 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2400
		{ 0x06, 0xe183 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2401
		{ 0x06, 0x3168 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2402
		{ 0x06, 0x01e4 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2403
		{ 0x06, 0xf88a },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2404
		{ 0x06, 0xe5f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2405
		{ 0x06, 0x8bae },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2406
		{ 0x06, 0x37ee },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2407
		{ 0x06, 0x834e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2408
		{ 0x06, 0x03e0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2409
		{ 0x06, 0x834c },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2410
		{ 0x06, 0xe183 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2411
		{ 0x06, 0x4d1b },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2412
		{ 0x06, 0x019e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2413
		{ 0x06, 0x04aa },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2414
		{ 0x06, 0xa1ae },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2415
		{ 0x06, 0xa8ee },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2416
		{ 0x06, 0x834e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2417
		{ 0x06, 0x04ee },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2418
		{ 0x06, 0x834f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2419
		{ 0x06, 0x00ae },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2420
		{ 0x06, 0xabe0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2421
		{ 0x06, 0x834f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2422
		{ 0x06, 0x7803 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2423
		{ 0x06, 0x9f14 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2424
		{ 0x06, 0xee83 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2425
		{ 0x06, 0x4e05 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2426
		{ 0x06, 0xd240 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2427
		{ 0x06, 0xd655 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2428
		{ 0x06, 0x5402 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2429
		{ 0x06, 0x81c6 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2430
		{ 0x06, 0xd2a0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2431
		{ 0x06, 0xd6ba },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2432
		{ 0x06, 0x0002 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2433
		{ 0x06, 0x81c6 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2434
		{ 0x06, 0xfefd },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2435
		{ 0x06, 0xfc05 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2436
		{ 0x06, 0xf8e0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2437
		{ 0x06, 0xf860 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2438
		{ 0x06, 0xe1f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2439
		{ 0x06, 0x6168 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2440
		{ 0x06, 0x02e4 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2441
		{ 0x06, 0xf860 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2442
		{ 0x06, 0xe5f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2443
		{ 0x06, 0x61e0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2444
		{ 0x06, 0xf848 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2445
		{ 0x06, 0xe1f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2446
		{ 0x06, 0x4958 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2447
		{ 0x06, 0x0f1e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2448
		{ 0x06, 0x02e4 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2449
		{ 0x06, 0xf848 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2450
		{ 0x06, 0xe5f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2451
		{ 0x06, 0x49d0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2452
		{ 0x06, 0x0002 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2453
		{ 0x06, 0x820a },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2454
		{ 0x06, 0xbf83 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2455
		{ 0x06, 0x50ef },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2456
		{ 0x06, 0x46dc },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2457
		{ 0x06, 0x19dd },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2458
		{ 0x06, 0xd001 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2459
		{ 0x06, 0x0282 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2460
		{ 0x06, 0x0a02 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2461
		{ 0x06, 0x8226 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2462
		{ 0x06, 0xe0f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2463
		{ 0x06, 0x60e1 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2464
		{ 0x06, 0xf861 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2465
		{ 0x06, 0x58fd },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2466
		{ 0x06, 0xe4f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2467
		{ 0x06, 0x60e5 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2468
		{ 0x06, 0xf861 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2469
		{ 0x06, 0xfc04 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2470
		{ 0x06, 0xf9fa },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2471
		{ 0x06, 0xfbc6 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2472
		{ 0x06, 0xbff8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2473
		{ 0x06, 0x40be },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2474
		{ 0x06, 0x8350 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2475
		{ 0x06, 0xa001 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2476
		{ 0x06, 0x0107 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2477
		{ 0x06, 0x1b89 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2478
		{ 0x06, 0xcfd2 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2479
		{ 0x06, 0x08eb },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2480
		{ 0x06, 0xdb19 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2481
		{ 0x06, 0xb2fb },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2482
		{ 0x06, 0xfffe },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2483
		{ 0x06, 0xfd04 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2484
		{ 0x06, 0xf8e0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2485
		{ 0x06, 0xf848 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2486
		{ 0x06, 0xe1f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2487
		{ 0x06, 0x4968 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2488
		{ 0x06, 0x08e4 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2489
		{ 0x06, 0xf848 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2490
		{ 0x06, 0xe5f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2491
		{ 0x06, 0x4958 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2492
		{ 0x06, 0xf7e4 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2493
		{ 0x06, 0xf848 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2494
		{ 0x06, 0xe5f8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2495
		{ 0x06, 0x49fc },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2496
		{ 0x06, 0x044d },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2497
		{ 0x06, 0x2000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2498
		{ 0x06, 0x024e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2499
		{ 0x06, 0x2200 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2500
		{ 0x06, 0x024d },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2501
		{ 0x06, 0xdfff },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2502
		{ 0x06, 0x014e },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2503
		{ 0x06, 0xddff },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2504
		{ 0x06, 0x0100 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2505
		{ 0x05, 0x83d8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2506
		{ 0x06, 0x8000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2507
		{ 0x03, 0xdc00 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2508
		{ 0x05, 0xfff6 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2509
		{ 0x06, 0x00fc },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2510
		{ 0x1f, 0x0000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2511
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2512
		{ 0x1f, 0x0000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2513
		{ 0x0d, 0xf880 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2514
		{ 0x1f, 0x0000 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2515
	};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2516
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2517
	rtl_phy_write(ioaddr, phy_reg_init_0, ARRAY_SIZE(phy_reg_init_0));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2518
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2519
	if (rtl8168d_efuse_read(ioaddr, 0x01) == 0xb1) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2520
		static const struct phy_reg phy_reg_init[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2521
			{ 0x1f, 0x0002 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2522
			{ 0x05, 0x669a },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2523
			{ 0x1f, 0x0005 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2524
			{ 0x05, 0x8330 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2525
			{ 0x06, 0x669a },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2526
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2527
			{ 0x1f, 0x0002 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2528
		};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2529
		int val;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2530
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2531
		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2532
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2533
		val = mdio_read(ioaddr, 0x0d);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2534
		if ((val & 0x00ff) != 0x006c) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2535
			u32 set[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2536
				0x0065, 0x0066, 0x0067, 0x0068,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2537
				0x0069, 0x006a, 0x006b, 0x006c
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2538
			};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2539
			int i;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2540
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2541
			mdio_write(ioaddr, 0x1f, 0x0002);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2542
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2543
			val &= 0xff00;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2544
			for (i = 0; i < ARRAY_SIZE(set); i++)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2545
				mdio_write(ioaddr, 0x0d, val | set[i]);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2546
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2547
	} else {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2548
		static const struct phy_reg phy_reg_init[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2549
			{ 0x1f, 0x0002 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2550
			{ 0x05, 0x2642 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2551
			{ 0x1f, 0x0005 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2552
			{ 0x05, 0x8330 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2553
			{ 0x06, 0x2642 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2554
		};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2555
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2556
		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2557
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2558
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2559
	mdio_write(ioaddr, 0x1f, 0x0002);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2560
	mdio_plus_minus(ioaddr, 0x02, 0x0100, 0x0600);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2561
	mdio_plus_minus(ioaddr, 0x03, 0x0000, 0xe000);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2562
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2563
	mdio_write(ioaddr, 0x1f, 0x0001);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2564
	mdio_write(ioaddr, 0x17, 0x0cc0);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2565
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2566
	mdio_write(ioaddr, 0x1f, 0x0002);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2567
	mdio_patch(ioaddr, 0x0f, 0x0017);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2568
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2569
	rtl_phy_write(ioaddr, phy_reg_init_1, ARRAY_SIZE(phy_reg_init_1));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2570
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2571
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2572
static void rtl8168d_3_hw_phy_config(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2573
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2574
	static const struct phy_reg phy_reg_init[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2575
		{ 0x1f, 0x0002 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2576
		{ 0x10, 0x0008 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2577
		{ 0x0d, 0x006c },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2578
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2579
		{ 0x1f, 0x0000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2580
		{ 0x0d, 0xf880 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2581
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2582
		{ 0x1f, 0x0001 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2583
		{ 0x17, 0x0cc0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2584
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2585
		{ 0x1f, 0x0001 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2586
		{ 0x0b, 0xa4d8 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2587
		{ 0x09, 0x281c },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2588
		{ 0x07, 0x2883 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2589
		{ 0x0a, 0x6b35 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2590
		{ 0x1d, 0x3da4 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2591
		{ 0x1c, 0xeffd },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2592
		{ 0x14, 0x7f52 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2593
		{ 0x18, 0x7fc6 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2594
		{ 0x08, 0x0601 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2595
		{ 0x06, 0x4063 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2596
		{ 0x10, 0xf074 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2597
		{ 0x1f, 0x0003 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2598
		{ 0x13, 0x0789 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2599
		{ 0x12, 0xf4bd },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2600
		{ 0x1a, 0x04fd },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2601
		{ 0x14, 0x84b0 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2602
		{ 0x1f, 0x0000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2603
		{ 0x00, 0x9200 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2604
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2605
		{ 0x1f, 0x0005 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2606
		{ 0x01, 0x0340 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2607
		{ 0x1f, 0x0001 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2608
		{ 0x04, 0x4000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2609
		{ 0x03, 0x1d21 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2610
		{ 0x02, 0x0c32 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2611
		{ 0x01, 0x0200 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2612
		{ 0x00, 0x5554 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2613
		{ 0x04, 0x4800 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2614
		{ 0x04, 0x4000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2615
		{ 0x04, 0xf000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2616
		{ 0x03, 0xdf01 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2617
		{ 0x02, 0xdf20 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2618
		{ 0x01, 0x101a },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2619
		{ 0x00, 0xa0ff },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2620
		{ 0x04, 0xf800 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2621
		{ 0x04, 0xf000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2622
		{ 0x1f, 0x0000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2623
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2624
		{ 0x1f, 0x0007 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2625
		{ 0x1e, 0x0023 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2626
		{ 0x16, 0x0000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2627
		{ 0x1f, 0x0000 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2628
	};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2629
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2630
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2631
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2632
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2633
static void rtl8102e_hw_phy_config(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2634
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2635
	static const struct phy_reg phy_reg_init[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2636
		{ 0x1f, 0x0003 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2637
		{ 0x08, 0x441d },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2638
		{ 0x01, 0x9100 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2639
		{ 0x1f, 0x0000 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2640
	};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2641
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2642
	mdio_write(ioaddr, 0x1f, 0x0000);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2643
	mdio_patch(ioaddr, 0x11, 1 << 12);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2644
	mdio_patch(ioaddr, 0x19, 1 << 13);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2645
	mdio_patch(ioaddr, 0x10, 1 << 15);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2646
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2647
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2648
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2649
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2650
static void rtl_hw_phy_config(struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2651
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2652
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2653
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2654
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2655
	rtl8169_print_mac_version(tp);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2656
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2657
	switch (tp->mac_version) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2658
	case RTL_GIGA_MAC_VER_01:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2659
		break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2660
	case RTL_GIGA_MAC_VER_02:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2661
	case RTL_GIGA_MAC_VER_03:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2662
		rtl8169s_hw_phy_config(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2663
		break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2664
	case RTL_GIGA_MAC_VER_04:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2665
		rtl8169sb_hw_phy_config(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2666
		break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2667
	case RTL_GIGA_MAC_VER_05:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2668
		rtl8169scd_hw_phy_config(tp, ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2669
		break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2670
	case RTL_GIGA_MAC_VER_06:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2671
		rtl8169sce_hw_phy_config(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2672
		break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2673
	case RTL_GIGA_MAC_VER_07:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2674
	case RTL_GIGA_MAC_VER_08:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2675
	case RTL_GIGA_MAC_VER_09:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2676
		rtl8102e_hw_phy_config(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2677
		break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2678
	case RTL_GIGA_MAC_VER_11:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2679
		rtl8168bb_hw_phy_config(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2680
		break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2681
	case RTL_GIGA_MAC_VER_12:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2682
		rtl8168bef_hw_phy_config(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2683
		break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2684
	case RTL_GIGA_MAC_VER_17:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2685
		rtl8168bef_hw_phy_config(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2686
		break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2687
	case RTL_GIGA_MAC_VER_18:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2688
		rtl8168cp_1_hw_phy_config(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2689
		break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2690
	case RTL_GIGA_MAC_VER_19:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2691
		rtl8168c_1_hw_phy_config(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2692
		break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2693
	case RTL_GIGA_MAC_VER_20:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2694
		rtl8168c_2_hw_phy_config(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2695
		break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2696
	case RTL_GIGA_MAC_VER_21:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2697
		rtl8168c_3_hw_phy_config(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2698
		break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2699
	case RTL_GIGA_MAC_VER_22:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2700
		rtl8168c_4_hw_phy_config(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2701
		break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2702
	case RTL_GIGA_MAC_VER_23:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2703
	case RTL_GIGA_MAC_VER_24:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2704
		rtl8168cp_2_hw_phy_config(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2705
		break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2706
	case RTL_GIGA_MAC_VER_25:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2707
		rtl8168d_1_hw_phy_config(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2708
		break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2709
	case RTL_GIGA_MAC_VER_26:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2710
		rtl8168d_2_hw_phy_config(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2711
		break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2712
	case RTL_GIGA_MAC_VER_27:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2713
		rtl8168d_3_hw_phy_config(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2714
		break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2715
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2716
	default:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2717
		break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2718
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2719
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2720
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2721
static void rtl8169_phy_timer(unsigned long __opaque)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2722
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2723
	struct net_device *dev = (struct net_device *)__opaque;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2724
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2725
	struct timer_list *timer = &tp->timer;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2726
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2727
	unsigned long timeout = RTL8169_PHY_TIMEOUT;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2728
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2729
	assert(tp->mac_version > RTL_GIGA_MAC_VER_01);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2730
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2731
	if (!(tp->phy_1000_ctrl_reg & ADVERTISE_1000FULL))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2732
		return;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2733
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2734
	if (!tp->ecdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2735
		spin_lock_irq(&tp->lock);
2421
bc2d4bf9cbe5 Removed trailing spaces.
Florian Pose <fp@igh-essen.com>
parents: 2401
diff changeset
  2736
2401
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2737
	if (tp->phy_reset_pending(ioaddr)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2738
		/*
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2739
		 * A busy loop could burn quite a few cycles on nowadays CPU.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2740
		 * Let's delay the execution of the timer for a few ticks.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2741
		 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2742
		timeout = HZ/10;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2743
		goto out_mod_timer;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2744
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2745
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2746
	if (tp->link_ok(ioaddr))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2747
		goto out_unlock;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2748
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2749
	netif_warn(tp, link, dev, "PHY reset until link up\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2750
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2751
	tp->phy_reset_enable(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2752
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2753
out_mod_timer:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2754
	if (!tp->ecdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2755
		mod_timer(timer, jiffies + timeout);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2756
out_unlock:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2757
	if (!tp->ecdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2758
		spin_unlock_irq(&tp->lock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2759
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2760
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2761
static inline void rtl8169_delete_timer(struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2762
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2763
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2764
	struct timer_list *timer = &tp->timer;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2765
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2766
	if (tp->ecdev || tp->mac_version <= RTL_GIGA_MAC_VER_01)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2767
		return;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2768
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2769
	del_timer_sync(timer);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2770
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2771
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2772
static inline void rtl8169_request_timer(struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2773
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2774
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2775
	struct timer_list *timer = &tp->timer;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2776
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2777
	if (tp->ecdev || tp->mac_version <= RTL_GIGA_MAC_VER_01)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2778
		return;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2779
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2780
	mod_timer(timer, jiffies + RTL8169_PHY_TIMEOUT);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2781
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2782
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2783
#ifdef CONFIG_NET_POLL_CONTROLLER
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2784
/*
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2785
 * Polling 'interrupt' - used by things like netconsole to send skbs
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2786
 * without having to re-enable interrupts. It's not called while
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2787
 * the interrupt routine is executing.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2788
 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2789
static void rtl8169_netpoll(struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2790
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2791
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2792
	struct pci_dev *pdev = tp->pci_dev;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2793
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2794
	disable_irq(pdev->irq);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2795
	rtl8169_interrupt(pdev->irq, dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2796
	enable_irq(pdev->irq);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2797
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2798
#endif
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2799
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2800
static void rtl8169_release_board(struct pci_dev *pdev, struct net_device *dev,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2801
				  void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2802
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2803
	iounmap(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2804
	pci_release_regions(pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2805
	pci_clear_mwi(pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2806
	pci_disable_device(pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2807
	free_netdev(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2808
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2809
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2810
static void rtl8169_phy_reset(struct net_device *dev,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2811
			      struct rtl8169_private *tp)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2812
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2813
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2814
	unsigned int i;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2815
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2816
	tp->phy_reset_enable(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2817
	for (i = 0; i < 100; i++) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2818
		if (!tp->phy_reset_pending(ioaddr))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2819
			return;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2820
		msleep(1);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2821
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2822
	netif_err(tp, link, dev, "PHY reset failed\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2823
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2824
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2825
static void rtl8169_init_phy(struct net_device *dev, struct rtl8169_private *tp)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2826
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2827
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2828
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2829
	rtl_hw_phy_config(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2830
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2831
	if (tp->mac_version <= RTL_GIGA_MAC_VER_06) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2832
		dprintk("Set MAC Reg C+CR Offset 0x82h = 0x01h\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2833
		RTL_W8(0x82, 0x01);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2834
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2835
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2836
	pci_write_config_byte(tp->pci_dev, PCI_LATENCY_TIMER, 0x40);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2837
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2838
	if (tp->mac_version <= RTL_GIGA_MAC_VER_06)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2839
		pci_write_config_byte(tp->pci_dev, PCI_CACHE_LINE_SIZE, 0x08);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2840
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2841
	if (tp->mac_version == RTL_GIGA_MAC_VER_02) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2842
		dprintk("Set MAC Reg C+CR Offset 0x82h = 0x01h\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2843
		RTL_W8(0x82, 0x01);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2844
		dprintk("Set PHY Reg 0x0bh = 0x00h\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2845
		mdio_write(ioaddr, 0x0b, 0x0000); //w 0x0b 15 0 0
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2846
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2847
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2848
	rtl8169_phy_reset(dev, tp);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2849
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2850
	/*
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2851
	 * rtl8169_set_speed_xmii takes good care of the Fast Ethernet
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2852
	 * only 8101. Don't panic.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2853
	 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2854
	rtl8169_set_speed(dev, AUTONEG_ENABLE, SPEED_1000, DUPLEX_FULL);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2855
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2856
	if (RTL_R8(PHYstatus) & TBI_Enable)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2857
		netif_info(tp, link, dev, "TBI auto-negotiating\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2858
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2859
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2860
static void rtl_rar_set(struct rtl8169_private *tp, u8 *addr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2861
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2862
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2863
	u32 high;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2864
	u32 low;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2865
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2866
	low  = addr[0] | (addr[1] << 8) | (addr[2] << 16) | (addr[3] << 24);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2867
	high = addr[4] | (addr[5] << 8);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2868
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2869
	spin_lock_irq(&tp->lock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2870
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2871
	RTL_W8(Cfg9346, Cfg9346_Unlock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2872
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2873
	RTL_W32(MAC4, high);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2874
	RTL_R32(MAC4);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2875
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2876
	RTL_W32(MAC0, low);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2877
	RTL_R32(MAC0);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2878
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2879
	RTL_W8(Cfg9346, Cfg9346_Lock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2880
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2881
	spin_unlock_irq(&tp->lock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2882
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2883
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2884
static int rtl_set_mac_address(struct net_device *dev, void *p)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2885
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2886
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2887
	struct sockaddr *addr = p;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2888
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2889
	if (!is_valid_ether_addr(addr->sa_data))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2890
		return -EADDRNOTAVAIL;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2891
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2892
	memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2893
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2894
	rtl_rar_set(tp, dev->dev_addr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2895
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2896
	return 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2897
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2898
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2899
static int rtl8169_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2900
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2901
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2902
	struct mii_ioctl_data *data = if_mii(ifr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2903
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2904
	return netif_running(dev) ? tp->do_ioctl(tp, data, cmd) : -ENODEV;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2905
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2906
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2907
static int rtl_xmii_ioctl(struct rtl8169_private *tp, struct mii_ioctl_data *data, int cmd)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2908
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2909
	switch (cmd) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2910
	case SIOCGMIIPHY:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2911
		data->phy_id = 32; /* Internal PHY */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2912
		return 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2913
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2914
	case SIOCGMIIREG:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2915
		data->val_out = mdio_read(tp->mmio_addr, data->reg_num & 0x1f);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2916
		return 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2917
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2918
	case SIOCSMIIREG:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2919
		mdio_write(tp->mmio_addr, data->reg_num & 0x1f, data->val_in);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2920
		return 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2921
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2922
	return -EOPNOTSUPP;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2923
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2924
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2925
static int rtl_tbi_ioctl(struct rtl8169_private *tp, struct mii_ioctl_data *data, int cmd)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2926
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2927
	return -EOPNOTSUPP;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2928
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2929
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2930
static const struct rtl_cfg_info {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2931
	void (*hw_start)(struct net_device *);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2932
	unsigned int region;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2933
	unsigned int align;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2934
	u16 intr_event;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2935
	u16 napi_event;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2936
	unsigned features;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2937
	u8 default_ver;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2938
} rtl_cfg_infos [] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2939
	[RTL_CFG_0] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2940
		.hw_start	= rtl_hw_start_8169,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2941
		.region		= 1,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2942
		.align		= 0,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2943
		.intr_event	= SYSErr | LinkChg | RxOverflow |
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2944
				  RxFIFOOver | TxErr | TxOK | RxOK | RxErr,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2945
		.napi_event	= RxFIFOOver | TxErr | TxOK | RxOK | RxOverflow,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2946
		.features	= RTL_FEATURE_GMII,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2947
		.default_ver	= RTL_GIGA_MAC_VER_01,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2948
	},
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2949
	[RTL_CFG_1] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2950
		.hw_start	= rtl_hw_start_8168,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2951
		.region		= 2,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2952
		.align		= 8,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2953
		.intr_event	= SYSErr | RxFIFOOver | LinkChg | RxOverflow |
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2954
				  TxErr | TxOK | RxOK | RxErr,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2955
		.napi_event	= TxErr | TxOK | RxOK | RxOverflow,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2956
		.features	= RTL_FEATURE_GMII | RTL_FEATURE_MSI,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2957
		.default_ver	= RTL_GIGA_MAC_VER_11,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2958
	},
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2959
	[RTL_CFG_2] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2960
		.hw_start	= rtl_hw_start_8101,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2961
		.region		= 2,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2962
		.align		= 8,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2963
		.intr_event	= SYSErr | LinkChg | RxOverflow | PCSTimeout |
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2964
				  RxFIFOOver | TxErr | TxOK | RxOK | RxErr,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2965
		.napi_event	= RxFIFOOver | TxErr | TxOK | RxOK | RxOverflow,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2966
		.features	= RTL_FEATURE_MSI,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2967
		.default_ver	= RTL_GIGA_MAC_VER_13,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2968
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2969
};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2970
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2971
/* Cfg9346_Unlock assumed. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2972
static unsigned rtl_try_msi(struct pci_dev *pdev, void __iomem *ioaddr,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2973
			    const struct rtl_cfg_info *cfg)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2974
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2975
	unsigned msi = 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2976
	u8 cfg2;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2977
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2978
	cfg2 = RTL_R8(Config2) & ~MSIEnable;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2979
	if (cfg->features & RTL_FEATURE_MSI) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2980
		if (pci_enable_msi(pdev)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2981
			dev_info(&pdev->dev, "no MSI. Back to INTx.\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2982
		} else {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2983
			cfg2 |= MSIEnable;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2984
			msi = RTL_FEATURE_MSI;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2985
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2986
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2987
	RTL_W8(Config2, cfg2);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2988
	return msi;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2989
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2990
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2991
static void rtl_disable_msi(struct pci_dev *pdev, struct rtl8169_private *tp)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2992
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2993
	if (tp->features & RTL_FEATURE_MSI) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2994
		pci_disable_msi(pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2995
		tp->features &= ~RTL_FEATURE_MSI;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2996
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2997
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2998
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  2999
static const struct net_device_ops rtl8169_netdev_ops = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3000
	.ndo_open		= rtl8169_open,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3001
	.ndo_stop		= rtl8169_close,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3002
	.ndo_get_stats		= rtl8169_get_stats,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3003
	.ndo_start_xmit		= rtl8169_start_xmit,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3004
	.ndo_tx_timeout		= rtl8169_tx_timeout,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3005
	.ndo_validate_addr	= eth_validate_addr,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3006
	.ndo_change_mtu		= rtl8169_change_mtu,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3007
	.ndo_set_mac_address	= rtl_set_mac_address,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3008
	.ndo_do_ioctl		= rtl8169_ioctl,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3009
	.ndo_set_multicast_list	= rtl_set_rx_mode,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3010
#ifdef CONFIG_R8169_VLAN
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3011
	.ndo_vlan_rx_register	= rtl8169_vlan_rx_register,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3012
#endif
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3013
#ifdef CONFIG_NET_POLL_CONTROLLER
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3014
	.ndo_poll_controller	= rtl8169_netpoll,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3015
#endif
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3016
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3017
};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3018
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3019
static int __devinit
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3020
rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3021
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3022
	const struct rtl_cfg_info *cfg = rtl_cfg_infos + ent->driver_data;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3023
	const unsigned int region = cfg->region;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3024
	struct rtl8169_private *tp;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3025
	struct mii_if_info *mii;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3026
	struct net_device *dev;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3027
	void __iomem *ioaddr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3028
	unsigned int i;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3029
	int rc;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3030
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3031
	if (netif_msg_drv(&debug)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3032
		printk(KERN_INFO "%s Gigabit Ethernet driver %s loaded\n",
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3033
		       MODULENAME, RTL8169_VERSION);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3034
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3035
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3036
	dev = alloc_etherdev(sizeof (*tp));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3037
	if (!dev) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3038
		if (netif_msg_drv(&debug))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3039
			dev_err(&pdev->dev, "unable to alloc new ethernet\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3040
		rc = -ENOMEM;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3041
		goto out;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3042
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3043
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3044
	SET_NETDEV_DEV(dev, &pdev->dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3045
	dev->netdev_ops = &rtl8169_netdev_ops;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3046
	tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3047
	tp->dev = dev;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3048
	tp->pci_dev = pdev;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3049
	tp->msg_enable = netif_msg_init(debug.msg_enable, R8169_MSG_DEFAULT);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3050
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3051
	mii = &tp->mii;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3052
	mii->dev = dev;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3053
	mii->mdio_read = rtl_mdio_read;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3054
	mii->mdio_write = rtl_mdio_write;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3055
	mii->phy_id_mask = 0x1f;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3056
	mii->reg_num_mask = 0x1f;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3057
	mii->supports_gmii = !!(cfg->features & RTL_FEATURE_GMII);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3058
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3059
	/* enable device (incl. PCI PM wakeup and hotplug setup) */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3060
	rc = pci_enable_device(pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3061
	if (rc < 0) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3062
		netif_err(tp, probe, dev, "enable failure\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3063
		goto err_out_free_dev_1;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3064
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3065
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3066
	if (pci_set_mwi(pdev) < 0)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3067
		netif_info(tp, probe, dev, "Mem-Wr-Inval unavailable\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3068
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3069
	/* make sure PCI base addr 1 is MMIO */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3070
	if (!(pci_resource_flags(pdev, region) & IORESOURCE_MEM)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3071
		netif_err(tp, probe, dev,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3072
			  "region #%d not an MMIO resource, aborting\n",
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3073
			  region);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3074
		rc = -ENODEV;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3075
		goto err_out_mwi_2;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3076
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3077
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3078
	/* check for weird/broken PCI region reporting */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3079
	if (pci_resource_len(pdev, region) < R8169_REGS_SIZE) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3080
		netif_err(tp, probe, dev,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3081
			  "Invalid PCI region size(s), aborting\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3082
		rc = -ENODEV;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3083
		goto err_out_mwi_2;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3084
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3085
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3086
	rc = pci_request_regions(pdev, MODULENAME);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3087
	if (rc < 0) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3088
		netif_err(tp, probe, dev, "could not request regions\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3089
		goto err_out_mwi_2;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3090
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3091
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3092
	tp->cp_cmd = PCIMulRW | RxChkSum;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3093
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3094
	if ((sizeof(dma_addr_t) > 4) &&
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3095
	    !pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) && use_dac) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3096
		tp->cp_cmd |= PCIDAC;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3097
		dev->features |= NETIF_F_HIGHDMA;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3098
	} else {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3099
		rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3100
		if (rc < 0) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3101
			netif_err(tp, probe, dev, "DMA configuration failed\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3102
			goto err_out_free_res_3;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3103
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3104
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3105
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3106
	/* ioremap MMIO region */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3107
	ioaddr = ioremap(pci_resource_start(pdev, region), R8169_REGS_SIZE);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3108
	if (!ioaddr) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3109
		netif_err(tp, probe, dev, "cannot remap MMIO, aborting\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3110
		rc = -EIO;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3111
		goto err_out_free_res_3;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3112
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3113
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3114
	tp->pcie_cap = pci_find_capability(pdev, PCI_CAP_ID_EXP);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3115
	if (!tp->pcie_cap)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3116
		netif_info(tp, probe, dev, "no PCI Express capability\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3117
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3118
	RTL_W16(IntrMask, 0x0000);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3119
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3120
	/* Soft reset the chip. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3121
	RTL_W8(ChipCmd, CmdReset);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3122
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3123
	/* Check that the chip has finished the reset. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3124
	for (i = 0; i < 100; i++) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3125
		if ((RTL_R8(ChipCmd) & CmdReset) == 0)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3126
			break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3127
		msleep_interruptible(1);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3128
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3129
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3130
	RTL_W16(IntrStatus, 0xffff);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3131
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3132
	pci_set_master(pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3133
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3134
	/* Identify chip attached to board */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3135
	rtl8169_get_mac_version(tp, ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3136
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3137
	/* Use appropriate default if unknown */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3138
	if (tp->mac_version == RTL_GIGA_MAC_NONE) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3139
		netif_notice(tp, probe, dev,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3140
			     "unknown MAC, using family default\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3141
		tp->mac_version = cfg->default_ver;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3142
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3143
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3144
	rtl8169_print_mac_version(tp);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3145
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3146
	for (i = 0; i < ARRAY_SIZE(rtl_chip_info); i++) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3147
		if (tp->mac_version == rtl_chip_info[i].mac_version)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3148
			break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3149
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3150
	if (i == ARRAY_SIZE(rtl_chip_info)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3151
		dev_err(&pdev->dev,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3152
			"driver bug, MAC version not found in rtl_chip_info\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3153
		goto err_out_msi_4;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3154
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3155
	tp->chipset = i;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3156
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3157
	RTL_W8(Cfg9346, Cfg9346_Unlock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3158
	RTL_W8(Config1, RTL_R8(Config1) | PMEnable);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3159
	RTL_W8(Config5, RTL_R8(Config5) & PMEStatus);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3160
	if ((RTL_R8(Config3) & (LinkUp | MagicPacket)) != 0)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3161
		tp->features |= RTL_FEATURE_WOL;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3162
	if ((RTL_R8(Config5) & (UWF | BWF | MWF)) != 0)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3163
		tp->features |= RTL_FEATURE_WOL;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3164
	tp->features |= rtl_try_msi(pdev, ioaddr, cfg);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3165
	RTL_W8(Cfg9346, Cfg9346_Lock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3166
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3167
	if ((tp->mac_version <= RTL_GIGA_MAC_VER_06) &&
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3168
	    (RTL_R8(PHYstatus) & TBI_Enable)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3169
		tp->set_speed = rtl8169_set_speed_tbi;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3170
		tp->get_settings = rtl8169_gset_tbi;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3171
		tp->phy_reset_enable = rtl8169_tbi_reset_enable;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3172
		tp->phy_reset_pending = rtl8169_tbi_reset_pending;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3173
		tp->link_ok = rtl8169_tbi_link_ok;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3174
		tp->do_ioctl = rtl_tbi_ioctl;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3175
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3176
		tp->phy_1000_ctrl_reg = ADVERTISE_1000FULL; /* Implied by TBI */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3177
	} else {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3178
		tp->set_speed = rtl8169_set_speed_xmii;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3179
		tp->get_settings = rtl8169_gset_xmii;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3180
		tp->phy_reset_enable = rtl8169_xmii_reset_enable;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3181
		tp->phy_reset_pending = rtl8169_xmii_reset_pending;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3182
		tp->link_ok = rtl8169_xmii_link_ok;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3183
		tp->do_ioctl = rtl_xmii_ioctl;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3184
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3185
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3186
	spin_lock_init(&tp->lock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3187
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3188
	tp->mmio_addr = ioaddr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3189
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3190
	/* Get MAC address */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3191
	for (i = 0; i < MAC_ADDR_LEN; i++)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3192
		dev->dev_addr[i] = RTL_R8(MAC0 + i);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3193
	memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3194
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3195
	SET_ETHTOOL_OPS(dev, &rtl8169_ethtool_ops);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3196
	dev->watchdog_timeo = RTL8169_TX_TIMEOUT;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3197
	dev->irq = pdev->irq;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3198
	dev->base_addr = (unsigned long) ioaddr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3199
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3200
	netif_napi_add(dev, &tp->napi, rtl8169_poll, R8169_NAPI_WEIGHT);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3201
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3202
#ifdef CONFIG_R8169_VLAN
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3203
	dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3204
#endif
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3205
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3206
	tp->intr_mask = 0xffff;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3207
	tp->align = cfg->align;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3208
	tp->hw_start = cfg->hw_start;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3209
	tp->intr_event = cfg->intr_event;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3210
	tp->napi_event = cfg->napi_event;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3211
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3212
	init_timer(&tp->timer);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3213
	tp->timer.data = (unsigned long) dev;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3214
	tp->timer.function = rtl8169_phy_timer;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3215
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3216
	// offer device to EtherCAT master module
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3217
	tp->ecdev = ecdev_offer(dev, ec_poll, THIS_MODULE);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3218
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3219
	if (!tp->ecdev) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3220
		rc = register_netdev(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3221
		if (rc < 0)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3222
		goto err_out_msi_4;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3223
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3224
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3225
	pci_set_drvdata(pdev, dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3226
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3227
	netif_info(tp, probe, dev, "%s at 0x%lx, %pM, XID %08x IRQ %d\n",
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3228
		   rtl_chip_info[tp->chipset].name,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3229
		   dev->base_addr, dev->dev_addr,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3230
		   (u32)(RTL_R32(TxConfig) & 0x9cf0f8ff), dev->irq);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3231
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3232
	rtl8169_init_phy(dev, tp);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3233
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3234
	/*
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3235
	 * Pretend we are using VLANs; This bypasses a nasty bug where
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3236
	 * Interrupts stop flowing on high load on 8110SCd controllers.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3237
	 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3238
	if (tp->mac_version == RTL_GIGA_MAC_VER_05)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3239
		RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) | RxVlan);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3240
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3241
	device_set_wakeup_enable(&pdev->dev, tp->features & RTL_FEATURE_WOL);
2582
87e502828b3f Use return value of ecdev_open(); thanks to Patrick Bruenn.
Florian Pose <fp@igh-essen.com>
parents: 2421
diff changeset
  3242
87e502828b3f Use return value of ecdev_open(); thanks to Patrick Bruenn.
Florian Pose <fp@igh-essen.com>
parents: 2421
diff changeset
  3243
	if (pci_dev_run_wake(pdev))
87e502828b3f Use return value of ecdev_open(); thanks to Patrick Bruenn.
Florian Pose <fp@igh-essen.com>
parents: 2421
diff changeset
  3244
		pm_runtime_put_noidle(&pdev->dev);
87e502828b3f Use return value of ecdev_open(); thanks to Patrick Bruenn.
Florian Pose <fp@igh-essen.com>
parents: 2421
diff changeset
  3245
87e502828b3f Use return value of ecdev_open(); thanks to Patrick Bruenn.
Florian Pose <fp@igh-essen.com>
parents: 2421
diff changeset
  3246
	if (tp->ecdev) {
87e502828b3f Use return value of ecdev_open(); thanks to Patrick Bruenn.
Florian Pose <fp@igh-essen.com>
parents: 2421
diff changeset
  3247
		rc = ecdev_open(tp->ecdev);
87e502828b3f Use return value of ecdev_open(); thanks to Patrick Bruenn.
Florian Pose <fp@igh-essen.com>
parents: 2421
diff changeset
  3248
		if (rc) {
87e502828b3f Use return value of ecdev_open(); thanks to Patrick Bruenn.
Florian Pose <fp@igh-essen.com>
parents: 2421
diff changeset
  3249
			ecdev_withdraw(tp->ecdev);
87e502828b3f Use return value of ecdev_open(); thanks to Patrick Bruenn.
Florian Pose <fp@igh-essen.com>
parents: 2421
diff changeset
  3250
			goto err_out_msi_4;
87e502828b3f Use return value of ecdev_open(); thanks to Patrick Bruenn.
Florian Pose <fp@igh-essen.com>
parents: 2421
diff changeset
  3251
		}
87e502828b3f Use return value of ecdev_open(); thanks to Patrick Bruenn.
Florian Pose <fp@igh-essen.com>
parents: 2421
diff changeset
  3252
	}
87e502828b3f Use return value of ecdev_open(); thanks to Patrick Bruenn.
Florian Pose <fp@igh-essen.com>
parents: 2421
diff changeset
  3253
2401
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3254
out:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3255
	return rc;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3256
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3257
err_out_msi_4:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3258
	rtl_disable_msi(pdev, tp);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3259
	iounmap(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3260
err_out_free_res_3:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3261
	pci_release_regions(pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3262
err_out_mwi_2:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3263
	pci_clear_mwi(pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3264
	pci_disable_device(pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3265
err_out_free_dev_1:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3266
	free_netdev(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3267
	goto out;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3268
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3269
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3270
static void __devexit rtl8169_remove_one(struct pci_dev *pdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3271
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3272
	struct net_device *dev = pci_get_drvdata(pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3273
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3274
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3275
	flush_scheduled_work();
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3276
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3277
	if (tp->ecdev) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3278
		ecdev_close(tp->ecdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3279
		ecdev_withdraw(tp->ecdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3280
	} else {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3281
		unregister_netdev(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3282
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3283
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3284
	if(!tp->ecdev) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3285
		if (pci_dev_run_wake(pdev))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3286
			pm_runtime_get_noresume(&pdev->dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3287
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3288
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3289
	/* restore original MAC address */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3290
	rtl_rar_set(tp, dev->perm_addr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3291
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3292
	rtl_disable_msi(pdev, tp);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3293
	rtl8169_release_board(pdev, dev, tp->mmio_addr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3294
	pci_set_drvdata(pdev, NULL);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3295
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3296
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3297
static void rtl8169_set_rxbufsize(struct rtl8169_private *tp,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3298
				  unsigned int mtu)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3299
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3300
	unsigned int max_frame = mtu + VLAN_ETH_HLEN + ETH_FCS_LEN;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3301
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3302
	if (max_frame != 16383)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3303
		printk(KERN_WARNING PFX "WARNING! Changing of MTU on this "
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3304
			"NIC may lead to frame reception errors!\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3305
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3306
	tp->rx_buf_sz = (max_frame > RX_BUF_SIZE) ? max_frame : RX_BUF_SIZE;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3307
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3308
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3309
static int rtl8169_open(struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3310
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3311
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3312
	struct pci_dev *pdev = tp->pci_dev;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3313
	int retval = -ENOMEM;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3314
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3315
	if(!tp->ecdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3316
		pm_runtime_get_sync(&pdev->dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3317
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3318
	/*
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3319
	 * Note that we use a magic value here, its wierd I know
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3320
	 * its done because, some subset of rtl8169 hardware suffers from
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3321
	 * a problem in which frames received that are longer than
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3322
	 * the size set in RxMaxSize register return garbage sizes
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3323
	 * when received.  To avoid this we need to turn off filtering,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3324
	 * which is done by setting a value of 16383 in the RxMaxSize register
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3325
	 * and allocating 16k frames to handle the largest possible rx value
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3326
	 * thats what the magic math below does.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3327
	 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3328
	rtl8169_set_rxbufsize(tp, 16383 - VLAN_ETH_HLEN - ETH_FCS_LEN);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3329
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3330
	/*
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3331
	 * Rx and Tx desscriptors needs 256 bytes alignment.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3332
	 * dma_alloc_coherent provides more.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3333
	 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3334
	tp->TxDescArray = dma_alloc_coherent(&pdev->dev, R8169_TX_RING_BYTES,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3335
					     &tp->TxPhyAddr, GFP_KERNEL);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3336
	if (!tp->TxDescArray)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3337
		goto err_pm_runtime_put;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3338
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3339
	tp->RxDescArray = dma_alloc_coherent(&pdev->dev, R8169_RX_RING_BYTES,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3340
					     &tp->RxPhyAddr, GFP_KERNEL);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3341
	if (!tp->RxDescArray)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3342
		goto err_free_tx_0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3343
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3344
	retval = rtl8169_init_ring(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3345
	if (retval < 0)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3346
		goto err_free_rx_1;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3347
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3348
	INIT_DELAYED_WORK(&tp->task, NULL);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3349
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3350
	smp_mb();
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3351
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3352
	if (!tp->ecdev) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3353
		retval = request_irq(dev->irq, rtl8169_interrupt,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3354
				(tp->features & RTL_FEATURE_MSI) ? 0 : IRQF_SHARED,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3355
				dev->name, dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3356
		if (retval < 0)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3357
			goto err_release_ring_2;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3358
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3359
		napi_enable(&tp->napi);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3360
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3361
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3362
	rtl_hw_start(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3363
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3364
	rtl8169_request_timer(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3365
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3366
	tp->saved_wolopts = 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3367
	if(!tp->ecdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3368
		pm_runtime_put_noidle(&pdev->dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3369
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3370
	rtl8169_check_link_status(dev, tp, tp->mmio_addr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3371
out:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3372
	return retval;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3373
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3374
err_release_ring_2:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3375
	rtl8169_rx_clear(tp);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3376
err_free_rx_1:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3377
	dma_free_coherent(&pdev->dev, R8169_RX_RING_BYTES, tp->RxDescArray,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3378
			  tp->RxPhyAddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3379
	tp->RxDescArray = NULL;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3380
err_free_tx_0:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3381
	dma_free_coherent(&pdev->dev, R8169_TX_RING_BYTES, tp->TxDescArray,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3382
			  tp->TxPhyAddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3383
	tp->TxDescArray = NULL;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3384
err_pm_runtime_put:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3385
	if(!tp->ecdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3386
		pm_runtime_put_noidle(&pdev->dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3387
	goto out;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3388
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3389
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3390
static void rtl8169_hw_reset(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3391
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3392
	/* Disable interrupts */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3393
	rtl8169_irq_mask_and_ack(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3394
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3395
	/* Reset the chipset */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3396
	RTL_W8(ChipCmd, CmdReset);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3397
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3398
	/* PCI commit */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3399
	RTL_R8(ChipCmd);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3400
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3401
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3402
static void rtl_set_rx_tx_config_registers(struct rtl8169_private *tp)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3403
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3404
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3405
	u32 cfg = rtl8169_rx_config;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3406
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3407
	cfg |= (RTL_R32(RxConfig) & rtl_chip_info[tp->chipset].RxConfigMask);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3408
	RTL_W32(RxConfig, cfg);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3409
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3410
	/* Set DMA burst size and Interframe Gap Time */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3411
	RTL_W32(TxConfig, (TX_DMA_BURST << TxDMAShift) |
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3412
		(InterFrameGap << TxInterFrameGapShift));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3413
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3414
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3415
static void rtl_hw_start(struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3416
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3417
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3418
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3419
	unsigned int i;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3420
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3421
	/* Soft reset the chip. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3422
	RTL_W8(ChipCmd, CmdReset);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3423
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3424
	/* Check that the chip has finished the reset. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3425
	for (i = 0; i < 100; i++) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3426
		if ((RTL_R8(ChipCmd) & CmdReset) == 0)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3427
			break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3428
		msleep_interruptible(1);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3429
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3430
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3431
	tp->hw_start(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3432
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3433
	if (!tp->ecdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3434
		netif_start_queue(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3435
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3436
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3437
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3438
static void rtl_set_rx_tx_desc_registers(struct rtl8169_private *tp,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3439
					 void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3440
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3441
	/*
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3442
	 * Magic spell: some iop3xx ARM board needs the TxDescAddrHigh
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3443
	 * register to be written before TxDescAddrLow to work.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3444
	 * Switching from MMIO to I/O access fixes the issue as well.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3445
	 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3446
	RTL_W32(TxDescStartAddrHigh, ((u64) tp->TxPhyAddr) >> 32);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3447
	RTL_W32(TxDescStartAddrLow, ((u64) tp->TxPhyAddr) & DMA_BIT_MASK(32));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3448
	RTL_W32(RxDescAddrHigh, ((u64) tp->RxPhyAddr) >> 32);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3449
	RTL_W32(RxDescAddrLow, ((u64) tp->RxPhyAddr) & DMA_BIT_MASK(32));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3450
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3451
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3452
static u16 rtl_rw_cpluscmd(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3453
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3454
	u16 cmd;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3455
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3456
	cmd = RTL_R16(CPlusCmd);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3457
	RTL_W16(CPlusCmd, cmd);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3458
	return cmd;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3459
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3460
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3461
static void rtl_set_rx_max_size(void __iomem *ioaddr, unsigned int rx_buf_sz)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3462
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3463
	/* Low hurts. Let's disable the filtering. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3464
	RTL_W16(RxMaxSize, rx_buf_sz + 1);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3465
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3466
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3467
static void rtl8169_set_magic_reg(void __iomem *ioaddr, unsigned mac_version)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3468
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3469
	static const struct {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3470
		u32 mac_version;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3471
		u32 clk;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3472
		u32 val;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3473
	} cfg2_info [] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3474
		{ RTL_GIGA_MAC_VER_05, PCI_Clock_33MHz, 0x000fff00 }, // 8110SCd
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3475
		{ RTL_GIGA_MAC_VER_05, PCI_Clock_66MHz, 0x000fffff },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3476
		{ RTL_GIGA_MAC_VER_06, PCI_Clock_33MHz, 0x00ffff00 }, // 8110SCe
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3477
		{ RTL_GIGA_MAC_VER_06, PCI_Clock_66MHz, 0x00ffffff }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3478
	}, *p = cfg2_info;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3479
	unsigned int i;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3480
	u32 clk;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3481
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3482
	clk = RTL_R8(Config2) & PCI_Clock_66MHz;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3483
	for (i = 0; i < ARRAY_SIZE(cfg2_info); i++, p++) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3484
		if ((p->mac_version == mac_version) && (p->clk == clk)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3485
			RTL_W32(0x7c, p->val);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3486
			break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3487
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3488
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3489
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3490
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3491
static void rtl_hw_start_8169(struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3492
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3493
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3494
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3495
	struct pci_dev *pdev = tp->pci_dev;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3496
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3497
	if (tp->mac_version == RTL_GIGA_MAC_VER_05) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3498
		RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) | PCIMulRW);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3499
		pci_write_config_byte(pdev, PCI_CACHE_LINE_SIZE, 0x08);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3500
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3501
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3502
	RTL_W8(Cfg9346, Cfg9346_Unlock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3503
	if ((tp->mac_version == RTL_GIGA_MAC_VER_01) ||
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3504
	    (tp->mac_version == RTL_GIGA_MAC_VER_02) ||
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3505
	    (tp->mac_version == RTL_GIGA_MAC_VER_03) ||
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3506
	    (tp->mac_version == RTL_GIGA_MAC_VER_04))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3507
		RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3508
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3509
	RTL_W8(EarlyTxThres, EarlyTxThld);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3510
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3511
	rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3512
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3513
	if ((tp->mac_version == RTL_GIGA_MAC_VER_01) ||
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3514
	    (tp->mac_version == RTL_GIGA_MAC_VER_02) ||
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3515
	    (tp->mac_version == RTL_GIGA_MAC_VER_03) ||
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3516
	    (tp->mac_version == RTL_GIGA_MAC_VER_04))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3517
		rtl_set_rx_tx_config_registers(tp);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3518
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3519
	tp->cp_cmd |= rtl_rw_cpluscmd(ioaddr) | PCIMulRW;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3520
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3521
	if ((tp->mac_version == RTL_GIGA_MAC_VER_02) ||
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3522
	    (tp->mac_version == RTL_GIGA_MAC_VER_03)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3523
		dprintk("Set MAC Reg C+CR Offset 0xE0. "
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3524
			"Bit-3 and bit-14 MUST be 1\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3525
		tp->cp_cmd |= (1 << 14);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3526
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3527
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3528
	RTL_W16(CPlusCmd, tp->cp_cmd);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3529
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3530
	rtl8169_set_magic_reg(ioaddr, tp->mac_version);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3531
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3532
	/*
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3533
	 * Undocumented corner. Supposedly:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3534
	 * (TxTimer << 12) | (TxPackets << 8) | (RxTimer << 4) | RxPackets
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3535
	 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3536
	RTL_W16(IntrMitigate, 0x0000);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3537
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3538
	rtl_set_rx_tx_desc_registers(tp, ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3539
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3540
	if ((tp->mac_version != RTL_GIGA_MAC_VER_01) &&
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3541
	    (tp->mac_version != RTL_GIGA_MAC_VER_02) &&
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3542
	    (tp->mac_version != RTL_GIGA_MAC_VER_03) &&
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3543
	    (tp->mac_version != RTL_GIGA_MAC_VER_04)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3544
		RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3545
		rtl_set_rx_tx_config_registers(tp);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3546
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3547
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3548
	RTL_W8(Cfg9346, Cfg9346_Lock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3549
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3550
	/* Initially a 10 us delay. Turned it into a PCI commit. - FR */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3551
	RTL_R8(IntrMask);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3552
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3553
	RTL_W32(RxMissed, 0);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3554
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3555
	rtl_set_rx_mode(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3556
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3557
	/* no early-rx interrupts */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3558
	RTL_W16(MultiIntr, RTL_R16(MultiIntr) & 0xF000);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3559
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3560
	/* Enable all known interrupts by setting the interrupt mask. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3561
	if (!tp->ecdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3562
		RTL_W16(IntrMask, tp->intr_event);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3563
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3564
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3565
static void rtl_tx_performance_tweak(struct pci_dev *pdev, u16 force)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3566
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3567
	struct net_device *dev = pci_get_drvdata(pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3568
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3569
	int cap = tp->pcie_cap;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3570
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3571
	if (cap) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3572
		u16 ctl;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3573
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3574
		pci_read_config_word(pdev, cap + PCI_EXP_DEVCTL, &ctl);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3575
		ctl = (ctl & ~PCI_EXP_DEVCTL_READRQ) | force;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3576
		pci_write_config_word(pdev, cap + PCI_EXP_DEVCTL, ctl);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3577
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3578
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3579
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3580
static void rtl_csi_access_enable(void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3581
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3582
	u32 csi;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3583
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3584
	csi = rtl_csi_read(ioaddr, 0x070c) & 0x00ffffff;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3585
	rtl_csi_write(ioaddr, 0x070c, csi | 0x27000000);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3586
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3587
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3588
struct ephy_info {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3589
	unsigned int offset;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3590
	u16 mask;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3591
	u16 bits;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3592
};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3593
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3594
static void rtl_ephy_init(void __iomem *ioaddr, const struct ephy_info *e, int len)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3595
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3596
	u16 w;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3597
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3598
	while (len-- > 0) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3599
		w = (rtl_ephy_read(ioaddr, e->offset) & ~e->mask) | e->bits;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3600
		rtl_ephy_write(ioaddr, e->offset, w);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3601
		e++;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3602
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3603
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3604
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3605
static void rtl_disable_clock_request(struct pci_dev *pdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3606
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3607
	struct net_device *dev = pci_get_drvdata(pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3608
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3609
	int cap = tp->pcie_cap;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3610
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3611
	if (cap) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3612
		u16 ctl;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3613
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3614
		pci_read_config_word(pdev, cap + PCI_EXP_LNKCTL, &ctl);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3615
		ctl &= ~PCI_EXP_LNKCTL_CLKREQ_EN;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3616
		pci_write_config_word(pdev, cap + PCI_EXP_LNKCTL, ctl);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3617
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3618
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3619
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3620
#define R8168_CPCMD_QUIRK_MASK (\
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3621
	EnableBist | \
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3622
	Mac_dbgo_oe | \
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3623
	Force_half_dup | \
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3624
	Force_rxflow_en | \
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3625
	Force_txflow_en | \
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3626
	Cxpl_dbg_sel | \
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3627
	ASF | \
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3628
	PktCntrDisable | \
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3629
	Mac_dbgo_sel)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3630
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3631
static void rtl_hw_start_8168bb(void __iomem *ioaddr, struct pci_dev *pdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3632
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3633
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3634
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3635
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3636
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3637
	rtl_tx_performance_tweak(pdev,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3638
		(0x5 << MAX_READ_REQUEST_SHIFT) | PCI_EXP_DEVCTL_NOSNOOP_EN);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3639
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3640
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3641
static void rtl_hw_start_8168bef(void __iomem *ioaddr, struct pci_dev *pdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3642
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3643
	rtl_hw_start_8168bb(ioaddr, pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3644
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3645
	RTL_W8(EarlyTxThres, EarlyTxThld);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3646
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3647
	RTL_W8(Config4, RTL_R8(Config4) & ~(1 << 0));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3648
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3649
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3650
static void __rtl_hw_start_8168cp(void __iomem *ioaddr, struct pci_dev *pdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3651
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3652
	RTL_W8(Config1, RTL_R8(Config1) | Speed_down);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3653
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3654
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3655
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3656
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3657
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3658
	rtl_disable_clock_request(pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3659
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3660
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3661
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3662
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3663
static void rtl_hw_start_8168cp_1(void __iomem *ioaddr, struct pci_dev *pdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3664
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3665
	static const struct ephy_info e_info_8168cp[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3666
		{ 0x01, 0,	0x0001 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3667
		{ 0x02, 0x0800,	0x1000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3668
		{ 0x03, 0,	0x0042 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3669
		{ 0x06, 0x0080,	0x0000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3670
		{ 0x07, 0,	0x2000 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3671
	};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3672
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3673
	rtl_csi_access_enable(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3674
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3675
	rtl_ephy_init(ioaddr, e_info_8168cp, ARRAY_SIZE(e_info_8168cp));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3676
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3677
	__rtl_hw_start_8168cp(ioaddr, pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3678
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3679
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3680
static void rtl_hw_start_8168cp_2(void __iomem *ioaddr, struct pci_dev *pdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3681
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3682
	rtl_csi_access_enable(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3683
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3684
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3685
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3686
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3687
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3688
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3689
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3690
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3691
static void rtl_hw_start_8168cp_3(void __iomem *ioaddr, struct pci_dev *pdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3692
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3693
	rtl_csi_access_enable(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3694
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3695
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3696
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3697
	/* Magic. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3698
	RTL_W8(DBG_REG, 0x20);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3699
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3700
	RTL_W8(EarlyTxThres, EarlyTxThld);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3701
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3702
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3703
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3704
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3705
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3706
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3707
static void rtl_hw_start_8168c_1(void __iomem *ioaddr, struct pci_dev *pdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3708
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3709
	static const struct ephy_info e_info_8168c_1[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3710
		{ 0x02, 0x0800,	0x1000 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3711
		{ 0x03, 0,	0x0002 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3712
		{ 0x06, 0x0080,	0x0000 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3713
	};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3714
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3715
	rtl_csi_access_enable(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3716
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3717
	RTL_W8(DBG_REG, 0x06 | FIX_NAK_1 | FIX_NAK_2);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3718
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3719
	rtl_ephy_init(ioaddr, e_info_8168c_1, ARRAY_SIZE(e_info_8168c_1));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3720
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3721
	__rtl_hw_start_8168cp(ioaddr, pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3722
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3723
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3724
static void rtl_hw_start_8168c_2(void __iomem *ioaddr, struct pci_dev *pdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3725
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3726
	static const struct ephy_info e_info_8168c_2[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3727
		{ 0x01, 0,	0x0001 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3728
		{ 0x03, 0x0400,	0x0220 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3729
	};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3730
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3731
	rtl_csi_access_enable(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3732
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3733
	rtl_ephy_init(ioaddr, e_info_8168c_2, ARRAY_SIZE(e_info_8168c_2));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3734
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3735
	__rtl_hw_start_8168cp(ioaddr, pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3736
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3737
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3738
static void rtl_hw_start_8168c_3(void __iomem *ioaddr, struct pci_dev *pdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3739
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3740
	rtl_hw_start_8168c_2(ioaddr, pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3741
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3742
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3743
static void rtl_hw_start_8168c_4(void __iomem *ioaddr, struct pci_dev *pdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3744
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3745
	rtl_csi_access_enable(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3746
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3747
	__rtl_hw_start_8168cp(ioaddr, pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3748
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3749
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3750
static void rtl_hw_start_8168d(void __iomem *ioaddr, struct pci_dev *pdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3751
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3752
	rtl_csi_access_enable(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3753
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3754
	rtl_disable_clock_request(pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3755
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3756
	RTL_W8(EarlyTxThres, EarlyTxThld);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3757
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3758
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3759
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3760
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3761
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3762
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3763
static void rtl_hw_start_8168(struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3764
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3765
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3766
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3767
	struct pci_dev *pdev = tp->pci_dev;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3768
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3769
	RTL_W8(Cfg9346, Cfg9346_Unlock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3770
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3771
	RTL_W8(EarlyTxThres, EarlyTxThld);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3772
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3773
	rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3774
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3775
	tp->cp_cmd |= RTL_R16(CPlusCmd) | PktCntrDisable | INTT_1;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3776
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3777
	RTL_W16(CPlusCmd, tp->cp_cmd);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3778
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3779
	RTL_W16(IntrMitigate, 0x5151);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3780
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3781
	/* Work around for RxFIFO overflow. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3782
	if (tp->mac_version == RTL_GIGA_MAC_VER_11) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3783
		tp->intr_event |= RxFIFOOver | PCSTimeout;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3784
		tp->intr_event &= ~RxOverflow;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3785
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3786
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3787
	rtl_set_rx_tx_desc_registers(tp, ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3788
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3789
	rtl_set_rx_mode(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3790
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3791
	RTL_W32(TxConfig, (TX_DMA_BURST << TxDMAShift) |
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3792
		(InterFrameGap << TxInterFrameGapShift));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3793
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3794
	RTL_R8(IntrMask);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3795
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3796
	switch (tp->mac_version) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3797
	case RTL_GIGA_MAC_VER_11:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3798
		rtl_hw_start_8168bb(ioaddr, pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3799
	break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3800
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3801
	case RTL_GIGA_MAC_VER_12:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3802
	case RTL_GIGA_MAC_VER_17:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3803
		rtl_hw_start_8168bef(ioaddr, pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3804
	break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3805
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3806
	case RTL_GIGA_MAC_VER_18:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3807
		rtl_hw_start_8168cp_1(ioaddr, pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3808
	break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3809
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3810
	case RTL_GIGA_MAC_VER_19:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3811
		rtl_hw_start_8168c_1(ioaddr, pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3812
	break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3813
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3814
	case RTL_GIGA_MAC_VER_20:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3815
		rtl_hw_start_8168c_2(ioaddr, pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3816
	break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3817
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3818
	case RTL_GIGA_MAC_VER_21:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3819
		rtl_hw_start_8168c_3(ioaddr, pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3820
	break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3821
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3822
	case RTL_GIGA_MAC_VER_22:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3823
		rtl_hw_start_8168c_4(ioaddr, pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3824
	break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3825
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3826
	case RTL_GIGA_MAC_VER_23:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3827
		rtl_hw_start_8168cp_2(ioaddr, pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3828
	break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3829
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3830
	case RTL_GIGA_MAC_VER_24:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3831
		rtl_hw_start_8168cp_3(ioaddr, pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3832
	break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3833
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3834
	case RTL_GIGA_MAC_VER_25:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3835
	case RTL_GIGA_MAC_VER_26:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3836
	case RTL_GIGA_MAC_VER_27:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3837
		rtl_hw_start_8168d(ioaddr, pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3838
	break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3839
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3840
	default:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3841
		printk(KERN_ERR PFX "%s: unknown chipset (mac_version = %d).\n",
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3842
			dev->name, tp->mac_version);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3843
	break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3844
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3845
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3846
	RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3847
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3848
	RTL_W8(Cfg9346, Cfg9346_Lock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3849
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3850
	RTL_W16(MultiIntr, RTL_R16(MultiIntr) & 0xF000);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3851
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3852
	if (!tp->ecdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3853
		RTL_W16(IntrMask, tp->intr_event);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3854
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3855
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3856
#define R810X_CPCMD_QUIRK_MASK (\
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3857
	EnableBist | \
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3858
	Mac_dbgo_oe | \
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3859
	Force_half_dup | \
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3860
	Force_rxflow_en | \
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3861
	Force_txflow_en | \
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3862
	Cxpl_dbg_sel | \
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3863
	ASF | \
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3864
	PktCntrDisable | \
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3865
	PCIDAC | \
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3866
	PCIMulRW)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3867
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3868
static void rtl_hw_start_8102e_1(void __iomem *ioaddr, struct pci_dev *pdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3869
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3870
	static const struct ephy_info e_info_8102e_1[] = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3871
		{ 0x01,	0, 0x6e65 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3872
		{ 0x02,	0, 0x091f },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3873
		{ 0x03,	0, 0xc2f9 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3874
		{ 0x06,	0, 0xafb5 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3875
		{ 0x07,	0, 0x0e00 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3876
		{ 0x19,	0, 0xec80 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3877
		{ 0x01,	0, 0x2e65 },
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3878
		{ 0x01,	0, 0x6e65 }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3879
	};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3880
	u8 cfg1;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3881
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3882
	rtl_csi_access_enable(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3883
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3884
	RTL_W8(DBG_REG, FIX_NAK_1);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3885
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3886
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3887
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3888
	RTL_W8(Config1,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3889
	       LEDS1 | LEDS0 | Speed_down | MEMMAP | IOMAP | VPD | PMEnable);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3890
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3891
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3892
	cfg1 = RTL_R8(Config1);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3893
	if ((cfg1 & LEDS0) && (cfg1 & LEDS1))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3894
		RTL_W8(Config1, cfg1 & ~LEDS0);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3895
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3896
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R810X_CPCMD_QUIRK_MASK);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3897
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3898
	rtl_ephy_init(ioaddr, e_info_8102e_1, ARRAY_SIZE(e_info_8102e_1));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3899
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3900
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3901
static void rtl_hw_start_8102e_2(void __iomem *ioaddr, struct pci_dev *pdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3902
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3903
	rtl_csi_access_enable(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3904
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3905
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3906
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3907
	RTL_W8(Config1, MEMMAP | IOMAP | VPD | PMEnable);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3908
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3909
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3910
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R810X_CPCMD_QUIRK_MASK);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3911
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3912
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3913
static void rtl_hw_start_8102e_3(void __iomem *ioaddr, struct pci_dev *pdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3914
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3915
	rtl_hw_start_8102e_2(ioaddr, pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3916
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3917
	rtl_ephy_write(ioaddr, 0x03, 0xc2f9);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3918
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3919
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3920
static void rtl_hw_start_8101(struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3921
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3922
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3923
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3924
	struct pci_dev *pdev = tp->pci_dev;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3925
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3926
	if ((tp->mac_version == RTL_GIGA_MAC_VER_13) ||
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3927
	    (tp->mac_version == RTL_GIGA_MAC_VER_16)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3928
		int cap = tp->pcie_cap;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3929
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3930
		if (cap) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3931
			pci_write_config_word(pdev, cap + PCI_EXP_DEVCTL,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3932
					      PCI_EXP_DEVCTL_NOSNOOP_EN);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3933
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3934
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3935
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3936
	switch (tp->mac_version) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3937
	case RTL_GIGA_MAC_VER_07:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3938
		rtl_hw_start_8102e_1(ioaddr, pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3939
		break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3940
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3941
	case RTL_GIGA_MAC_VER_08:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3942
		rtl_hw_start_8102e_3(ioaddr, pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3943
		break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3944
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3945
	case RTL_GIGA_MAC_VER_09:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3946
		rtl_hw_start_8102e_2(ioaddr, pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3947
		break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3948
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3949
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3950
	RTL_W8(Cfg9346, Cfg9346_Unlock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3951
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3952
	RTL_W8(EarlyTxThres, EarlyTxThld);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3953
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3954
	rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3955
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3956
	tp->cp_cmd |= rtl_rw_cpluscmd(ioaddr) | PCIMulRW;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3957
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3958
	RTL_W16(CPlusCmd, tp->cp_cmd);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3959
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3960
	RTL_W16(IntrMitigate, 0x0000);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3961
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3962
	rtl_set_rx_tx_desc_registers(tp, ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3963
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3964
	RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3965
	rtl_set_rx_tx_config_registers(tp);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3966
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3967
	RTL_W8(Cfg9346, Cfg9346_Lock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3968
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3969
	RTL_R8(IntrMask);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3970
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3971
	rtl_set_rx_mode(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3972
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3973
	RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3974
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3975
	RTL_W16(MultiIntr, RTL_R16(MultiIntr) & 0xf000);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3976
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3977
	if (!tp->ecdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3978
		RTL_W16(IntrMask, tp->intr_event);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3979
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3980
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3981
static int rtl8169_change_mtu(struct net_device *dev, int new_mtu)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3982
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3983
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3984
	int ret = 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3985
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3986
	if (new_mtu < ETH_ZLEN || new_mtu > SafeMtu)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3987
		return -EINVAL;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3988
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3989
	dev->mtu = new_mtu;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3990
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3991
	if (!netif_running(dev))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3992
		goto out;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3993
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3994
	rtl8169_down(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3995
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3996
	rtl8169_set_rxbufsize(tp, dev->mtu);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3997
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3998
	ret = rtl8169_init_ring(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  3999
	if (ret < 0)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4000
		goto out;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4001
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4002
	napi_enable(&tp->napi);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4003
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4004
	rtl_hw_start(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4005
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4006
	rtl8169_request_timer(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4007
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4008
out:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4009
	return ret;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4010
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4011
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4012
static inline void rtl8169_make_unusable_by_asic(struct RxDesc *desc)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4013
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4014
	desc->addr = cpu_to_le64(0x0badbadbadbadbadull);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4015
	desc->opts1 &= ~cpu_to_le32(DescOwn | RsvdMask);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4016
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4017
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4018
static void rtl8169_free_rx_skb(struct rtl8169_private *tp,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4019
				struct sk_buff **sk_buff, struct RxDesc *desc)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4020
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4021
	struct pci_dev *pdev = tp->pci_dev;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4022
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4023
	dma_unmap_single(&pdev->dev, le64_to_cpu(desc->addr), tp->rx_buf_sz,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4024
			 PCI_DMA_FROMDEVICE);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4025
	dev_kfree_skb(*sk_buff);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4026
	*sk_buff = NULL;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4027
	rtl8169_make_unusable_by_asic(desc);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4028
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4029
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4030
static inline void rtl8169_mark_to_asic(struct RxDesc *desc, u32 rx_buf_sz)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4031
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4032
	u32 eor = le32_to_cpu(desc->opts1) & RingEnd;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4033
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4034
	desc->opts1 = cpu_to_le32(DescOwn | eor | rx_buf_sz);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4035
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4036
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4037
static inline void rtl8169_map_to_asic(struct RxDesc *desc, dma_addr_t mapping,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4038
				       u32 rx_buf_sz)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4039
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4040
	desc->addr = cpu_to_le64(mapping);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4041
	wmb();
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4042
	rtl8169_mark_to_asic(desc, rx_buf_sz);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4043
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4044
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4045
static struct sk_buff *rtl8169_alloc_rx_skb(struct pci_dev *pdev,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4046
					    struct net_device *dev,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4047
					    struct RxDesc *desc, int rx_buf_sz,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4048
					    unsigned int align, gfp_t gfp)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4049
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4050
	struct sk_buff *skb;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4051
	dma_addr_t mapping;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4052
	unsigned int pad;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4053
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4054
	pad = align ? align : NET_IP_ALIGN;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4055
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4056
	skb = __netdev_alloc_skb(dev, rx_buf_sz + pad, gfp);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4057
	if (!skb)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4058
		goto err_out;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4059
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4060
	skb_reserve(skb, align ? ((pad - 1) & (unsigned long)skb->data) : pad);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4061
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4062
	mapping = dma_map_single(&pdev->dev, skb->data, rx_buf_sz,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4063
				 PCI_DMA_FROMDEVICE);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4064
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4065
	rtl8169_map_to_asic(desc, mapping, rx_buf_sz);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4066
out:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4067
	return skb;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4068
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4069
err_out:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4070
	rtl8169_make_unusable_by_asic(desc);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4071
	goto out;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4072
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4073
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4074
static void rtl8169_rx_clear(struct rtl8169_private *tp)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4075
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4076
	unsigned int i;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4077
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4078
	for (i = 0; i < NUM_RX_DESC; i++) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4079
		if (tp->Rx_skbuff[i]) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4080
			rtl8169_free_rx_skb(tp, tp->Rx_skbuff + i,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4081
					    tp->RxDescArray + i);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4082
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4083
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4084
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4085
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4086
static u32 rtl8169_rx_fill(struct rtl8169_private *tp, struct net_device *dev,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4087
			   u32 start, u32 end, gfp_t gfp)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4088
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4089
	u32 cur;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4090
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4091
	for (cur = start; end - cur != 0; cur++) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4092
		struct sk_buff *skb;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4093
		unsigned int i = cur % NUM_RX_DESC;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4094
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4095
		WARN_ON((s32)(end - cur) < 0);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4096
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4097
		if (tp->Rx_skbuff[i])
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4098
			continue;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4099
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4100
		skb = rtl8169_alloc_rx_skb(tp->pci_dev, dev,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4101
					   tp->RxDescArray + i,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4102
					   tp->rx_buf_sz, tp->align, gfp);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4103
		if (!skb)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4104
			break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4105
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4106
		tp->Rx_skbuff[i] = skb;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4107
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4108
	return cur - start;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4109
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4110
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4111
static inline void rtl8169_mark_as_last_descriptor(struct RxDesc *desc)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4112
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4113
	desc->opts1 |= cpu_to_le32(RingEnd);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4114
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4115
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4116
static void rtl8169_init_ring_indexes(struct rtl8169_private *tp)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4117
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4118
	tp->dirty_tx = tp->dirty_rx = tp->cur_tx = tp->cur_rx = 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4119
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4120
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4121
static int rtl8169_init_ring(struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4122
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4123
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4124
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4125
	rtl8169_init_ring_indexes(tp);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4126
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4127
	memset(tp->tx_skb, 0x0, NUM_TX_DESC * sizeof(struct ring_info));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4128
	memset(tp->Rx_skbuff, 0x0, NUM_RX_DESC * sizeof(struct sk_buff *));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4129
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4130
	if (rtl8169_rx_fill(tp, dev, 0, NUM_RX_DESC, GFP_KERNEL) != NUM_RX_DESC)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4131
		goto err_out;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4132
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4133
	rtl8169_mark_as_last_descriptor(tp->RxDescArray + NUM_RX_DESC - 1);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4134
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4135
	return 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4136
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4137
err_out:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4138
	rtl8169_rx_clear(tp);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4139
	return -ENOMEM;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4140
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4141
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4142
static void rtl8169_unmap_tx_skb(struct pci_dev *pdev, struct ring_info *tx_skb,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4143
				 struct TxDesc *desc)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4144
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4145
	unsigned int len = tx_skb->len;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4146
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4147
	dma_unmap_single(&pdev->dev, le64_to_cpu(desc->addr), len,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4148
			 PCI_DMA_TODEVICE);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4149
	desc->opts1 = 0x00;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4150
	desc->opts2 = 0x00;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4151
	desc->addr = 0x00;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4152
	tx_skb->len = 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4153
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4154
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4155
static void rtl8169_tx_clear(struct rtl8169_private *tp)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4156
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4157
	unsigned int i;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4158
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4159
	for (i = tp->dirty_tx; i < tp->dirty_tx + NUM_TX_DESC; i++) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4160
		unsigned int entry = i % NUM_TX_DESC;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4161
		struct ring_info *tx_skb = tp->tx_skb + entry;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4162
		unsigned int len = tx_skb->len;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4163
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4164
		if (len) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4165
			struct sk_buff *skb = tx_skb->skb;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4166
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4167
			rtl8169_unmap_tx_skb(tp->pci_dev, tx_skb,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4168
					     tp->TxDescArray + entry);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4169
			if (skb) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4170
				if (!tp->ecdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4171
					dev_kfree_skb(skb);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4172
				tx_skb->skb = NULL;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4173
			}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4174
			tp->dev->stats.tx_dropped++;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4175
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4176
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4177
	tp->cur_tx = tp->dirty_tx = 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4178
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4179
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4180
static void rtl8169_schedule_work(struct net_device *dev, work_func_t task)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4181
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4182
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4183
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4184
	PREPARE_DELAYED_WORK(&tp->task, task);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4185
	schedule_delayed_work(&tp->task, 4);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4186
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4187
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4188
static void rtl8169_wait_for_quiescence(struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4189
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4190
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4191
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4192
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4193
	synchronize_irq(dev->irq);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4194
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4195
	/* Wait for any pending NAPI task to complete */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4196
	napi_disable(&tp->napi);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4197
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4198
	rtl8169_irq_mask_and_ack(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4199
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4200
	tp->intr_mask = 0xffff;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4201
	RTL_W16(IntrMask, tp->intr_event);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4202
	napi_enable(&tp->napi);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4203
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4204
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4205
static void rtl8169_reinit_task(struct work_struct *work)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4206
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4207
	struct rtl8169_private *tp =
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4208
		container_of(work, struct rtl8169_private, task.work);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4209
	struct net_device *dev = tp->dev;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4210
	int ret;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4211
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4212
	rtnl_lock();
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4213
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4214
	if (!netif_running(dev))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4215
		goto out_unlock;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4216
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4217
	rtl8169_wait_for_quiescence(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4218
	rtl8169_close(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4219
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4220
	ret = rtl8169_open(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4221
	if (unlikely(ret < 0)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4222
		if (net_ratelimit())
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4223
			netif_err(tp, drv, dev,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4224
				  "reinit failure (status = %d). Rescheduling\n",
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4225
				  ret);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4226
		rtl8169_schedule_work(dev, rtl8169_reinit_task);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4227
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4228
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4229
out_unlock:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4230
	rtnl_unlock();
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4231
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4232
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4233
static void rtl8169_reset_task(struct work_struct *work)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4234
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4235
	struct rtl8169_private *tp =
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4236
		container_of(work, struct rtl8169_private, task.work);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4237
	struct net_device *dev = tp->dev;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4238
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4239
	rtnl_lock();
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4240
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4241
	if (!netif_running(dev))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4242
		goto out_unlock;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4243
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4244
	rtl8169_wait_for_quiescence(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4245
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4246
	rtl8169_rx_interrupt(dev, tp, tp->mmio_addr, ~(u32)0);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4247
	rtl8169_tx_clear(tp);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4248
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4249
	if (tp->dirty_rx == tp->cur_rx) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4250
		rtl8169_init_ring_indexes(tp);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4251
		rtl_hw_start(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4252
		netif_wake_queue(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4253
		rtl8169_check_link_status(dev, tp, tp->mmio_addr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4254
	} else {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4255
		if (net_ratelimit())
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4256
			netif_emerg(tp, intr, dev, "Rx buffers shortage\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4257
		rtl8169_schedule_work(dev, rtl8169_reset_task);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4258
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4259
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4260
out_unlock:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4261
	rtnl_unlock();
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4262
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4263
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4264
static void rtl8169_tx_timeout(struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4265
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4266
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4267
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4268
	if (tp->ecdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4269
		return;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4270
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4271
	rtl8169_hw_reset(tp->mmio_addr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4272
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4273
	/* Let's wait a bit while any (async) irq lands on */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4274
	rtl8169_schedule_work(dev, rtl8169_reset_task);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4275
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4276
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4277
static int rtl8169_xmit_frags(struct rtl8169_private *tp, struct sk_buff *skb,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4278
			      u32 opts1)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4279
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4280
	struct skb_shared_info *info = skb_shinfo(skb);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4281
	unsigned int cur_frag, entry;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4282
	struct TxDesc * uninitialized_var(txd);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4283
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4284
	entry = tp->cur_tx;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4285
	for (cur_frag = 0; cur_frag < info->nr_frags; cur_frag++) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4286
		skb_frag_t *frag = info->frags + cur_frag;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4287
		dma_addr_t mapping;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4288
		u32 status, len;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4289
		void *addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4290
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4291
		entry = (entry + 1) % NUM_TX_DESC;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4292
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4293
		txd = tp->TxDescArray + entry;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4294
		len = frag->size;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4295
		addr = ((void *) page_address(frag->page)) + frag->page_offset;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4296
		mapping = dma_map_single(&tp->pci_dev->dev, addr, len,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4297
					 PCI_DMA_TODEVICE);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4298
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4299
		/* anti gcc 2.95.3 bugware (sic) */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4300
		status = opts1 | len | (RingEnd * !((entry + 1) % NUM_TX_DESC));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4301
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4302
		txd->opts1 = cpu_to_le32(status);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4303
		txd->addr = cpu_to_le64(mapping);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4304
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4305
		tp->tx_skb[entry].len = len;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4306
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4307
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4308
	if (cur_frag) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4309
		tp->tx_skb[entry].skb = skb;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4310
		txd->opts1 |= cpu_to_le32(LastFrag);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4311
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4312
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4313
	return cur_frag;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4314
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4315
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4316
static inline u32 rtl8169_tso_csum(struct sk_buff *skb, struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4317
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4318
	if (dev->features & NETIF_F_TSO) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4319
		u32 mss = skb_shinfo(skb)->gso_size;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4320
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4321
		if (mss)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4322
			return LargeSend | ((mss & MSSMask) << MSSShift);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4323
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4324
	if (skb->ip_summed == CHECKSUM_PARTIAL) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4325
		const struct iphdr *ip = ip_hdr(skb);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4326
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4327
		if (ip->protocol == IPPROTO_TCP)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4328
			return IPCS | TCPCS;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4329
		else if (ip->protocol == IPPROTO_UDP)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4330
			return IPCS | UDPCS;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4331
		WARN_ON(1);	/* we need a WARN() */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4332
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4333
	return 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4334
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4335
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4336
static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4337
				      struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4338
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4339
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4340
	unsigned int frags, entry = tp->cur_tx % NUM_TX_DESC;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4341
	struct TxDesc *txd = tp->TxDescArray + entry;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4342
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4343
	dma_addr_t mapping;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4344
	u32 status, len;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4345
	u32 opts1;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4346
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4347
	if (unlikely(TX_BUFFS_AVAIL(tp) < skb_shinfo(skb)->nr_frags)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4348
		netif_err(tp, drv, dev, "BUG! Tx Ring full when queue awake!\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4349
		goto err_stop;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4350
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4351
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4352
	if (unlikely(le32_to_cpu(txd->opts1) & DescOwn))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4353
		goto err_stop;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4354
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4355
	opts1 = DescOwn | rtl8169_tso_csum(skb, dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4356
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4357
	frags = rtl8169_xmit_frags(tp, skb, opts1);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4358
	if (frags) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4359
		len = skb_headlen(skb);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4360
		opts1 |= FirstFrag;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4361
	} else {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4362
		len = skb->len;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4363
		opts1 |= FirstFrag | LastFrag;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4364
		tp->tx_skb[entry].skb = skb;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4365
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4366
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4367
	mapping = dma_map_single(&tp->pci_dev->dev, skb->data, len,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4368
				 PCI_DMA_TODEVICE);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4369
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4370
	tp->tx_skb[entry].len = len;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4371
	txd->addr = cpu_to_le64(mapping);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4372
	txd->opts2 = cpu_to_le32(rtl8169_tx_vlan_tag(tp, skb));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4373
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4374
	wmb();
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4375
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4376
	/* anti gcc 2.95.3 bugware (sic) */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4377
	status = opts1 | len | (RingEnd * !((entry + 1) % NUM_TX_DESC));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4378
	txd->opts1 = cpu_to_le32(status);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4379
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4380
	tp->cur_tx += frags + 1;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4381
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4382
	wmb();
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4383
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4384
	RTL_W8(TxPoll, NPQ);	/* set polling bit */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4385
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4386
	if (!tp->ecdev) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4387
		if (TX_BUFFS_AVAIL(tp) < MAX_SKB_FRAGS) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4388
			netif_stop_queue(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4389
			smp_rmb();
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4390
			if (TX_BUFFS_AVAIL(tp) >= MAX_SKB_FRAGS)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4391
				netif_wake_queue(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4392
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4393
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4394
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4395
	return NETDEV_TX_OK;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4396
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4397
err_stop:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4398
	if (!tp->ecdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4399
		netif_stop_queue(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4400
	dev->stats.tx_dropped++;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4401
	return NETDEV_TX_BUSY;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4402
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4403
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4404
static void rtl8169_pcierr_interrupt(struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4405
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4406
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4407
	struct pci_dev *pdev = tp->pci_dev;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4408
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4409
	u16 pci_status, pci_cmd;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4410
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4411
	pci_read_config_word(pdev, PCI_COMMAND, &pci_cmd);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4412
	pci_read_config_word(pdev, PCI_STATUS, &pci_status);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4413
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4414
	netif_err(tp, intr, dev, "PCI error (cmd = 0x%04x, status = 0x%04x)\n",
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4415
		  pci_cmd, pci_status);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4416
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4417
	/*
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4418
	 * The recovery sequence below admits a very elaborated explanation:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4419
	 * - it seems to work;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4420
	 * - I did not see what else could be done;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4421
	 * - it makes iop3xx happy.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4422
	 *
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4423
	 * Feel free to adjust to your needs.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4424
	 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4425
	if (pdev->broken_parity_status)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4426
		pci_cmd &= ~PCI_COMMAND_PARITY;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4427
	else
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4428
		pci_cmd |= PCI_COMMAND_SERR | PCI_COMMAND_PARITY;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4429
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4430
	pci_write_config_word(pdev, PCI_COMMAND, pci_cmd);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4431
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4432
	pci_write_config_word(pdev, PCI_STATUS,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4433
		pci_status & (PCI_STATUS_DETECTED_PARITY |
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4434
		PCI_STATUS_SIG_SYSTEM_ERROR | PCI_STATUS_REC_MASTER_ABORT |
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4435
		PCI_STATUS_REC_TARGET_ABORT | PCI_STATUS_SIG_TARGET_ABORT));
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4436
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4437
	/* The infamous DAC f*ckup only happens at boot time */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4438
	if ((tp->cp_cmd & PCIDAC) && !tp->dirty_rx && !tp->cur_rx) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4439
		netif_info(tp, intr, dev, "disabling PCI DAC\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4440
		tp->cp_cmd &= ~PCIDAC;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4441
		RTL_W16(CPlusCmd, tp->cp_cmd);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4442
		dev->features &= ~NETIF_F_HIGHDMA;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4443
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4444
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4445
	rtl8169_hw_reset(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4446
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4447
	rtl8169_schedule_work(dev, rtl8169_reinit_task);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4448
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4449
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4450
static void rtl8169_tx_interrupt(struct net_device *dev,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4451
				 struct rtl8169_private *tp,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4452
				 void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4453
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4454
	unsigned int dirty_tx, tx_left;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4455
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4456
	dirty_tx = tp->dirty_tx;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4457
	smp_rmb();
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4458
	tx_left = tp->cur_tx - dirty_tx;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4459
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4460
	while (tx_left > 0) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4461
		unsigned int entry = dirty_tx % NUM_TX_DESC;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4462
		struct ring_info *tx_skb = tp->tx_skb + entry;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4463
		u32 len = tx_skb->len;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4464
		u32 status;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4465
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4466
		rmb();
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4467
		status = le32_to_cpu(tp->TxDescArray[entry].opts1);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4468
		if (status & DescOwn)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4469
			break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4470
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4471
		dev->stats.tx_bytes += len;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4472
		dev->stats.tx_packets++;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4473
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4474
		rtl8169_unmap_tx_skb(tp->pci_dev, tx_skb, tp->TxDescArray + entry);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4475
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4476
		if (status & LastFrag) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4477
			if (!tp->ecdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4478
				dev_kfree_skb(tx_skb->skb);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4479
			tx_skb->skb = NULL;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4480
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4481
		dirty_tx++;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4482
		tx_left--;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4483
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4484
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4485
	if (tp->dirty_tx != dirty_tx) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4486
		tp->dirty_tx = dirty_tx;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4487
		smp_wmb();
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4488
		if (!tp->ecdev && netif_queue_stopped(dev) &&
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4489
		    (TX_BUFFS_AVAIL(tp) >= MAX_SKB_FRAGS)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4490
			netif_wake_queue(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4491
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4492
		/*
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4493
		 * 8168 hack: TxPoll requests are lost when the Tx packets are
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4494
		 * too close. Let's kick an extra TxPoll request when a burst
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4495
		 * of start_xmit activity is detected (if it is not detected,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4496
		 * it is slow enough). -- FR
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4497
		 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4498
		smp_rmb();
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4499
		if (tp->cur_tx != dirty_tx)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4500
			RTL_W8(TxPoll, NPQ);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4501
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4502
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4503
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4504
static inline int rtl8169_fragmented_frame(u32 status)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4505
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4506
	return (status & (FirstFrag | LastFrag)) != (FirstFrag | LastFrag);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4507
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4508
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4509
static inline void rtl8169_rx_csum(struct sk_buff *skb, struct RxDesc *desc)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4510
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4511
	u32 opts1 = le32_to_cpu(desc->opts1);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4512
	u32 status = opts1 & RxProtoMask;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4513
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4514
	if (((status == RxProtoTCP) && !(opts1 & TCPFail)) ||
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4515
	    ((status == RxProtoUDP) && !(opts1 & UDPFail)) ||
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4516
	    ((status == RxProtoIP) && !(opts1 & IPFail)))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4517
		skb->ip_summed = CHECKSUM_UNNECESSARY;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4518
	else
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4519
		skb->ip_summed = CHECKSUM_NONE;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4520
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4521
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4522
static inline bool rtl8169_try_rx_copy(struct sk_buff **sk_buff,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4523
				       struct rtl8169_private *tp, int pkt_size,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4524
				       dma_addr_t addr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4525
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4526
	struct sk_buff *skb;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4527
	bool done = false;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4528
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4529
	if (pkt_size >= rx_copybreak)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4530
		goto out;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4531
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4532
	skb = netdev_alloc_skb_ip_align(tp->dev, pkt_size);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4533
	if (!skb)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4534
		goto out;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4535
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4536
	dma_sync_single_for_cpu(&tp->pci_dev->dev, addr, pkt_size,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4537
				PCI_DMA_FROMDEVICE);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4538
	skb_copy_from_linear_data(*sk_buff, skb->data, pkt_size);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4539
	*sk_buff = skb;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4540
	done = true;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4541
out:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4542
	return done;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4543
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4544
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4545
/*
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4546
 * Warning : rtl8169_rx_interrupt() might be called :
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4547
 * 1) from NAPI (softirq) context
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4548
 *	(polling = 1 : we should call netif_receive_skb())
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4549
 * 2) from process context (rtl8169_reset_task())
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4550
 *	(polling = 0 : we must call netif_rx() instead)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4551
 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4552
static int rtl8169_rx_interrupt(struct net_device *dev,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4553
				struct rtl8169_private *tp,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4554
				void __iomem *ioaddr, u32 budget)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4555
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4556
	unsigned int cur_rx, rx_left;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4557
	unsigned int delta, count;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4558
	int polling = (budget != ~(u32)0) ? 1 : 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4559
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4560
	cur_rx = tp->cur_rx;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4561
	rx_left = NUM_RX_DESC + tp->dirty_rx - cur_rx;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4562
	rx_left = min(rx_left, budget);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4563
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4564
	for (; rx_left > 0; rx_left--, cur_rx++) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4565
		unsigned int entry = cur_rx % NUM_RX_DESC;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4566
		struct RxDesc *desc = tp->RxDescArray + entry;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4567
		u32 status;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4568
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4569
		rmb();
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4570
		status = le32_to_cpu(desc->opts1);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4571
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4572
		if (status & DescOwn)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4573
			break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4574
		if (unlikely(status & RxRES)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4575
			netif_info(tp, rx_err, dev, "Rx ERROR. status = %08x\n",
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4576
				   status);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4577
			dev->stats.rx_errors++;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4578
			if (status & (RxRWT | RxRUNT))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4579
				dev->stats.rx_length_errors++;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4580
			if (status & RxCRC)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4581
				dev->stats.rx_crc_errors++;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4582
			if (status & RxFOVF) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4583
				if (!tp->ecdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4584
					rtl8169_schedule_work(dev, rtl8169_reset_task);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4585
				dev->stats.rx_fifo_errors++;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4586
			}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4587
			rtl8169_mark_to_asic(desc, tp->rx_buf_sz);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4588
		} else {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4589
			struct sk_buff *skb = tp->Rx_skbuff[entry];
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4590
			dma_addr_t addr = le64_to_cpu(desc->addr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4591
			int pkt_size = (status & 0x00001FFF) - 4;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4592
			struct pci_dev *pdev = tp->pci_dev;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4593
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4594
			/*
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4595
			 * The driver does not support incoming fragmented
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4596
			 * frames. They are seen as a symptom of over-mtu
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4597
			 * sized frames.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4598
			 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4599
			if (unlikely(rtl8169_fragmented_frame(status))) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4600
				dev->stats.rx_dropped++;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4601
				dev->stats.rx_length_errors++;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4602
				rtl8169_mark_to_asic(desc, tp->rx_buf_sz);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4603
				continue;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4604
			}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4605
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4606
			rtl8169_rx_csum(skb, desc);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4607
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4608
			if (tp->ecdev) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4609
				pci_dma_sync_single_for_cpu(pdev, addr, pkt_size,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4610
						PCI_DMA_FROMDEVICE);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4611
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4612
				ecdev_receive(tp->ecdev, skb->data, pkt_size);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4613
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4614
				pci_dma_sync_single_for_device(pdev, addr,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4615
					pkt_size, PCI_DMA_FROMDEVICE);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4616
				rtl8169_mark_to_asic(desc, tp->rx_buf_sz);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4617
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4618
				// No need to detect link status as
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4619
				// long as frames are received: Reset watchdog.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4620
				tp->ec_watchdog_jiffies = jiffies;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4621
			} else {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4622
				if (rtl8169_try_rx_copy(&skb, tp, pkt_size, addr)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4623
					dma_sync_single_for_device(&pdev->dev, addr,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4624
						pkt_size, PCI_DMA_FROMDEVICE);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4625
					rtl8169_mark_to_asic(desc, tp->rx_buf_sz);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4626
				} else {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4627
					dma_unmap_single(&pdev->dev, addr, tp->rx_buf_sz,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4628
							 PCI_DMA_FROMDEVICE);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4629
					tp->Rx_skbuff[entry] = NULL;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4630
				}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4631
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4632
				skb_put(skb, pkt_size);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4633
				skb->protocol = eth_type_trans(skb, dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4634
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4635
				if (rtl8169_rx_vlan_skb(tp, desc, skb, polling) < 0) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4636
					if (likely(polling))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4637
						netif_receive_skb(skb);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4638
					else
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4639
						netif_rx(skb);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4640
                }
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4641
			}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4642
			dev->stats.rx_bytes += pkt_size;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4643
			dev->stats.rx_packets++;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4644
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4645
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4646
		/* Work around for AMD plateform. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4647
		if ((desc->opts2 & cpu_to_le32(0xfffe000)) &&
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4648
		    (tp->mac_version == RTL_GIGA_MAC_VER_05)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4649
			desc->opts2 = 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4650
			cur_rx++;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4651
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4652
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4653
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4654
	count = cur_rx - tp->cur_rx;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4655
	tp->cur_rx = cur_rx;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4656
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4657
	if (tp->ecdev) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4658
		/* descriptors are cleaned up immediately. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4659
		tp->dirty_rx = tp->cur_rx;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4660
	} else {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4661
		delta = rtl8169_rx_fill(tp, dev, tp->dirty_rx, tp->cur_rx, GFP_ATOMIC);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4662
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4663
		if (!delta && count)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4664
			netif_info(tp, intr, dev, "no Rx buffer allocated\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4665
		tp->dirty_rx += delta;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4666
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4667
		/*
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4668
		 * FIXME: until there is periodic timer to try and refill the ring,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4669
		 * a temporary shortage may definitely kill the Rx process.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4670
		 * - disable the asic to try and avoid an overflow and kick it again
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4671
		 *   after refill ?
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4672
		 * - how do others driver handle this condition (Uh oh...).
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4673
		 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4674
		if (tp->dirty_rx + NUM_RX_DESC == tp->cur_rx)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4675
			netif_emerg(tp, intr, dev, "Rx buffers exhausted\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4676
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4677
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4678
	return count;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4679
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4680
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4681
static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4682
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4683
	struct net_device *dev = dev_instance;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4684
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4685
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4686
	int handled = 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4687
	int status;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4688
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4689
	/* loop handling interrupts until we have no new ones or
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4690
	 * we hit a invalid/hotplug case.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4691
	 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4692
	status = RTL_R16(IntrStatus);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4693
	while (status && status != 0xffff) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4694
		handled = 1;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4695
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4696
		/* Handle all of the error cases first. These will reset
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4697
		 * the chip, so just exit the loop.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4698
		 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4699
		if (unlikely(!tp->ecdev && !netif_running(dev))) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4700
			rtl8169_asic_down(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4701
			break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4702
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4703
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4704
		/* Work around for rx fifo overflow */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4705
		if (unlikely(status & RxFIFOOver)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4706
			netif_stop_queue(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4707
			rtl8169_tx_timeout(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4708
			break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4709
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4710
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4711
		if (unlikely(status & SYSErr)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4712
			rtl8169_pcierr_interrupt(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4713
			break;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4714
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4715
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4716
		if (status & LinkChg)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4717
			rtl8169_check_link_status(dev, tp, ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4718
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4719
		/* We need to see the lastest version of tp->intr_mask to
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4720
		 * avoid ignoring an MSI interrupt and having to wait for
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4721
		 * another event which may never come.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4722
		 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4723
		smp_rmb();
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4724
		if (status & tp->intr_mask & tp->napi_event) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4725
			RTL_W16(IntrMask, tp->intr_event & ~tp->napi_event);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4726
			tp->intr_mask = ~tp->napi_event;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4727
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4728
			if (likely(napi_schedule_prep(&tp->napi)))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4729
				__napi_schedule(&tp->napi);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4730
			else
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4731
				netif_info(tp, intr, dev,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4732
					   "interrupt %04x in poll\n", status);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4733
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4734
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4735
		/* We only get a new MSI interrupt when all active irq
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4736
		 * sources on the chip have been acknowledged. So, ack
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4737
		 * everything we've seen and check if new sources have become
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4738
		 * active to avoid blocking all interrupts from the chip.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4739
		 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4740
		RTL_W16(IntrStatus,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4741
			(status & RxFIFOOver) ? (status | RxOverflow) : status);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4742
		status = RTL_R16(IntrStatus);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4743
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4744
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4745
	return IRQ_RETVAL(handled);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4746
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4747
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4748
static void ec_poll(struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4749
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4750
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4751
	struct pci_dev *pdev = tp->pci_dev;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4752
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4753
	rtl8169_interrupt(pdev->irq, dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4754
	rtl8169_rx_interrupt(dev, tp, tp->mmio_addr, 100); // FIXME
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4755
	rtl8169_tx_interrupt(dev, tp, tp->mmio_addr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4756
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4757
    if (jiffies - tp->ec_watchdog_jiffies >= 2 * HZ) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4758
		rtl8169_phy_timer((unsigned long) dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4759
		tp->ec_watchdog_jiffies = jiffies;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4760
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4761
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4762
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4763
static int rtl8169_poll(struct napi_struct *napi, int budget)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4764
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4765
	struct rtl8169_private *tp = container_of(napi, struct rtl8169_private, napi);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4766
	struct net_device *dev = tp->dev;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4767
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4768
	int work_done;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4769
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4770
	work_done = rtl8169_rx_interrupt(dev, tp, ioaddr, (u32) budget);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4771
	rtl8169_tx_interrupt(dev, tp, ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4772
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4773
	if (work_done < budget) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4774
		napi_complete(napi);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4775
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4776
		/* We need for force the visibility of tp->intr_mask
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4777
		 * for other CPUs, as we can loose an MSI interrupt
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4778
		 * and potentially wait for a retransmit timeout if we don't.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4779
		 * The posted write to IntrMask is safe, as it will
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4780
		 * eventually make it to the chip and we won't loose anything
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4781
		 * until it does.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4782
		 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4783
		tp->intr_mask = 0xffff;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4784
		wmb();
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4785
		RTL_W16(IntrMask, tp->intr_event);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4786
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4787
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4788
	return work_done;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4789
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4790
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4791
static void rtl8169_rx_missed(struct net_device *dev, void __iomem *ioaddr)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4792
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4793
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4794
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4795
	if (tp->mac_version > RTL_GIGA_MAC_VER_06)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4796
		return;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4797
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4798
	dev->stats.rx_missed_errors += (RTL_R32(RxMissed) & 0xffffff);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4799
	RTL_W32(RxMissed, 0);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4800
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4801
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4802
static void rtl8169_down(struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4803
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4804
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4805
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4806
	unsigned int intrmask;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4807
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4808
	rtl8169_delete_timer(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4809
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4810
	if (!tp->ecdev) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4811
		netif_stop_queue(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4812
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4813
		napi_disable(&tp->napi);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4814
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4815
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4816
core_down:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4817
	if (!tp->ecdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4818
		spin_lock_irq(&tp->lock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4819
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4820
	rtl8169_asic_down(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4821
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4822
	rtl8169_rx_missed(dev, ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4823
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4824
	if (!tp->ecdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4825
		spin_unlock_irq(&tp->lock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4826
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4827
	if (!tp->ecdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4828
		synchronize_irq(dev->irq);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4829
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4830
	/* Give a racing hard_start_xmit a few cycles to complete. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4831
	synchronize_sched();  /* FIXME: should this be synchronize_irq()? */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4832
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4833
	/*
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4834
	 * And now for the 50k$ question: are IRQ disabled or not ?
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4835
	 *
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4836
	 * Two paths lead here:
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4837
	 * 1) dev->close
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4838
	 *    -> netif_running() is available to sync the current code and the
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4839
	 *       IRQ handler. See rtl8169_interrupt for details.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4840
	 * 2) dev->change_mtu
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4841
	 *    -> rtl8169_poll can not be issued again and re-enable the
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4842
	 *       interruptions. Let's simply issue the IRQ down sequence again.
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4843
	 *
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4844
	 * No loop if hotpluged or major error (0xffff).
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4845
	 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4846
	intrmask = RTL_R16(IntrMask);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4847
	if (intrmask && (intrmask != 0xffff))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4848
		goto core_down;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4849
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4850
	rtl8169_tx_clear(tp);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4851
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4852
	rtl8169_rx_clear(tp);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4853
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4854
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4855
static int rtl8169_close(struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4856
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4857
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4858
	struct pci_dev *pdev = tp->pci_dev;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4859
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4860
	if(!tp->ecdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4861
		pm_runtime_get_sync(&pdev->dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4862
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4863
	/* update counters before going down */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4864
	rtl8169_update_counters(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4865
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4866
	rtl8169_down(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4867
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4868
	if (!tp->ecdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4869
		free_irq(dev->irq, dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4870
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4871
	dma_free_coherent(&pdev->dev, R8169_RX_RING_BYTES, tp->RxDescArray,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4872
			  tp->RxPhyAddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4873
	dma_free_coherent(&pdev->dev, R8169_TX_RING_BYTES, tp->TxDescArray,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4874
			  tp->TxPhyAddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4875
	tp->TxDescArray = NULL;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4876
	tp->RxDescArray = NULL;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4877
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4878
	if(!tp->ecdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4879
		pm_runtime_put_sync(&pdev->dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4880
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4881
	return 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4882
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4883
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4884
static void rtl_set_rx_mode(struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4885
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4886
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4887
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4888
	unsigned long flags;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4889
	u32 mc_filter[2];	/* Multicast hash filter */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4890
	int rx_mode;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4891
	u32 tmp = 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4892
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4893
	if (dev->flags & IFF_PROMISC) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4894
		/* Unconditionally log net taps. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4895
		netif_notice(tp, link, dev, "Promiscuous mode enabled\n");
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4896
		rx_mode =
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4897
		    AcceptBroadcast | AcceptMulticast | AcceptMyPhys |
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4898
		    AcceptAllPhys;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4899
		mc_filter[1] = mc_filter[0] = 0xffffffff;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4900
	} else if ((netdev_mc_count(dev) > multicast_filter_limit) ||
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4901
		   (dev->flags & IFF_ALLMULTI)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4902
		/* Too many to filter perfectly -- accept all multicasts. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4903
		rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4904
		mc_filter[1] = mc_filter[0] = 0xffffffff;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4905
	} else {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4906
		struct netdev_hw_addr *ha;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4907
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4908
		rx_mode = AcceptBroadcast | AcceptMyPhys;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4909
		mc_filter[1] = mc_filter[0] = 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4910
		netdev_for_each_mc_addr(ha, dev) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4911
			int bit_nr = ether_crc(ETH_ALEN, ha->addr) >> 26;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4912
			mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4913
			rx_mode |= AcceptMulticast;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4914
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4915
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4916
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4917
	spin_lock_irqsave(&tp->lock, flags);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4918
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4919
	tmp = rtl8169_rx_config | rx_mode |
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4920
	      (RTL_R32(RxConfig) & rtl_chip_info[tp->chipset].RxConfigMask);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4921
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4922
	if (tp->mac_version > RTL_GIGA_MAC_VER_06) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4923
		u32 data = mc_filter[0];
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4924
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4925
		mc_filter[0] = swab32(mc_filter[1]);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4926
		mc_filter[1] = swab32(data);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4927
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4928
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4929
	RTL_W32(MAR0 + 4, mc_filter[1]);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4930
	RTL_W32(MAR0 + 0, mc_filter[0]);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4931
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4932
	RTL_W32(RxConfig, tmp);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4933
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4934
	spin_unlock_irqrestore(&tp->lock, flags);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4935
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4936
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4937
/**
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4938
 *  rtl8169_get_stats - Get rtl8169 read/write statistics
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4939
 *  @dev: The Ethernet Device to get statistics for
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4940
 *
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4941
 *  Get TX/RX statistics for rtl8169
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4942
 */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4943
static struct net_device_stats *rtl8169_get_stats(struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4944
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4945
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4946
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4947
	unsigned long flags;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4948
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4949
	if (netif_running(dev)) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4950
		spin_lock_irqsave(&tp->lock, flags);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4951
		rtl8169_rx_missed(dev, ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4952
		spin_unlock_irqrestore(&tp->lock, flags);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4953
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4954
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4955
	return &dev->stats;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4956
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4957
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4958
static void rtl8169_net_suspend(struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4959
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4960
	if (!netif_running(dev))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4961
		return;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4962
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4963
	netif_device_detach(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4964
	netif_stop_queue(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4965
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4966
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4967
#ifdef CONFIG_PM
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4968
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4969
static int rtl8169_suspend(struct device *device)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4970
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4971
	struct pci_dev *pdev = to_pci_dev(device);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4972
	struct net_device *dev = pci_get_drvdata(pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4973
	struct rtl8169_private *tp = netdev_priv(dev);
2421
bc2d4bf9cbe5 Removed trailing spaces.
Florian Pose <fp@igh-essen.com>
parents: 2401
diff changeset
  4974
2401
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4975
	if (tp->ecdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4976
 		return -EBUSY;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4977
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4978
	rtl8169_net_suspend(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4979
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4980
	return 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4981
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4982
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4983
static void __rtl8169_resume(struct net_device *dev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4984
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4985
	netif_device_attach(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4986
	rtl8169_schedule_work(dev, rtl8169_reset_task);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4987
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4988
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4989
static int rtl8169_resume(struct device *device)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4990
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4991
	struct pci_dev *pdev = to_pci_dev(device);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4992
	struct net_device *dev = pci_get_drvdata(pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4993
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4994
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4995
	if (tp->ecdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4996
		return -EBUSY;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4997
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4998
	if (netif_running(dev))
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  4999
		__rtl8169_resume(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5000
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5001
	return 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5002
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5003
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5004
static int rtl8169_runtime_suspend(struct device *device)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5005
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5006
	struct pci_dev *pdev = to_pci_dev(device);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5007
	struct net_device *dev = pci_get_drvdata(pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5008
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5009
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5010
	if (!tp->TxDescArray)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5011
		return 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5012
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5013
	spin_lock_irq(&tp->lock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5014
	tp->saved_wolopts = __rtl8169_get_wol(tp);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5015
	__rtl8169_set_wol(tp, WAKE_ANY);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5016
	spin_unlock_irq(&tp->lock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5017
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5018
	rtl8169_net_suspend(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5019
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5020
	return 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5021
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5022
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5023
static int rtl8169_runtime_resume(struct device *device)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5024
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5025
	struct pci_dev *pdev = to_pci_dev(device);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5026
	struct net_device *dev = pci_get_drvdata(pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5027
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5028
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5029
	if (!tp->TxDescArray)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5030
		return 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5031
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5032
	spin_lock_irq(&tp->lock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5033
	__rtl8169_set_wol(tp, tp->saved_wolopts);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5034
	tp->saved_wolopts = 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5035
	spin_unlock_irq(&tp->lock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5036
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5037
	__rtl8169_resume(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5038
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5039
	return 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5040
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5041
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5042
static int rtl8169_runtime_idle(struct device *device)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5043
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5044
	struct pci_dev *pdev = to_pci_dev(device);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5045
	struct net_device *dev = pci_get_drvdata(pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5046
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5047
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5048
	if (!tp->TxDescArray)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5049
		return 0;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5050
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5051
	rtl8169_check_link_status(dev, tp, tp->mmio_addr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5052
	return -EBUSY;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5053
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5054
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5055
static const struct dev_pm_ops rtl8169_pm_ops = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5056
	.suspend = rtl8169_suspend,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5057
	.resume = rtl8169_resume,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5058
	.freeze = rtl8169_suspend,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5059
	.thaw = rtl8169_resume,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5060
	.poweroff = rtl8169_suspend,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5061
	.restore = rtl8169_resume,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5062
	.runtime_suspend = rtl8169_runtime_suspend,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5063
	.runtime_resume = rtl8169_runtime_resume,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5064
	.runtime_idle = rtl8169_runtime_idle,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5065
};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5066
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5067
#define RTL8169_PM_OPS	(&rtl8169_pm_ops)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5068
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5069
#else /* !CONFIG_PM */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5070
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5071
#define RTL8169_PM_OPS	NULL
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5072
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5073
#endif /* !CONFIG_PM */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5074
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5075
static void rtl_shutdown(struct pci_dev *pdev)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5076
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5077
	struct net_device *dev = pci_get_drvdata(pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5078
	struct rtl8169_private *tp = netdev_priv(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5079
	void __iomem *ioaddr = tp->mmio_addr;
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5080
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5081
	rtl8169_net_suspend(dev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5082
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5083
	/* restore original MAC address */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5084
	rtl_rar_set(tp, dev->perm_addr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5085
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5086
	spin_lock_irq(&tp->lock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5087
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5088
	rtl8169_asic_down(ioaddr);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5089
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5090
	spin_unlock_irq(&tp->lock);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5091
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5092
	if (system_state == SYSTEM_POWER_OFF) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5093
		/* WoL fails with some 8168 when the receiver is disabled. */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5094
		if (tp->features & RTL_FEATURE_WOL) {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5095
			pci_clear_master(pdev);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5096
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5097
			RTL_W8(ChipCmd, CmdRxEnb);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5098
			/* PCI commit */
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5099
			RTL_R8(ChipCmd);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5100
		}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5101
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5102
		pci_wake_from_d3(pdev, true);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5103
		pci_set_power_state(pdev, PCI_D3hot);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5104
	}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5105
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5106
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5107
static struct pci_driver rtl8169_pci_driver = {
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5108
	.name		= MODULENAME,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5109
	.id_table	= rtl8169_pci_tbl,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5110
	.probe		= rtl8169_init_one,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5111
	.remove		= __devexit_p(rtl8169_remove_one),
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5112
	.shutdown	= rtl_shutdown,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5113
	.driver.pm	= RTL8169_PM_OPS,
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5114
};
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5115
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5116
static int __init rtl8169_init_module(void)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5117
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5118
	return pci_register_driver(&rtl8169_pci_driver);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5119
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5120
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5121
static void __exit rtl8169_cleanup_module(void)
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5122
{
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5123
	pci_unregister_driver(&rtl8169_pci_driver);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5124
}
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5125
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5126
module_init(rtl8169_init_module);
7f7580b318c3 Added r8169 driver for 2.6.36, thanks to J. Kunz.
Florian Pose <fp@igh-essen.com>
parents:
diff changeset
  5127
module_exit(rtl8169_cleanup_module);