devices/r8169-2.6.33-orig.c
author Patrick Bruenn <p.bruenn@beckhoff.com>
Tue, 12 Apr 2016 11:17:36 +0200
branchstable-1.5
changeset 2654 b3f6b3e5ef29
parent 2201 7aeb32a5bb6d
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.
2201
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
     1
/*
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
     2
 * r8169.c: RealTek 8169/8168/8101 ethernet driver.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
     3
 *
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
     4
 * Copyright (c) 2002 ShuChen <shuchen@realtek.com.tw>
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
     5
 * Copyright (c) 2003 - 2007 Francois Romieu <romieu@fr.zoreil.com>
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
     6
 * Copyright (c) a lot of people too. Please respect their work.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
     7
 *
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
     8
 * See MAINTAINERS file for support contact information.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
     9
 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    10
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    11
#include <linux/module.h>
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    12
#include <linux/moduleparam.h>
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    13
#include <linux/pci.h>
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    14
#include <linux/netdevice.h>
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    15
#include <linux/etherdevice.h>
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    16
#include <linux/delay.h>
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    17
#include <linux/ethtool.h>
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    18
#include <linux/mii.h>
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    19
#include <linux/if_vlan.h>
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    20
#include <linux/crc32.h>
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    21
#include <linux/in.h>
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    22
#include <linux/ip.h>
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    23
#include <linux/tcp.h>
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    24
#include <linux/init.h>
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    25
#include <linux/dma-mapping.h>
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    26
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    27
#include <asm/system.h>
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    28
#include <asm/io.h>
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    29
#include <asm/irq.h>
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    30
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    31
#define RTL8169_VERSION "2.3LK-NAPI"
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    32
#define MODULENAME "r8169"
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    33
#define PFX MODULENAME ": "
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    34
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    35
#ifdef RTL8169_DEBUG
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    36
#define assert(expr) \
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    37
	if (!(expr)) {					\
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    38
		printk( "Assertion failed! %s,%s,%s,line=%d\n",	\
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    39
		#expr,__FILE__,__func__,__LINE__);		\
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    40
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    41
#define dprintk(fmt, args...) \
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    42
	do { printk(KERN_DEBUG PFX fmt, ## args); } while (0)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    43
#else
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    44
#define assert(expr) do {} while (0)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    45
#define dprintk(fmt, args...)	do {} while (0)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    46
#endif /* RTL8169_DEBUG */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    47
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    48
#define R8169_MSG_DEFAULT \
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    49
	(NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_IFUP | NETIF_MSG_IFDOWN)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    50
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    51
#define TX_BUFFS_AVAIL(tp) \
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    52
	(tp->dirty_tx + NUM_TX_DESC - tp->cur_tx - 1)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    53
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    54
/* Maximum number of multicast addresses to filter (vs. Rx-all-multicast).
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    55
   The RTL chips use a 64 element hash table based on the Ethernet CRC. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    56
static const int multicast_filter_limit = 32;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    57
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    58
/* MAC address length */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    59
#define MAC_ADDR_LEN	6
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    60
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    61
#define MAX_READ_REQUEST_SHIFT	12
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    62
#define RX_FIFO_THRESH	7	/* 7 means NO threshold, Rx buffer level before first PCI xfer. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    63
#define RX_DMA_BURST	6	/* Maximum PCI burst, '6' is 1024 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    64
#define TX_DMA_BURST	6	/* Maximum PCI burst, '6' is 1024 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    65
#define EarlyTxThld	0x3F	/* 0x3F means NO early transmit */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    66
#define SafeMtu		0x1c20	/* ... actually life sucks beyond ~7k */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    67
#define InterFrameGap	0x03	/* 3 means InterFrameGap = the shortest one */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    68
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    69
#define R8169_REGS_SIZE		256
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    70
#define R8169_NAPI_WEIGHT	64
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    71
#define NUM_TX_DESC	64	/* Number of Tx descriptor registers */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    72
#define NUM_RX_DESC	256	/* Number of Rx descriptor registers */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    73
#define RX_BUF_SIZE	1536	/* Rx Buffer size */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    74
#define R8169_TX_RING_BYTES	(NUM_TX_DESC * sizeof(struct TxDesc))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    75
#define R8169_RX_RING_BYTES	(NUM_RX_DESC * sizeof(struct RxDesc))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    76
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    77
#define RTL8169_TX_TIMEOUT	(6*HZ)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    78
#define RTL8169_PHY_TIMEOUT	(10*HZ)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    79
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    80
#define RTL_EEPROM_SIG		cpu_to_le32(0x8129)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    81
#define RTL_EEPROM_SIG_MASK	cpu_to_le32(0xffff)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    82
#define RTL_EEPROM_SIG_ADDR	0x0000
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    83
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    84
/* write/read MMIO register */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    85
#define RTL_W8(reg, val8)	writeb ((val8), ioaddr + (reg))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    86
#define RTL_W16(reg, val16)	writew ((val16), ioaddr + (reg))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    87
#define RTL_W32(reg, val32)	writel ((val32), ioaddr + (reg))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    88
#define RTL_R8(reg)		readb (ioaddr + (reg))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    89
#define RTL_R16(reg)		readw (ioaddr + (reg))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    90
#define RTL_R32(reg)		((unsigned long) readl (ioaddr + (reg)))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    91
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    92
enum mac_version {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    93
	RTL_GIGA_MAC_NONE   = 0x00,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    94
	RTL_GIGA_MAC_VER_01 = 0x01, // 8169
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    95
	RTL_GIGA_MAC_VER_02 = 0x02, // 8169S
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    96
	RTL_GIGA_MAC_VER_03 = 0x03, // 8110S
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    97
	RTL_GIGA_MAC_VER_04 = 0x04, // 8169SB
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    98
	RTL_GIGA_MAC_VER_05 = 0x05, // 8110SCd
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    99
	RTL_GIGA_MAC_VER_06 = 0x06, // 8110SCe
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   100
	RTL_GIGA_MAC_VER_07 = 0x07, // 8102e
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   101
	RTL_GIGA_MAC_VER_08 = 0x08, // 8102e
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   102
	RTL_GIGA_MAC_VER_09 = 0x09, // 8102e
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   103
	RTL_GIGA_MAC_VER_10 = 0x0a, // 8101e
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   104
	RTL_GIGA_MAC_VER_11 = 0x0b, // 8168Bb
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   105
	RTL_GIGA_MAC_VER_12 = 0x0c, // 8168Be
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   106
	RTL_GIGA_MAC_VER_13 = 0x0d, // 8101Eb
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   107
	RTL_GIGA_MAC_VER_14 = 0x0e, // 8101 ?
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   108
	RTL_GIGA_MAC_VER_15 = 0x0f, // 8101 ?
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   109
	RTL_GIGA_MAC_VER_16 = 0x11, // 8101Ec
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   110
	RTL_GIGA_MAC_VER_17 = 0x10, // 8168Bf
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   111
	RTL_GIGA_MAC_VER_18 = 0x12, // 8168CP
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   112
	RTL_GIGA_MAC_VER_19 = 0x13, // 8168C
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   113
	RTL_GIGA_MAC_VER_20 = 0x14, // 8168C
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   114
	RTL_GIGA_MAC_VER_21 = 0x15, // 8168C
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   115
	RTL_GIGA_MAC_VER_22 = 0x16, // 8168C
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   116
	RTL_GIGA_MAC_VER_23 = 0x17, // 8168CP
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   117
	RTL_GIGA_MAC_VER_24 = 0x18, // 8168CP
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   118
	RTL_GIGA_MAC_VER_25 = 0x19, // 8168D
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   119
	RTL_GIGA_MAC_VER_26 = 0x1a, // 8168D
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   120
	RTL_GIGA_MAC_VER_27 = 0x1b  // 8168DP
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   121
};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   122
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   123
#define _R(NAME,MAC,MASK) \
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   124
	{ .name = NAME, .mac_version = MAC, .RxConfigMask = MASK }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   125
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   126
static const struct {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   127
	const char *name;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   128
	u8 mac_version;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   129
	u32 RxConfigMask;	/* Clears the bits supported by this chip */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   130
} rtl_chip_info[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   131
	_R("RTL8169",		RTL_GIGA_MAC_VER_01, 0xff7e1880), // 8169
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   132
	_R("RTL8169s",		RTL_GIGA_MAC_VER_02, 0xff7e1880), // 8169S
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   133
	_R("RTL8110s",		RTL_GIGA_MAC_VER_03, 0xff7e1880), // 8110S
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   134
	_R("RTL8169sb/8110sb",	RTL_GIGA_MAC_VER_04, 0xff7e1880), // 8169SB
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   135
	_R("RTL8169sc/8110sc",	RTL_GIGA_MAC_VER_05, 0xff7e1880), // 8110SCd
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   136
	_R("RTL8169sc/8110sc",	RTL_GIGA_MAC_VER_06, 0xff7e1880), // 8110SCe
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   137
	_R("RTL8102e",		RTL_GIGA_MAC_VER_07, 0xff7e1880), // PCI-E
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   138
	_R("RTL8102e",		RTL_GIGA_MAC_VER_08, 0xff7e1880), // PCI-E
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   139
	_R("RTL8102e",		RTL_GIGA_MAC_VER_09, 0xff7e1880), // PCI-E
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   140
	_R("RTL8101e",		RTL_GIGA_MAC_VER_10, 0xff7e1880), // PCI-E
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   141
	_R("RTL8168b/8111b",	RTL_GIGA_MAC_VER_11, 0xff7e1880), // PCI-E
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   142
	_R("RTL8168b/8111b",	RTL_GIGA_MAC_VER_12, 0xff7e1880), // PCI-E
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   143
	_R("RTL8101e",		RTL_GIGA_MAC_VER_13, 0xff7e1880), // PCI-E 8139
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   144
	_R("RTL8100e",		RTL_GIGA_MAC_VER_14, 0xff7e1880), // PCI-E 8139
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   145
	_R("RTL8100e",		RTL_GIGA_MAC_VER_15, 0xff7e1880), // PCI-E 8139
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   146
	_R("RTL8168b/8111b",	RTL_GIGA_MAC_VER_17, 0xff7e1880), // PCI-E
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   147
	_R("RTL8101e",		RTL_GIGA_MAC_VER_16, 0xff7e1880), // PCI-E
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   148
	_R("RTL8168cp/8111cp",	RTL_GIGA_MAC_VER_18, 0xff7e1880), // PCI-E
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   149
	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_19, 0xff7e1880), // PCI-E
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   150
	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_20, 0xff7e1880), // PCI-E
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   151
	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_21, 0xff7e1880), // PCI-E
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   152
	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_22, 0xff7e1880), // PCI-E
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   153
	_R("RTL8168cp/8111cp",	RTL_GIGA_MAC_VER_23, 0xff7e1880), // PCI-E
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   154
	_R("RTL8168cp/8111cp",	RTL_GIGA_MAC_VER_24, 0xff7e1880), // PCI-E
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   155
	_R("RTL8168d/8111d",	RTL_GIGA_MAC_VER_25, 0xff7e1880), // PCI-E
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   156
	_R("RTL8168d/8111d",	RTL_GIGA_MAC_VER_26, 0xff7e1880), // PCI-E
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   157
	_R("RTL8168dp/8111dp",	RTL_GIGA_MAC_VER_27, 0xff7e1880)  // PCI-E
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   158
};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   159
#undef _R
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   160
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   161
enum cfg_version {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   162
	RTL_CFG_0 = 0x00,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   163
	RTL_CFG_1,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   164
	RTL_CFG_2
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   165
};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   166
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   167
static void rtl_hw_start_8169(struct net_device *);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   168
static void rtl_hw_start_8168(struct net_device *);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   169
static void rtl_hw_start_8101(struct net_device *);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   170
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   171
static struct pci_device_id rtl8169_pci_tbl[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   172
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8129), 0, 0, RTL_CFG_0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   173
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8136), 0, 0, RTL_CFG_2 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   174
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8167), 0, 0, RTL_CFG_0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   175
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8168), 0, 0, RTL_CFG_1 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   176
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8169), 0, 0, RTL_CFG_0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   177
	{ PCI_DEVICE(PCI_VENDOR_ID_DLINK,	0x4300), 0, 0, RTL_CFG_0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   178
	{ PCI_DEVICE(PCI_VENDOR_ID_AT,		0xc107), 0, 0, RTL_CFG_0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   179
	{ PCI_DEVICE(0x16ec,			0x0116), 0, 0, RTL_CFG_0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   180
	{ PCI_VENDOR_ID_LINKSYS,		0x1032,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   181
		PCI_ANY_ID, 0x0024, 0, 0, RTL_CFG_0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   182
	{ 0x0001,				0x8168,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   183
		PCI_ANY_ID, 0x2410, 0, 0, RTL_CFG_2 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   184
	{0,},
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   185
};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   186
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   187
MODULE_DEVICE_TABLE(pci, rtl8169_pci_tbl);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   188
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   189
/*
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   190
 * we set our copybreak very high so that we don't have
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   191
 * to allocate 16k frames all the time (see note in
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   192
 * rtl8169_open()
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   193
 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   194
static int rx_copybreak = 16383;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   195
static int use_dac;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   196
static struct {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   197
	u32 msg_enable;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   198
} debug = { -1 };
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   199
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   200
enum rtl_registers {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   201
	MAC0		= 0,	/* Ethernet hardware address. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   202
	MAC4		= 4,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   203
	MAR0		= 8,	/* Multicast filter. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   204
	CounterAddrLow		= 0x10,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   205
	CounterAddrHigh		= 0x14,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   206
	TxDescStartAddrLow	= 0x20,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   207
	TxDescStartAddrHigh	= 0x24,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   208
	TxHDescStartAddrLow	= 0x28,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   209
	TxHDescStartAddrHigh	= 0x2c,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   210
	FLASH		= 0x30,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   211
	ERSR		= 0x36,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   212
	ChipCmd		= 0x37,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   213
	TxPoll		= 0x38,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   214
	IntrMask	= 0x3c,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   215
	IntrStatus	= 0x3e,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   216
	TxConfig	= 0x40,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   217
	RxConfig	= 0x44,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   218
	RxMissed	= 0x4c,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   219
	Cfg9346		= 0x50,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   220
	Config0		= 0x51,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   221
	Config1		= 0x52,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   222
	Config2		= 0x53,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   223
	Config3		= 0x54,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   224
	Config4		= 0x55,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   225
	Config5		= 0x56,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   226
	MultiIntr	= 0x5c,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   227
	PHYAR		= 0x60,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   228
	PHYstatus	= 0x6c,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   229
	RxMaxSize	= 0xda,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   230
	CPlusCmd	= 0xe0,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   231
	IntrMitigate	= 0xe2,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   232
	RxDescAddrLow	= 0xe4,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   233
	RxDescAddrHigh	= 0xe8,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   234
	EarlyTxThres	= 0xec,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   235
	FuncEvent	= 0xf0,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   236
	FuncEventMask	= 0xf4,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   237
	FuncPresetState	= 0xf8,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   238
	FuncForceEvent	= 0xfc,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   239
};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   240
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   241
enum rtl8110_registers {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   242
	TBICSR			= 0x64,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   243
	TBI_ANAR		= 0x68,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   244
	TBI_LPAR		= 0x6a,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   245
};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   246
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   247
enum rtl8168_8101_registers {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   248
	CSIDR			= 0x64,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   249
	CSIAR			= 0x68,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   250
#define	CSIAR_FLAG			0x80000000
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   251
#define	CSIAR_WRITE_CMD			0x80000000
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   252
#define	CSIAR_BYTE_ENABLE		0x0f
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   253
#define	CSIAR_BYTE_ENABLE_SHIFT		12
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   254
#define	CSIAR_ADDR_MASK			0x0fff
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   255
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   256
	EPHYAR			= 0x80,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   257
#define	EPHYAR_FLAG			0x80000000
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   258
#define	EPHYAR_WRITE_CMD		0x80000000
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   259
#define	EPHYAR_REG_MASK			0x1f
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   260
#define	EPHYAR_REG_SHIFT		16
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   261
#define	EPHYAR_DATA_MASK		0xffff
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   262
	DBG_REG			= 0xd1,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   263
#define	FIX_NAK_1			(1 << 4)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   264
#define	FIX_NAK_2			(1 << 3)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   265
	EFUSEAR			= 0xdc,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   266
#define	EFUSEAR_FLAG			0x80000000
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   267
#define	EFUSEAR_WRITE_CMD		0x80000000
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   268
#define	EFUSEAR_READ_CMD		0x00000000
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   269
#define	EFUSEAR_REG_MASK		0x03ff
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   270
#define	EFUSEAR_REG_SHIFT		8
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   271
#define	EFUSEAR_DATA_MASK		0xff
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   272
};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   273
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   274
enum rtl_register_content {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   275
	/* InterruptStatusBits */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   276
	SYSErr		= 0x8000,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   277
	PCSTimeout	= 0x4000,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   278
	SWInt		= 0x0100,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   279
	TxDescUnavail	= 0x0080,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   280
	RxFIFOOver	= 0x0040,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   281
	LinkChg		= 0x0020,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   282
	RxOverflow	= 0x0010,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   283
	TxErr		= 0x0008,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   284
	TxOK		= 0x0004,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   285
	RxErr		= 0x0002,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   286
	RxOK		= 0x0001,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   287
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   288
	/* RxStatusDesc */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   289
	RxFOVF	= (1 << 23),
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   290
	RxRWT	= (1 << 22),
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   291
	RxRES	= (1 << 21),
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   292
	RxRUNT	= (1 << 20),
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   293
	RxCRC	= (1 << 19),
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   294
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   295
	/* ChipCmdBits */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   296
	CmdReset	= 0x10,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   297
	CmdRxEnb	= 0x08,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   298
	CmdTxEnb	= 0x04,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   299
	RxBufEmpty	= 0x01,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   300
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   301
	/* TXPoll register p.5 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   302
	HPQ		= 0x80,		/* Poll cmd on the high prio queue */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   303
	NPQ		= 0x40,		/* Poll cmd on the low prio queue */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   304
	FSWInt		= 0x01,		/* Forced software interrupt */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   305
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   306
	/* Cfg9346Bits */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   307
	Cfg9346_Lock	= 0x00,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   308
	Cfg9346_Unlock	= 0xc0,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   309
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   310
	/* rx_mode_bits */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   311
	AcceptErr	= 0x20,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   312
	AcceptRunt	= 0x10,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   313
	AcceptBroadcast	= 0x08,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   314
	AcceptMulticast	= 0x04,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   315
	AcceptMyPhys	= 0x02,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   316
	AcceptAllPhys	= 0x01,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   317
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   318
	/* RxConfigBits */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   319
	RxCfgFIFOShift	= 13,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   320
	RxCfgDMAShift	=  8,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   321
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   322
	/* TxConfigBits */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   323
	TxInterFrameGapShift = 24,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   324
	TxDMAShift = 8,	/* DMA burst value (0-7) is shift this many bits */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   325
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   326
	/* Config1 register p.24 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   327
	LEDS1		= (1 << 7),
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   328
	LEDS0		= (1 << 6),
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   329
	MSIEnable	= (1 << 5),	/* Enable Message Signaled Interrupt */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   330
	Speed_down	= (1 << 4),
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   331
	MEMMAP		= (1 << 3),
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   332
	IOMAP		= (1 << 2),
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   333
	VPD		= (1 << 1),
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   334
	PMEnable	= (1 << 0),	/* Power Management Enable */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   335
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   336
	/* Config2 register p. 25 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   337
	PCI_Clock_66MHz = 0x01,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   338
	PCI_Clock_33MHz = 0x00,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   339
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   340
	/* Config3 register p.25 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   341
	MagicPacket	= (1 << 5),	/* Wake up when receives a Magic Packet */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   342
	LinkUp		= (1 << 4),	/* Wake up when the cable connection is re-established */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   343
	Beacon_en	= (1 << 0),	/* 8168 only. Reserved in the 8168b */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   344
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   345
	/* Config5 register p.27 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   346
	BWF		= (1 << 6),	/* Accept Broadcast wakeup frame */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   347
	MWF		= (1 << 5),	/* Accept Multicast wakeup frame */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   348
	UWF		= (1 << 4),	/* Accept Unicast wakeup frame */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   349
	LanWake		= (1 << 1),	/* LanWake enable/disable */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   350
	PMEStatus	= (1 << 0),	/* PME status can be reset by PCI RST# */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   351
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   352
	/* TBICSR p.28 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   353
	TBIReset	= 0x80000000,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   354
	TBILoopback	= 0x40000000,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   355
	TBINwEnable	= 0x20000000,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   356
	TBINwRestart	= 0x10000000,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   357
	TBILinkOk	= 0x02000000,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   358
	TBINwComplete	= 0x01000000,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   359
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   360
	/* CPlusCmd p.31 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   361
	EnableBist	= (1 << 15),	// 8168 8101
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   362
	Mac_dbgo_oe	= (1 << 14),	// 8168 8101
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   363
	Normal_mode	= (1 << 13),	// unused
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   364
	Force_half_dup	= (1 << 12),	// 8168 8101
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   365
	Force_rxflow_en	= (1 << 11),	// 8168 8101
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   366
	Force_txflow_en	= (1 << 10),	// 8168 8101
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   367
	Cxpl_dbg_sel	= (1 << 9),	// 8168 8101
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   368
	ASF		= (1 << 8),	// 8168 8101
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   369
	PktCntrDisable	= (1 << 7),	// 8168 8101
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   370
	Mac_dbgo_sel	= 0x001c,	// 8168
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   371
	RxVlan		= (1 << 6),
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   372
	RxChkSum	= (1 << 5),
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   373
	PCIDAC		= (1 << 4),
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   374
	PCIMulRW	= (1 << 3),
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   375
	INTT_0		= 0x0000,	// 8168
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   376
	INTT_1		= 0x0001,	// 8168
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   377
	INTT_2		= 0x0002,	// 8168
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   378
	INTT_3		= 0x0003,	// 8168
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   379
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   380
	/* rtl8169_PHYstatus */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   381
	TBI_Enable	= 0x80,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   382
	TxFlowCtrl	= 0x40,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   383
	RxFlowCtrl	= 0x20,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   384
	_1000bpsF	= 0x10,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   385
	_100bps		= 0x08,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   386
	_10bps		= 0x04,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   387
	LinkStatus	= 0x02,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   388
	FullDup		= 0x01,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   389
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   390
	/* _TBICSRBit */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   391
	TBILinkOK	= 0x02000000,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   392
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   393
	/* DumpCounterCommand */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   394
	CounterDump	= 0x8,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   395
};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   396
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   397
enum desc_status_bit {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   398
	DescOwn		= (1 << 31), /* Descriptor is owned by NIC */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   399
	RingEnd		= (1 << 30), /* End of descriptor ring */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   400
	FirstFrag	= (1 << 29), /* First segment of a packet */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   401
	LastFrag	= (1 << 28), /* Final segment of a packet */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   402
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   403
	/* Tx private */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   404
	LargeSend	= (1 << 27), /* TCP Large Send Offload (TSO) */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   405
	MSSShift	= 16,        /* MSS value position */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   406
	MSSMask		= 0xfff,     /* MSS value + LargeSend bit: 12 bits */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   407
	IPCS		= (1 << 18), /* Calculate IP checksum */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   408
	UDPCS		= (1 << 17), /* Calculate UDP/IP checksum */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   409
	TCPCS		= (1 << 16), /* Calculate TCP/IP checksum */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   410
	TxVlanTag	= (1 << 17), /* Add VLAN tag */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   411
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   412
	/* Rx private */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   413
	PID1		= (1 << 18), /* Protocol ID bit 1/2 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   414
	PID0		= (1 << 17), /* Protocol ID bit 2/2 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   415
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   416
#define RxProtoUDP	(PID1)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   417
#define RxProtoTCP	(PID0)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   418
#define RxProtoIP	(PID1 | PID0)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   419
#define RxProtoMask	RxProtoIP
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   420
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   421
	IPFail		= (1 << 16), /* IP checksum failed */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   422
	UDPFail		= (1 << 15), /* UDP/IP checksum failed */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   423
	TCPFail		= (1 << 14), /* TCP/IP checksum failed */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   424
	RxVlanTag	= (1 << 16), /* VLAN tag available */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   425
};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   426
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   427
#define RsvdMask	0x3fffc000
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   428
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   429
struct TxDesc {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   430
	__le32 opts1;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   431
	__le32 opts2;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   432
	__le64 addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   433
};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   434
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   435
struct RxDesc {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   436
	__le32 opts1;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   437
	__le32 opts2;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   438
	__le64 addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   439
};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   440
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   441
struct ring_info {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   442
	struct sk_buff	*skb;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   443
	u32		len;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   444
	u8		__pad[sizeof(void *) - sizeof(u32)];
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   445
};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   446
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   447
enum features {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   448
	RTL_FEATURE_WOL		= (1 << 0),
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   449
	RTL_FEATURE_MSI		= (1 << 1),
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   450
	RTL_FEATURE_GMII	= (1 << 2),
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   451
};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   452
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   453
struct rtl8169_counters {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   454
	__le64	tx_packets;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   455
	__le64	rx_packets;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   456
	__le64	tx_errors;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   457
	__le32	rx_errors;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   458
	__le16	rx_missed;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   459
	__le16	align_errors;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   460
	__le32	tx_one_collision;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   461
	__le32	tx_multi_collision;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   462
	__le64	rx_unicast;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   463
	__le64	rx_broadcast;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   464
	__le32	rx_multicast;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   465
	__le16	tx_aborted;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   466
	__le16	tx_underun;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   467
};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   468
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   469
struct rtl8169_private {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   470
	void __iomem *mmio_addr;	/* memory map physical address */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   471
	struct pci_dev *pci_dev;	/* Index of PCI device */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   472
	struct net_device *dev;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   473
	struct napi_struct napi;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   474
	spinlock_t lock;		/* spin lock flag */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   475
	u32 msg_enable;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   476
	int chipset;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   477
	int mac_version;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   478
	u32 cur_rx; /* Index into the Rx descriptor buffer of next Rx pkt. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   479
	u32 cur_tx; /* Index into the Tx descriptor buffer of next Rx pkt. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   480
	u32 dirty_rx;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   481
	u32 dirty_tx;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   482
	struct TxDesc *TxDescArray;	/* 256-aligned Tx descriptor ring */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   483
	struct RxDesc *RxDescArray;	/* 256-aligned Rx descriptor ring */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   484
	dma_addr_t TxPhyAddr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   485
	dma_addr_t RxPhyAddr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   486
	struct sk_buff *Rx_skbuff[NUM_RX_DESC];	/* Rx data buffers */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   487
	struct ring_info tx_skb[NUM_TX_DESC];	/* Tx data buffers */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   488
	unsigned align;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   489
	unsigned rx_buf_sz;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   490
	struct timer_list timer;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   491
	u16 cp_cmd;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   492
	u16 intr_event;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   493
	u16 napi_event;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   494
	u16 intr_mask;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   495
	int phy_1000_ctrl_reg;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   496
#ifdef CONFIG_R8169_VLAN
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   497
	struct vlan_group *vlgrp;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   498
#endif
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   499
	int (*set_speed)(struct net_device *, u8 autoneg, u16 speed, u8 duplex);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   500
	int (*get_settings)(struct net_device *, struct ethtool_cmd *);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   501
	void (*phy_reset_enable)(void __iomem *);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   502
	void (*hw_start)(struct net_device *);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   503
	unsigned int (*phy_reset_pending)(void __iomem *);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   504
	unsigned int (*link_ok)(void __iomem *);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   505
	int (*do_ioctl)(struct rtl8169_private *tp, struct mii_ioctl_data *data, int cmd);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   506
	int pcie_cap;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   507
	struct delayed_work task;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   508
	unsigned features;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   509
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   510
	struct mii_if_info mii;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   511
	struct rtl8169_counters counters;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   512
};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   513
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   514
MODULE_AUTHOR("Realtek and the Linux r8169 crew <netdev@vger.kernel.org>");
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   515
MODULE_DESCRIPTION("RealTek RTL-8169 Gigabit Ethernet driver");
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   516
module_param(rx_copybreak, int, 0);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   517
MODULE_PARM_DESC(rx_copybreak, "Copy breakpoint for copy-only-tiny-frames");
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   518
module_param(use_dac, int, 0);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   519
MODULE_PARM_DESC(use_dac, "Enable PCI DAC. Unsafe on 32 bit PCI slot.");
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   520
module_param_named(debug, debug.msg_enable, int, 0);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   521
MODULE_PARM_DESC(debug, "Debug verbosity level (0=none, ..., 16=all)");
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   522
MODULE_LICENSE("GPL");
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   523
MODULE_VERSION(RTL8169_VERSION);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   524
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   525
static int rtl8169_open(struct net_device *dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   526
static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   527
				      struct net_device *dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   528
static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   529
static int rtl8169_init_ring(struct net_device *dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   530
static void rtl_hw_start(struct net_device *dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   531
static int rtl8169_close(struct net_device *dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   532
static void rtl_set_rx_mode(struct net_device *dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   533
static void rtl8169_tx_timeout(struct net_device *dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   534
static struct net_device_stats *rtl8169_get_stats(struct net_device *dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   535
static int rtl8169_rx_interrupt(struct net_device *, struct rtl8169_private *,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   536
				void __iomem *, u32 budget);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   537
static int rtl8169_change_mtu(struct net_device *dev, int new_mtu);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   538
static void rtl8169_down(struct net_device *dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   539
static void rtl8169_rx_clear(struct rtl8169_private *tp);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   540
static int rtl8169_poll(struct napi_struct *napi, int budget);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   541
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   542
static const unsigned int rtl8169_rx_config =
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   543
	(RX_FIFO_THRESH << RxCfgFIFOShift) | (RX_DMA_BURST << RxCfgDMAShift);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   544
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   545
static void mdio_write(void __iomem *ioaddr, int reg_addr, int value)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   546
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   547
	int i;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   548
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   549
	RTL_W32(PHYAR, 0x80000000 | (reg_addr & 0x1f) << 16 | (value & 0xffff));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   550
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   551
	for (i = 20; i > 0; i--) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   552
		/*
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   553
		 * Check if the RTL8169 has completed writing to the specified
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   554
		 * MII register.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   555
		 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   556
		if (!(RTL_R32(PHYAR) & 0x80000000))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   557
			break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   558
		udelay(25);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   559
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   560
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   561
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   562
static int mdio_read(void __iomem *ioaddr, int reg_addr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   563
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   564
	int i, value = -1;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   565
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   566
	RTL_W32(PHYAR, 0x0 | (reg_addr & 0x1f) << 16);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   567
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   568
	for (i = 20; i > 0; i--) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   569
		/*
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   570
		 * Check if the RTL8169 has completed retrieving data from
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   571
		 * the specified MII register.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   572
		 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   573
		if (RTL_R32(PHYAR) & 0x80000000) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   574
			value = RTL_R32(PHYAR) & 0xffff;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   575
			break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   576
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   577
		udelay(25);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   578
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   579
	return value;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   580
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   581
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   582
static void mdio_patch(void __iomem *ioaddr, int reg_addr, int value)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   583
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   584
	mdio_write(ioaddr, reg_addr, mdio_read(ioaddr, reg_addr) | value);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   585
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   586
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   587
static void mdio_plus_minus(void __iomem *ioaddr, int reg_addr, int p, int m)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   588
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   589
	int val;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   590
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   591
	val = mdio_read(ioaddr, reg_addr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   592
	mdio_write(ioaddr, reg_addr, (val | p) & ~m);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   593
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   594
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   595
static void rtl_mdio_write(struct net_device *dev, int phy_id, int location,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   596
			   int val)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   597
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   598
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   599
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   600
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   601
	mdio_write(ioaddr, location, val);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   602
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   603
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   604
static int rtl_mdio_read(struct net_device *dev, int phy_id, int location)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   605
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   606
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   607
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   608
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   609
	return mdio_read(ioaddr, location);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   610
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   611
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   612
static void rtl_ephy_write(void __iomem *ioaddr, int reg_addr, int value)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   613
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   614
	unsigned int i;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   615
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   616
	RTL_W32(EPHYAR, EPHYAR_WRITE_CMD | (value & EPHYAR_DATA_MASK) |
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   617
		(reg_addr & EPHYAR_REG_MASK) << EPHYAR_REG_SHIFT);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   618
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   619
	for (i = 0; i < 100; i++) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   620
		if (!(RTL_R32(EPHYAR) & EPHYAR_FLAG))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   621
			break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   622
		udelay(10);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   623
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   624
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   625
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   626
static u16 rtl_ephy_read(void __iomem *ioaddr, int reg_addr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   627
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   628
	u16 value = 0xffff;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   629
	unsigned int i;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   630
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   631
	RTL_W32(EPHYAR, (reg_addr & EPHYAR_REG_MASK) << EPHYAR_REG_SHIFT);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   632
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   633
	for (i = 0; i < 100; i++) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   634
		if (RTL_R32(EPHYAR) & EPHYAR_FLAG) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   635
			value = RTL_R32(EPHYAR) & EPHYAR_DATA_MASK;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   636
			break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   637
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   638
		udelay(10);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   639
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   640
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   641
	return value;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   642
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   643
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   644
static void rtl_csi_write(void __iomem *ioaddr, int addr, int value)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   645
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   646
	unsigned int i;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   647
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   648
	RTL_W32(CSIDR, value);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   649
	RTL_W32(CSIAR, CSIAR_WRITE_CMD | (addr & CSIAR_ADDR_MASK) |
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   650
		CSIAR_BYTE_ENABLE << CSIAR_BYTE_ENABLE_SHIFT);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   651
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   652
	for (i = 0; i < 100; i++) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   653
		if (!(RTL_R32(CSIAR) & CSIAR_FLAG))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   654
			break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   655
		udelay(10);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   656
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   657
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   658
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   659
static u32 rtl_csi_read(void __iomem *ioaddr, int addr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   660
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   661
	u32 value = ~0x00;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   662
	unsigned int i;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   663
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   664
	RTL_W32(CSIAR, (addr & CSIAR_ADDR_MASK) |
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   665
		CSIAR_BYTE_ENABLE << CSIAR_BYTE_ENABLE_SHIFT);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   666
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   667
	for (i = 0; i < 100; i++) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   668
		if (RTL_R32(CSIAR) & CSIAR_FLAG) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   669
			value = RTL_R32(CSIDR);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   670
			break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   671
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   672
		udelay(10);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   673
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   674
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   675
	return value;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   676
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   677
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   678
static u8 rtl8168d_efuse_read(void __iomem *ioaddr, int reg_addr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   679
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   680
	u8 value = 0xff;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   681
	unsigned int i;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   682
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   683
	RTL_W32(EFUSEAR, (reg_addr & EFUSEAR_REG_MASK) << EFUSEAR_REG_SHIFT);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   684
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   685
	for (i = 0; i < 300; i++) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   686
		if (RTL_R32(EFUSEAR) & EFUSEAR_FLAG) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   687
			value = RTL_R32(EFUSEAR) & EFUSEAR_DATA_MASK;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   688
			break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   689
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   690
		udelay(100);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   691
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   692
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   693
	return value;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   694
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   695
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   696
static void rtl8169_irq_mask_and_ack(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   697
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   698
	RTL_W16(IntrMask, 0x0000);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   699
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   700
	RTL_W16(IntrStatus, 0xffff);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   701
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   702
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   703
static void rtl8169_asic_down(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   704
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   705
	RTL_W8(ChipCmd, 0x00);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   706
	rtl8169_irq_mask_and_ack(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   707
	RTL_R16(CPlusCmd);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   708
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   709
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   710
static unsigned int rtl8169_tbi_reset_pending(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   711
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   712
	return RTL_R32(TBICSR) & TBIReset;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   713
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   714
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   715
static unsigned int rtl8169_xmii_reset_pending(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   716
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   717
	return mdio_read(ioaddr, MII_BMCR) & BMCR_RESET;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   718
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   719
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   720
static unsigned int rtl8169_tbi_link_ok(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   721
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   722
	return RTL_R32(TBICSR) & TBILinkOk;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   723
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   724
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   725
static unsigned int rtl8169_xmii_link_ok(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   726
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   727
	return RTL_R8(PHYstatus) & LinkStatus;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   728
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   729
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   730
static void rtl8169_tbi_reset_enable(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   731
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   732
	RTL_W32(TBICSR, RTL_R32(TBICSR) | TBIReset);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   733
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   734
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   735
static void rtl8169_xmii_reset_enable(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   736
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   737
	unsigned int val;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   738
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   739
	val = mdio_read(ioaddr, MII_BMCR) | BMCR_RESET;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   740
	mdio_write(ioaddr, MII_BMCR, val & 0xffff);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   741
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   742
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   743
static void rtl8169_check_link_status(struct net_device *dev,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   744
				      struct rtl8169_private *tp,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   745
				      void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   746
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   747
	unsigned long flags;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   748
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   749
	spin_lock_irqsave(&tp->lock, flags);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   750
	if (tp->link_ok(ioaddr)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   751
		netif_carrier_on(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   752
		if (netif_msg_ifup(tp))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   753
			printk(KERN_INFO PFX "%s: link up\n", dev->name);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   754
	} else {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   755
		if (netif_msg_ifdown(tp))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   756
			printk(KERN_INFO PFX "%s: link down\n", dev->name);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   757
		netif_carrier_off(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   758
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   759
	spin_unlock_irqrestore(&tp->lock, flags);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   760
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   761
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   762
static void rtl8169_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   763
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   764
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   765
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   766
	u8 options;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   767
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   768
	wol->wolopts = 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   769
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   770
#define WAKE_ANY (WAKE_PHY | WAKE_MAGIC | WAKE_UCAST | WAKE_BCAST | WAKE_MCAST)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   771
	wol->supported = WAKE_ANY;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   772
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   773
	spin_lock_irq(&tp->lock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   774
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   775
	options = RTL_R8(Config1);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   776
	if (!(options & PMEnable))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   777
		goto out_unlock;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   778
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   779
	options = RTL_R8(Config3);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   780
	if (options & LinkUp)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   781
		wol->wolopts |= WAKE_PHY;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   782
	if (options & MagicPacket)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   783
		wol->wolopts |= WAKE_MAGIC;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   784
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   785
	options = RTL_R8(Config5);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   786
	if (options & UWF)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   787
		wol->wolopts |= WAKE_UCAST;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   788
	if (options & BWF)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   789
		wol->wolopts |= WAKE_BCAST;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   790
	if (options & MWF)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   791
		wol->wolopts |= WAKE_MCAST;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   792
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   793
out_unlock:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   794
	spin_unlock_irq(&tp->lock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   795
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   796
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   797
static int rtl8169_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   798
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   799
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   800
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   801
	unsigned int i;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   802
	static const struct {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   803
		u32 opt;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   804
		u16 reg;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   805
		u8  mask;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   806
	} cfg[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   807
		{ WAKE_ANY,   Config1, PMEnable },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   808
		{ WAKE_PHY,   Config3, LinkUp },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   809
		{ WAKE_MAGIC, Config3, MagicPacket },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   810
		{ WAKE_UCAST, Config5, UWF },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   811
		{ WAKE_BCAST, Config5, BWF },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   812
		{ WAKE_MCAST, Config5, MWF },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   813
		{ WAKE_ANY,   Config5, LanWake }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   814
	};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   815
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   816
	spin_lock_irq(&tp->lock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   817
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   818
	RTL_W8(Cfg9346, Cfg9346_Unlock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   819
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   820
	for (i = 0; i < ARRAY_SIZE(cfg); i++) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   821
		u8 options = RTL_R8(cfg[i].reg) & ~cfg[i].mask;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   822
		if (wol->wolopts & cfg[i].opt)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   823
			options |= cfg[i].mask;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   824
		RTL_W8(cfg[i].reg, options);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   825
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   826
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   827
	RTL_W8(Cfg9346, Cfg9346_Lock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   828
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   829
	if (wol->wolopts)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   830
		tp->features |= RTL_FEATURE_WOL;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   831
	else
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   832
		tp->features &= ~RTL_FEATURE_WOL;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   833
	device_set_wakeup_enable(&tp->pci_dev->dev, wol->wolopts);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   834
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   835
	spin_unlock_irq(&tp->lock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   836
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   837
	return 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   838
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   839
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   840
static void rtl8169_get_drvinfo(struct net_device *dev,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   841
				struct ethtool_drvinfo *info)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   842
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   843
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   844
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   845
	strcpy(info->driver, MODULENAME);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   846
	strcpy(info->version, RTL8169_VERSION);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   847
	strcpy(info->bus_info, pci_name(tp->pci_dev));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   848
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   849
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   850
static int rtl8169_get_regs_len(struct net_device *dev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   851
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   852
	return R8169_REGS_SIZE;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   853
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   854
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   855
static int rtl8169_set_speed_tbi(struct net_device *dev,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   856
				 u8 autoneg, u16 speed, u8 duplex)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   857
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   858
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   859
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   860
	int ret = 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   861
	u32 reg;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   862
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   863
	reg = RTL_R32(TBICSR);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   864
	if ((autoneg == AUTONEG_DISABLE) && (speed == SPEED_1000) &&
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   865
	    (duplex == DUPLEX_FULL)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   866
		RTL_W32(TBICSR, reg & ~(TBINwEnable | TBINwRestart));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   867
	} else if (autoneg == AUTONEG_ENABLE)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   868
		RTL_W32(TBICSR, reg | TBINwEnable | TBINwRestart);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   869
	else {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   870
		if (netif_msg_link(tp)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   871
			printk(KERN_WARNING "%s: "
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   872
			       "incorrect speed setting refused in TBI mode\n",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   873
			       dev->name);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   874
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   875
		ret = -EOPNOTSUPP;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   876
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   877
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   878
	return ret;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   879
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   880
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   881
static int rtl8169_set_speed_xmii(struct net_device *dev,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   882
				  u8 autoneg, u16 speed, u8 duplex)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   883
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   884
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   885
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   886
	int giga_ctrl, bmcr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   887
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   888
	if (autoneg == AUTONEG_ENABLE) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   889
		int auto_nego;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   890
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   891
		auto_nego = mdio_read(ioaddr, MII_ADVERTISE);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   892
		auto_nego |= (ADVERTISE_10HALF | ADVERTISE_10FULL |
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   893
			      ADVERTISE_100HALF | ADVERTISE_100FULL);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   894
		auto_nego |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   895
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   896
		giga_ctrl = mdio_read(ioaddr, MII_CTRL1000);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   897
		giga_ctrl &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   898
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   899
		/* The 8100e/8101e/8102e do Fast Ethernet only. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   900
		if ((tp->mac_version != RTL_GIGA_MAC_VER_07) &&
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   901
		    (tp->mac_version != RTL_GIGA_MAC_VER_08) &&
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   902
		    (tp->mac_version != RTL_GIGA_MAC_VER_09) &&
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   903
		    (tp->mac_version != RTL_GIGA_MAC_VER_10) &&
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   904
		    (tp->mac_version != RTL_GIGA_MAC_VER_13) &&
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   905
		    (tp->mac_version != RTL_GIGA_MAC_VER_14) &&
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   906
		    (tp->mac_version != RTL_GIGA_MAC_VER_15) &&
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   907
		    (tp->mac_version != RTL_GIGA_MAC_VER_16)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   908
			giga_ctrl |= ADVERTISE_1000FULL | ADVERTISE_1000HALF;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   909
		} else if (netif_msg_link(tp)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   910
			printk(KERN_INFO "%s: PHY does not support 1000Mbps.\n",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   911
			       dev->name);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   912
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   913
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   914
		bmcr = BMCR_ANENABLE | BMCR_ANRESTART;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   915
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   916
		if ((tp->mac_version == RTL_GIGA_MAC_VER_11) ||
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   917
		    (tp->mac_version == RTL_GIGA_MAC_VER_12) ||
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   918
		    (tp->mac_version >= RTL_GIGA_MAC_VER_17)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   919
			/*
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   920
			 * Wake up the PHY.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   921
			 * Vendor specific (0x1f) and reserved (0x0e) MII
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   922
			 * registers.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   923
			 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   924
			mdio_write(ioaddr, 0x1f, 0x0000);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   925
			mdio_write(ioaddr, 0x0e, 0x0000);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   926
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   927
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   928
		mdio_write(ioaddr, MII_ADVERTISE, auto_nego);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   929
		mdio_write(ioaddr, MII_CTRL1000, giga_ctrl);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   930
	} else {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   931
		giga_ctrl = 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   932
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   933
		if (speed == SPEED_10)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   934
			bmcr = 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   935
		else if (speed == SPEED_100)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   936
			bmcr = BMCR_SPEED100;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   937
		else
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   938
			return -EINVAL;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   939
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   940
		if (duplex == DUPLEX_FULL)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   941
			bmcr |= BMCR_FULLDPLX;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   942
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   943
		mdio_write(ioaddr, 0x1f, 0x0000);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   944
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   945
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   946
	tp->phy_1000_ctrl_reg = giga_ctrl;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   947
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   948
	mdio_write(ioaddr, MII_BMCR, bmcr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   949
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   950
	if ((tp->mac_version == RTL_GIGA_MAC_VER_02) ||
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   951
	    (tp->mac_version == RTL_GIGA_MAC_VER_03)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   952
		if ((speed == SPEED_100) && (autoneg != AUTONEG_ENABLE)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   953
			mdio_write(ioaddr, 0x17, 0x2138);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   954
			mdio_write(ioaddr, 0x0e, 0x0260);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   955
		} else {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   956
			mdio_write(ioaddr, 0x17, 0x2108);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   957
			mdio_write(ioaddr, 0x0e, 0x0000);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   958
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   959
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   960
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   961
	return 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   962
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   963
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   964
static int rtl8169_set_speed(struct net_device *dev,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   965
			     u8 autoneg, u16 speed, u8 duplex)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   966
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   967
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   968
	int ret;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   969
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   970
	ret = tp->set_speed(dev, autoneg, speed, duplex);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   971
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   972
	if (netif_running(dev) && (tp->phy_1000_ctrl_reg & ADVERTISE_1000FULL))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   973
		mod_timer(&tp->timer, jiffies + RTL8169_PHY_TIMEOUT);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   974
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   975
	return ret;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   976
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   977
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   978
static int rtl8169_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   979
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   980
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   981
	unsigned long flags;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   982
	int ret;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   983
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   984
	spin_lock_irqsave(&tp->lock, flags);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   985
	ret = rtl8169_set_speed(dev, cmd->autoneg, cmd->speed, cmd->duplex);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   986
	spin_unlock_irqrestore(&tp->lock, flags);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   987
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   988
	return ret;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   989
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   990
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   991
static u32 rtl8169_get_rx_csum(struct net_device *dev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   992
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   993
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   994
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   995
	return tp->cp_cmd & RxChkSum;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   996
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   997
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   998
static int rtl8169_set_rx_csum(struct net_device *dev, u32 data)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   999
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1000
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1001
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1002
	unsigned long flags;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1003
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1004
	spin_lock_irqsave(&tp->lock, flags);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1005
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1006
	if (data)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1007
		tp->cp_cmd |= RxChkSum;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1008
	else
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1009
		tp->cp_cmd &= ~RxChkSum;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1010
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1011
	RTL_W16(CPlusCmd, tp->cp_cmd);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1012
	RTL_R16(CPlusCmd);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1013
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1014
	spin_unlock_irqrestore(&tp->lock, flags);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1015
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1016
	return 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1017
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1018
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1019
#ifdef CONFIG_R8169_VLAN
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1020
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1021
static inline u32 rtl8169_tx_vlan_tag(struct rtl8169_private *tp,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1022
				      struct sk_buff *skb)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1023
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1024
	return (tp->vlgrp && vlan_tx_tag_present(skb)) ?
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1025
		TxVlanTag | swab16(vlan_tx_tag_get(skb)) : 0x00;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1026
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1027
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1028
static void rtl8169_vlan_rx_register(struct net_device *dev,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1029
				     struct vlan_group *grp)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1030
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1031
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1032
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1033
	unsigned long flags;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1034
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1035
	spin_lock_irqsave(&tp->lock, flags);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1036
	tp->vlgrp = grp;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1037
	/*
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1038
	 * Do not disable RxVlan on 8110SCd.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1039
	 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1040
	if (tp->vlgrp || (tp->mac_version == RTL_GIGA_MAC_VER_05))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1041
		tp->cp_cmd |= RxVlan;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1042
	else
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1043
		tp->cp_cmd &= ~RxVlan;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1044
	RTL_W16(CPlusCmd, tp->cp_cmd);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1045
	RTL_R16(CPlusCmd);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1046
	spin_unlock_irqrestore(&tp->lock, flags);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1047
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1048
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1049
static int rtl8169_rx_vlan_skb(struct rtl8169_private *tp, struct RxDesc *desc,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1050
			       struct sk_buff *skb)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1051
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1052
	u32 opts2 = le32_to_cpu(desc->opts2);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1053
	struct vlan_group *vlgrp = tp->vlgrp;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1054
	int ret;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1055
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1056
	if (vlgrp && (opts2 & RxVlanTag)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1057
		vlan_hwaccel_receive_skb(skb, vlgrp, swab16(opts2 & 0xffff));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1058
		ret = 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1059
	} else
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1060
		ret = -1;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1061
	desc->opts2 = 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1062
	return ret;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1063
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1064
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1065
#else /* !CONFIG_R8169_VLAN */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1066
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1067
static inline u32 rtl8169_tx_vlan_tag(struct rtl8169_private *tp,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1068
				      struct sk_buff *skb)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1069
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1070
	return 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1071
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1072
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1073
static int rtl8169_rx_vlan_skb(struct rtl8169_private *tp, struct RxDesc *desc,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1074
			       struct sk_buff *skb)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1075
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1076
	return -1;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1077
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1078
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1079
#endif
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1080
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1081
static int rtl8169_gset_tbi(struct net_device *dev, struct ethtool_cmd *cmd)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1082
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1083
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1084
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1085
	u32 status;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1086
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1087
	cmd->supported =
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1088
		SUPPORTED_1000baseT_Full | SUPPORTED_Autoneg | SUPPORTED_FIBRE;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1089
	cmd->port = PORT_FIBRE;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1090
	cmd->transceiver = XCVR_INTERNAL;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1091
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1092
	status = RTL_R32(TBICSR);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1093
	cmd->advertising = (status & TBINwEnable) ?  ADVERTISED_Autoneg : 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1094
	cmd->autoneg = !!(status & TBINwEnable);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1095
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1096
	cmd->speed = SPEED_1000;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1097
	cmd->duplex = DUPLEX_FULL; /* Always set */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1098
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1099
	return 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1100
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1101
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1102
static int rtl8169_gset_xmii(struct net_device *dev, struct ethtool_cmd *cmd)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1103
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1104
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1105
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1106
	return mii_ethtool_gset(&tp->mii, cmd);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1107
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1108
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1109
static int rtl8169_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1110
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1111
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1112
	unsigned long flags;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1113
	int rc;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1114
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1115
	spin_lock_irqsave(&tp->lock, flags);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1116
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1117
	rc = tp->get_settings(dev, cmd);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1118
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1119
	spin_unlock_irqrestore(&tp->lock, flags);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1120
	return rc;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1121
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1122
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1123
static void rtl8169_get_regs(struct net_device *dev, struct ethtool_regs *regs,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1124
			     void *p)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1125
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1126
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1127
	unsigned long flags;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1128
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1129
	if (regs->len > R8169_REGS_SIZE)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1130
		regs->len = R8169_REGS_SIZE;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1131
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1132
	spin_lock_irqsave(&tp->lock, flags);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1133
	memcpy_fromio(p, tp->mmio_addr, regs->len);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1134
	spin_unlock_irqrestore(&tp->lock, flags);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1135
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1136
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1137
static u32 rtl8169_get_msglevel(struct net_device *dev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1138
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1139
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1140
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1141
	return tp->msg_enable;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1142
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1143
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1144
static void rtl8169_set_msglevel(struct net_device *dev, u32 value)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1145
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1146
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1147
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1148
	tp->msg_enable = value;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1149
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1150
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1151
static const char rtl8169_gstrings[][ETH_GSTRING_LEN] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1152
	"tx_packets",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1153
	"rx_packets",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1154
	"tx_errors",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1155
	"rx_errors",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1156
	"rx_missed",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1157
	"align_errors",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1158
	"tx_single_collisions",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1159
	"tx_multi_collisions",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1160
	"unicast",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1161
	"broadcast",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1162
	"multicast",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1163
	"tx_aborted",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1164
	"tx_underrun",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1165
};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1166
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1167
static int rtl8169_get_sset_count(struct net_device *dev, int sset)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1168
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1169
	switch (sset) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1170
	case ETH_SS_STATS:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1171
		return ARRAY_SIZE(rtl8169_gstrings);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1172
	default:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1173
		return -EOPNOTSUPP;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1174
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1175
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1176
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1177
static void rtl8169_update_counters(struct net_device *dev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1178
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1179
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1180
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1181
	struct rtl8169_counters *counters;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1182
	dma_addr_t paddr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1183
	u32 cmd;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1184
	int wait = 1000;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1185
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1186
	/*
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1187
	 * Some chips are unable to dump tally counters when the receiver
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1188
	 * is disabled.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1189
	 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1190
	if ((RTL_R8(ChipCmd) & CmdRxEnb) == 0)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1191
		return;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1192
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1193
	counters = pci_alloc_consistent(tp->pci_dev, sizeof(*counters), &paddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1194
	if (!counters)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1195
		return;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1196
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1197
	RTL_W32(CounterAddrHigh, (u64)paddr >> 32);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1198
	cmd = (u64)paddr & DMA_BIT_MASK(32);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1199
	RTL_W32(CounterAddrLow, cmd);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1200
	RTL_W32(CounterAddrLow, cmd | CounterDump);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1201
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1202
	while (wait--) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1203
		if ((RTL_R32(CounterAddrLow) & CounterDump) == 0) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1204
			/* copy updated counters */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1205
			memcpy(&tp->counters, counters, sizeof(*counters));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1206
			break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1207
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1208
		udelay(10);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1209
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1210
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1211
	RTL_W32(CounterAddrLow, 0);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1212
	RTL_W32(CounterAddrHigh, 0);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1213
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1214
	pci_free_consistent(tp->pci_dev, sizeof(*counters), counters, paddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1215
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1216
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1217
static void rtl8169_get_ethtool_stats(struct net_device *dev,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1218
				      struct ethtool_stats *stats, u64 *data)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1219
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1220
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1221
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1222
	ASSERT_RTNL();
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1223
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1224
	rtl8169_update_counters(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1225
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1226
	data[0] = le64_to_cpu(tp->counters.tx_packets);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1227
	data[1] = le64_to_cpu(tp->counters.rx_packets);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1228
	data[2] = le64_to_cpu(tp->counters.tx_errors);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1229
	data[3] = le32_to_cpu(tp->counters.rx_errors);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1230
	data[4] = le16_to_cpu(tp->counters.rx_missed);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1231
	data[5] = le16_to_cpu(tp->counters.align_errors);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1232
	data[6] = le32_to_cpu(tp->counters.tx_one_collision);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1233
	data[7] = le32_to_cpu(tp->counters.tx_multi_collision);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1234
	data[8] = le64_to_cpu(tp->counters.rx_unicast);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1235
	data[9] = le64_to_cpu(tp->counters.rx_broadcast);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1236
	data[10] = le32_to_cpu(tp->counters.rx_multicast);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1237
	data[11] = le16_to_cpu(tp->counters.tx_aborted);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1238
	data[12] = le16_to_cpu(tp->counters.tx_underun);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1239
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1240
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1241
static void rtl8169_get_strings(struct net_device *dev, u32 stringset, u8 *data)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1242
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1243
	switch(stringset) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1244
	case ETH_SS_STATS:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1245
		memcpy(data, *rtl8169_gstrings, sizeof(rtl8169_gstrings));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1246
		break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1247
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1248
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1249
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1250
static const struct ethtool_ops rtl8169_ethtool_ops = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1251
	.get_drvinfo		= rtl8169_get_drvinfo,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1252
	.get_regs_len		= rtl8169_get_regs_len,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1253
	.get_link		= ethtool_op_get_link,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1254
	.get_settings		= rtl8169_get_settings,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1255
	.set_settings		= rtl8169_set_settings,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1256
	.get_msglevel		= rtl8169_get_msglevel,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1257
	.set_msglevel		= rtl8169_set_msglevel,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1258
	.get_rx_csum		= rtl8169_get_rx_csum,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1259
	.set_rx_csum		= rtl8169_set_rx_csum,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1260
	.set_tx_csum		= ethtool_op_set_tx_csum,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1261
	.set_sg			= ethtool_op_set_sg,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1262
	.set_tso		= ethtool_op_set_tso,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1263
	.get_regs		= rtl8169_get_regs,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1264
	.get_wol		= rtl8169_get_wol,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1265
	.set_wol		= rtl8169_set_wol,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1266
	.get_strings		= rtl8169_get_strings,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1267
	.get_sset_count		= rtl8169_get_sset_count,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1268
	.get_ethtool_stats	= rtl8169_get_ethtool_stats,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1269
};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1270
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1271
static void rtl8169_get_mac_version(struct rtl8169_private *tp,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1272
				    void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1273
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1274
	/*
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1275
	 * The driver currently handles the 8168Bf and the 8168Be identically
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1276
	 * but they can be identified more specifically through the test below
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1277
	 * if needed:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1278
	 *
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1279
	 * (RTL_R32(TxConfig) & 0x700000) == 0x500000 ? 8168Bf : 8168Be
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1280
	 *
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1281
	 * Same thing for the 8101Eb and the 8101Ec:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1282
	 *
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1283
	 * (RTL_R32(TxConfig) & 0x700000) == 0x200000 ? 8101Eb : 8101Ec
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1284
	 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1285
	static const struct {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1286
		u32 mask;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1287
		u32 val;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1288
		int mac_version;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1289
	} mac_info[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1290
		/* 8168D family. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1291
		{ 0x7cf00000, 0x28300000,	RTL_GIGA_MAC_VER_26 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1292
		{ 0x7cf00000, 0x28100000,	RTL_GIGA_MAC_VER_25 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1293
		{ 0x7c800000, 0x28800000,	RTL_GIGA_MAC_VER_27 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1294
		{ 0x7c800000, 0x28000000,	RTL_GIGA_MAC_VER_26 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1295
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1296
		/* 8168C family. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1297
		{ 0x7cf00000, 0x3ca00000,	RTL_GIGA_MAC_VER_24 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1298
		{ 0x7cf00000, 0x3c900000,	RTL_GIGA_MAC_VER_23 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1299
		{ 0x7cf00000, 0x3c800000,	RTL_GIGA_MAC_VER_18 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1300
		{ 0x7c800000, 0x3c800000,	RTL_GIGA_MAC_VER_24 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1301
		{ 0x7cf00000, 0x3c000000,	RTL_GIGA_MAC_VER_19 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1302
		{ 0x7cf00000, 0x3c200000,	RTL_GIGA_MAC_VER_20 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1303
		{ 0x7cf00000, 0x3c300000,	RTL_GIGA_MAC_VER_21 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1304
		{ 0x7cf00000, 0x3c400000,	RTL_GIGA_MAC_VER_22 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1305
		{ 0x7c800000, 0x3c000000,	RTL_GIGA_MAC_VER_22 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1306
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1307
		/* 8168B family. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1308
		{ 0x7cf00000, 0x38000000,	RTL_GIGA_MAC_VER_12 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1309
		{ 0x7cf00000, 0x38500000,	RTL_GIGA_MAC_VER_17 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1310
		{ 0x7c800000, 0x38000000,	RTL_GIGA_MAC_VER_17 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1311
		{ 0x7c800000, 0x30000000,	RTL_GIGA_MAC_VER_11 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1312
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1313
		/* 8101 family. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1314
		{ 0x7cf00000, 0x34a00000,	RTL_GIGA_MAC_VER_09 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1315
		{ 0x7cf00000, 0x24a00000,	RTL_GIGA_MAC_VER_09 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1316
		{ 0x7cf00000, 0x34900000,	RTL_GIGA_MAC_VER_08 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1317
		{ 0x7cf00000, 0x24900000,	RTL_GIGA_MAC_VER_08 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1318
		{ 0x7cf00000, 0x34800000,	RTL_GIGA_MAC_VER_07 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1319
		{ 0x7cf00000, 0x24800000,	RTL_GIGA_MAC_VER_07 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1320
		{ 0x7cf00000, 0x34000000,	RTL_GIGA_MAC_VER_13 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1321
		{ 0x7cf00000, 0x34300000,	RTL_GIGA_MAC_VER_10 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1322
		{ 0x7cf00000, 0x34200000,	RTL_GIGA_MAC_VER_16 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1323
		{ 0x7c800000, 0x34800000,	RTL_GIGA_MAC_VER_09 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1324
		{ 0x7c800000, 0x24800000,	RTL_GIGA_MAC_VER_09 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1325
		{ 0x7c800000, 0x34000000,	RTL_GIGA_MAC_VER_16 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1326
		/* FIXME: where did these entries come from ? -- FR */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1327
		{ 0xfc800000, 0x38800000,	RTL_GIGA_MAC_VER_15 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1328
		{ 0xfc800000, 0x30800000,	RTL_GIGA_MAC_VER_14 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1329
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1330
		/* 8110 family. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1331
		{ 0xfc800000, 0x98000000,	RTL_GIGA_MAC_VER_06 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1332
		{ 0xfc800000, 0x18000000,	RTL_GIGA_MAC_VER_05 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1333
		{ 0xfc800000, 0x10000000,	RTL_GIGA_MAC_VER_04 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1334
		{ 0xfc800000, 0x04000000,	RTL_GIGA_MAC_VER_03 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1335
		{ 0xfc800000, 0x00800000,	RTL_GIGA_MAC_VER_02 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1336
		{ 0xfc800000, 0x00000000,	RTL_GIGA_MAC_VER_01 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1337
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1338
		/* Catch-all */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1339
		{ 0x00000000, 0x00000000,	RTL_GIGA_MAC_NONE   }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1340
	}, *p = mac_info;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1341
	u32 reg;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1342
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1343
	reg = RTL_R32(TxConfig);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1344
	while ((reg & p->mask) != p->val)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1345
		p++;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1346
	tp->mac_version = p->mac_version;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1347
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1348
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1349
static void rtl8169_print_mac_version(struct rtl8169_private *tp)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1350
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1351
	dprintk("mac_version = 0x%02x\n", tp->mac_version);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1352
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1353
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1354
struct phy_reg {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1355
	u16 reg;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1356
	u16 val;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1357
};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1358
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1359
static void rtl_phy_write(void __iomem *ioaddr, const struct phy_reg *regs, int len)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1360
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1361
	while (len-- > 0) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1362
		mdio_write(ioaddr, regs->reg, regs->val);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1363
		regs++;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1364
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1365
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1366
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1367
static void rtl8169s_hw_phy_config(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1368
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1369
	static const struct phy_reg phy_reg_init[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1370
		{ 0x1f, 0x0001 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1371
		{ 0x06, 0x006e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1372
		{ 0x08, 0x0708 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1373
		{ 0x15, 0x4000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1374
		{ 0x18, 0x65c7 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1375
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1376
		{ 0x1f, 0x0001 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1377
		{ 0x03, 0x00a1 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1378
		{ 0x02, 0x0008 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1379
		{ 0x01, 0x0120 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1380
		{ 0x00, 0x1000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1381
		{ 0x04, 0x0800 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1382
		{ 0x04, 0x0000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1383
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1384
		{ 0x03, 0xff41 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1385
		{ 0x02, 0xdf60 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1386
		{ 0x01, 0x0140 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1387
		{ 0x00, 0x0077 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1388
		{ 0x04, 0x7800 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1389
		{ 0x04, 0x7000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1390
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1391
		{ 0x03, 0x802f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1392
		{ 0x02, 0x4f02 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1393
		{ 0x01, 0x0409 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1394
		{ 0x00, 0xf0f9 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1395
		{ 0x04, 0x9800 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1396
		{ 0x04, 0x9000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1397
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1398
		{ 0x03, 0xdf01 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1399
		{ 0x02, 0xdf20 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1400
		{ 0x01, 0xff95 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1401
		{ 0x00, 0xba00 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1402
		{ 0x04, 0xa800 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1403
		{ 0x04, 0xa000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1404
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1405
		{ 0x03, 0xff41 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1406
		{ 0x02, 0xdf20 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1407
		{ 0x01, 0x0140 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1408
		{ 0x00, 0x00bb },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1409
		{ 0x04, 0xb800 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1410
		{ 0x04, 0xb000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1411
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1412
		{ 0x03, 0xdf41 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1413
		{ 0x02, 0xdc60 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1414
		{ 0x01, 0x6340 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1415
		{ 0x00, 0x007d },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1416
		{ 0x04, 0xd800 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1417
		{ 0x04, 0xd000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1418
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1419
		{ 0x03, 0xdf01 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1420
		{ 0x02, 0xdf20 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1421
		{ 0x01, 0x100a },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1422
		{ 0x00, 0xa0ff },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1423
		{ 0x04, 0xf800 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1424
		{ 0x04, 0xf000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1425
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1426
		{ 0x1f, 0x0000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1427
		{ 0x0b, 0x0000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1428
		{ 0x00, 0x9200 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1429
	};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1430
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1431
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1432
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1433
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1434
static void rtl8169sb_hw_phy_config(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1435
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1436
	static const struct phy_reg phy_reg_init[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1437
		{ 0x1f, 0x0002 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1438
		{ 0x01, 0x90d0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1439
		{ 0x1f, 0x0000 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1440
	};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1441
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1442
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1443
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1444
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1445
static void rtl8169scd_hw_phy_config_quirk(struct rtl8169_private *tp,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1446
					   void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1447
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1448
	struct pci_dev *pdev = tp->pci_dev;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1449
	u16 vendor_id, device_id;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1450
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1451
	pci_read_config_word(pdev, PCI_SUBSYSTEM_VENDOR_ID, &vendor_id);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1452
	pci_read_config_word(pdev, PCI_SUBSYSTEM_ID, &device_id);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1453
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1454
	if ((vendor_id != PCI_VENDOR_ID_GIGABYTE) || (device_id != 0xe000))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1455
		return;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1456
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1457
	mdio_write(ioaddr, 0x1f, 0x0001);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1458
	mdio_write(ioaddr, 0x10, 0xf01b);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1459
	mdio_write(ioaddr, 0x1f, 0x0000);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1460
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1461
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1462
static void rtl8169scd_hw_phy_config(struct rtl8169_private *tp,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1463
				     void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1464
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1465
	static const struct phy_reg phy_reg_init[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1466
		{ 0x1f, 0x0001 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1467
		{ 0x04, 0x0000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1468
		{ 0x03, 0x00a1 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1469
		{ 0x02, 0x0008 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1470
		{ 0x01, 0x0120 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1471
		{ 0x00, 0x1000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1472
		{ 0x04, 0x0800 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1473
		{ 0x04, 0x9000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1474
		{ 0x03, 0x802f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1475
		{ 0x02, 0x4f02 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1476
		{ 0x01, 0x0409 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1477
		{ 0x00, 0xf099 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1478
		{ 0x04, 0x9800 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1479
		{ 0x04, 0xa000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1480
		{ 0x03, 0xdf01 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1481
		{ 0x02, 0xdf20 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1482
		{ 0x01, 0xff95 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1483
		{ 0x00, 0xba00 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1484
		{ 0x04, 0xa800 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1485
		{ 0x04, 0xf000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1486
		{ 0x03, 0xdf01 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1487
		{ 0x02, 0xdf20 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1488
		{ 0x01, 0x101a },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1489
		{ 0x00, 0xa0ff },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1490
		{ 0x04, 0xf800 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1491
		{ 0x04, 0x0000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1492
		{ 0x1f, 0x0000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1493
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1494
		{ 0x1f, 0x0001 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1495
		{ 0x10, 0xf41b },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1496
		{ 0x14, 0xfb54 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1497
		{ 0x18, 0xf5c7 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1498
		{ 0x1f, 0x0000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1499
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1500
		{ 0x1f, 0x0001 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1501
		{ 0x17, 0x0cc0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1502
		{ 0x1f, 0x0000 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1503
	};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1504
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1505
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1506
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1507
	rtl8169scd_hw_phy_config_quirk(tp, ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1508
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1509
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1510
static void rtl8169sce_hw_phy_config(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1511
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1512
	static const struct phy_reg phy_reg_init[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1513
		{ 0x1f, 0x0001 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1514
		{ 0x04, 0x0000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1515
		{ 0x03, 0x00a1 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1516
		{ 0x02, 0x0008 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1517
		{ 0x01, 0x0120 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1518
		{ 0x00, 0x1000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1519
		{ 0x04, 0x0800 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1520
		{ 0x04, 0x9000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1521
		{ 0x03, 0x802f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1522
		{ 0x02, 0x4f02 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1523
		{ 0x01, 0x0409 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1524
		{ 0x00, 0xf099 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1525
		{ 0x04, 0x9800 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1526
		{ 0x04, 0xa000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1527
		{ 0x03, 0xdf01 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1528
		{ 0x02, 0xdf20 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1529
		{ 0x01, 0xff95 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1530
		{ 0x00, 0xba00 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1531
		{ 0x04, 0xa800 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1532
		{ 0x04, 0xf000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1533
		{ 0x03, 0xdf01 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1534
		{ 0x02, 0xdf20 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1535
		{ 0x01, 0x101a },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1536
		{ 0x00, 0xa0ff },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1537
		{ 0x04, 0xf800 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1538
		{ 0x04, 0x0000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1539
		{ 0x1f, 0x0000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1540
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1541
		{ 0x1f, 0x0001 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1542
		{ 0x0b, 0x8480 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1543
		{ 0x1f, 0x0000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1544
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1545
		{ 0x1f, 0x0001 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1546
		{ 0x18, 0x67c7 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1547
		{ 0x04, 0x2000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1548
		{ 0x03, 0x002f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1549
		{ 0x02, 0x4360 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1550
		{ 0x01, 0x0109 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1551
		{ 0x00, 0x3022 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1552
		{ 0x04, 0x2800 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1553
		{ 0x1f, 0x0000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1554
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1555
		{ 0x1f, 0x0001 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1556
		{ 0x17, 0x0cc0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1557
		{ 0x1f, 0x0000 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1558
	};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1559
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1560
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1561
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1562
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1563
static void rtl8168bb_hw_phy_config(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1564
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1565
	static const struct phy_reg phy_reg_init[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1566
		{ 0x10, 0xf41b },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1567
		{ 0x1f, 0x0000 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1568
	};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1569
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1570
	mdio_write(ioaddr, 0x1f, 0x0001);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1571
	mdio_patch(ioaddr, 0x16, 1 << 0);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1572
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1573
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1574
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1575
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1576
static void rtl8168bef_hw_phy_config(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1577
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1578
	static const struct phy_reg phy_reg_init[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1579
		{ 0x1f, 0x0001 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1580
		{ 0x10, 0xf41b },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1581
		{ 0x1f, 0x0000 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1582
	};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1583
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1584
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1585
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1586
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1587
static void rtl8168cp_1_hw_phy_config(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1588
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1589
	static const struct phy_reg phy_reg_init[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1590
		{ 0x1f, 0x0000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1591
		{ 0x1d, 0x0f00 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1592
		{ 0x1f, 0x0002 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1593
		{ 0x0c, 0x1ec8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1594
		{ 0x1f, 0x0000 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1595
	};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1596
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1597
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1598
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1599
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1600
static void rtl8168cp_2_hw_phy_config(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1601
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1602
	static const struct phy_reg phy_reg_init[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1603
		{ 0x1f, 0x0001 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1604
		{ 0x1d, 0x3d98 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1605
		{ 0x1f, 0x0000 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1606
	};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1607
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1608
	mdio_write(ioaddr, 0x1f, 0x0000);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1609
	mdio_patch(ioaddr, 0x14, 1 << 5);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1610
	mdio_patch(ioaddr, 0x0d, 1 << 5);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1611
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1612
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1613
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1614
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1615
static void rtl8168c_1_hw_phy_config(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1616
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1617
	static const struct phy_reg phy_reg_init[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1618
		{ 0x1f, 0x0001 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1619
		{ 0x12, 0x2300 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1620
		{ 0x1f, 0x0002 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1621
		{ 0x00, 0x88d4 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1622
		{ 0x01, 0x82b1 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1623
		{ 0x03, 0x7002 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1624
		{ 0x08, 0x9e30 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1625
		{ 0x09, 0x01f0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1626
		{ 0x0a, 0x5500 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1627
		{ 0x0c, 0x00c8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1628
		{ 0x1f, 0x0003 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1629
		{ 0x12, 0xc096 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1630
		{ 0x16, 0x000a },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1631
		{ 0x1f, 0x0000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1632
		{ 0x1f, 0x0000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1633
		{ 0x09, 0x2000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1634
		{ 0x09, 0x0000 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1635
	};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1636
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1637
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1638
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1639
	mdio_patch(ioaddr, 0x14, 1 << 5);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1640
	mdio_patch(ioaddr, 0x0d, 1 << 5);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1641
	mdio_write(ioaddr, 0x1f, 0x0000);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1642
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1643
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1644
static void rtl8168c_2_hw_phy_config(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1645
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1646
	static const struct phy_reg phy_reg_init[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1647
		{ 0x1f, 0x0001 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1648
		{ 0x12, 0x2300 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1649
		{ 0x03, 0x802f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1650
		{ 0x02, 0x4f02 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1651
		{ 0x01, 0x0409 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1652
		{ 0x00, 0xf099 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1653
		{ 0x04, 0x9800 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1654
		{ 0x04, 0x9000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1655
		{ 0x1d, 0x3d98 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1656
		{ 0x1f, 0x0002 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1657
		{ 0x0c, 0x7eb8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1658
		{ 0x06, 0x0761 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1659
		{ 0x1f, 0x0003 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1660
		{ 0x16, 0x0f0a },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1661
		{ 0x1f, 0x0000 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1662
	};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1663
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1664
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1665
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1666
	mdio_patch(ioaddr, 0x16, 1 << 0);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1667
	mdio_patch(ioaddr, 0x14, 1 << 5);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1668
	mdio_patch(ioaddr, 0x0d, 1 << 5);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1669
	mdio_write(ioaddr, 0x1f, 0x0000);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1670
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1671
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1672
static void rtl8168c_3_hw_phy_config(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1673
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1674
	static const struct phy_reg phy_reg_init[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1675
		{ 0x1f, 0x0001 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1676
		{ 0x12, 0x2300 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1677
		{ 0x1d, 0x3d98 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1678
		{ 0x1f, 0x0002 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1679
		{ 0x0c, 0x7eb8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1680
		{ 0x06, 0x5461 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1681
		{ 0x1f, 0x0003 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1682
		{ 0x16, 0x0f0a },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1683
		{ 0x1f, 0x0000 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1684
	};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1685
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1686
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1687
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1688
	mdio_patch(ioaddr, 0x16, 1 << 0);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1689
	mdio_patch(ioaddr, 0x14, 1 << 5);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1690
	mdio_patch(ioaddr, 0x0d, 1 << 5);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1691
	mdio_write(ioaddr, 0x1f, 0x0000);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1692
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1693
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1694
static void rtl8168c_4_hw_phy_config(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1695
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1696
	rtl8168c_3_hw_phy_config(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1697
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1698
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1699
static void rtl8168d_1_hw_phy_config(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1700
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1701
	static const struct phy_reg phy_reg_init_0[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1702
		{ 0x1f, 0x0001 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1703
		{ 0x06, 0x4064 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1704
		{ 0x07, 0x2863 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1705
		{ 0x08, 0x059c },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1706
		{ 0x09, 0x26b4 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1707
		{ 0x0a, 0x6a19 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1708
		{ 0x0b, 0xdcc8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1709
		{ 0x10, 0xf06d },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1710
		{ 0x14, 0x7f68 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1711
		{ 0x18, 0x7fd9 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1712
		{ 0x1c, 0xf0ff },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1713
		{ 0x1d, 0x3d9c },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1714
		{ 0x1f, 0x0003 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1715
		{ 0x12, 0xf49f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1716
		{ 0x13, 0x070b },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1717
		{ 0x1a, 0x05ad },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1718
		{ 0x14, 0x94c0 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1719
	};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1720
	static const struct phy_reg phy_reg_init_1[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1721
		{ 0x1f, 0x0002 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1722
		{ 0x06, 0x5561 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1723
		{ 0x1f, 0x0005 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1724
		{ 0x05, 0x8332 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1725
		{ 0x06, 0x5561 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1726
	};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1727
	static const struct phy_reg phy_reg_init_2[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1728
		{ 0x1f, 0x0005 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1729
		{ 0x05, 0xffc2 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1730
		{ 0x1f, 0x0005 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1731
		{ 0x05, 0x8000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1732
		{ 0x06, 0xf8f9 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1733
		{ 0x06, 0xfaef },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1734
		{ 0x06, 0x59ee },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1735
		{ 0x06, 0xf8ea },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1736
		{ 0x06, 0x00ee },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1737
		{ 0x06, 0xf8eb },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1738
		{ 0x06, 0x00e0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1739
		{ 0x06, 0xf87c },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1740
		{ 0x06, 0xe1f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1741
		{ 0x06, 0x7d59 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1742
		{ 0x06, 0x0fef },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1743
		{ 0x06, 0x0139 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1744
		{ 0x06, 0x029e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1745
		{ 0x06, 0x06ef },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1746
		{ 0x06, 0x1039 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1747
		{ 0x06, 0x089f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1748
		{ 0x06, 0x2aee },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1749
		{ 0x06, 0xf8ea },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1750
		{ 0x06, 0x00ee },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1751
		{ 0x06, 0xf8eb },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1752
		{ 0x06, 0x01e0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1753
		{ 0x06, 0xf87c },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1754
		{ 0x06, 0xe1f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1755
		{ 0x06, 0x7d58 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1756
		{ 0x06, 0x409e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1757
		{ 0x06, 0x0f39 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1758
		{ 0x06, 0x46aa },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1759
		{ 0x06, 0x0bbf },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1760
		{ 0x06, 0x8290 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1761
		{ 0x06, 0xd682 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1762
		{ 0x06, 0x9802 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1763
		{ 0x06, 0x014f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1764
		{ 0x06, 0xae09 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1765
		{ 0x06, 0xbf82 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1766
		{ 0x06, 0x98d6 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1767
		{ 0x06, 0x82a0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1768
		{ 0x06, 0x0201 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1769
		{ 0x06, 0x4fef },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1770
		{ 0x06, 0x95fe },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1771
		{ 0x06, 0xfdfc },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1772
		{ 0x06, 0x05f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1773
		{ 0x06, 0xf9fa },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1774
		{ 0x06, 0xeef8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1775
		{ 0x06, 0xea00 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1776
		{ 0x06, 0xeef8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1777
		{ 0x06, 0xeb00 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1778
		{ 0x06, 0xe2f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1779
		{ 0x06, 0x7ce3 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1780
		{ 0x06, 0xf87d },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1781
		{ 0x06, 0xa511 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1782
		{ 0x06, 0x1112 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1783
		{ 0x06, 0xd240 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1784
		{ 0x06, 0xd644 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1785
		{ 0x06, 0x4402 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1786
		{ 0x06, 0x8217 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1787
		{ 0x06, 0xd2a0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1788
		{ 0x06, 0xd6aa },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1789
		{ 0x06, 0xaa02 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1790
		{ 0x06, 0x8217 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1791
		{ 0x06, 0xae0f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1792
		{ 0x06, 0xa544 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1793
		{ 0x06, 0x4402 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1794
		{ 0x06, 0xae4d },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1795
		{ 0x06, 0xa5aa },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1796
		{ 0x06, 0xaa02 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1797
		{ 0x06, 0xae47 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1798
		{ 0x06, 0xaf82 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1799
		{ 0x06, 0x13ee },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1800
		{ 0x06, 0x834e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1801
		{ 0x06, 0x00ee },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1802
		{ 0x06, 0x834d },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1803
		{ 0x06, 0x0fee },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1804
		{ 0x06, 0x834c },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1805
		{ 0x06, 0x0fee },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1806
		{ 0x06, 0x834f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1807
		{ 0x06, 0x00ee },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1808
		{ 0x06, 0x8351 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1809
		{ 0x06, 0x00ee },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1810
		{ 0x06, 0x834a },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1811
		{ 0x06, 0xffee },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1812
		{ 0x06, 0x834b },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1813
		{ 0x06, 0xffe0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1814
		{ 0x06, 0x8330 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1815
		{ 0x06, 0xe183 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1816
		{ 0x06, 0x3158 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1817
		{ 0x06, 0xfee4 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1818
		{ 0x06, 0xf88a },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1819
		{ 0x06, 0xe5f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1820
		{ 0x06, 0x8be0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1821
		{ 0x06, 0x8332 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1822
		{ 0x06, 0xe183 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1823
		{ 0x06, 0x3359 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1824
		{ 0x06, 0x0fe2 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1825
		{ 0x06, 0x834d },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1826
		{ 0x06, 0x0c24 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1827
		{ 0x06, 0x5af0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1828
		{ 0x06, 0x1e12 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1829
		{ 0x06, 0xe4f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1830
		{ 0x06, 0x8ce5 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1831
		{ 0x06, 0xf88d },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1832
		{ 0x06, 0xaf82 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1833
		{ 0x06, 0x13e0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1834
		{ 0x06, 0x834f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1835
		{ 0x06, 0x10e4 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1836
		{ 0x06, 0x834f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1837
		{ 0x06, 0xe083 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1838
		{ 0x06, 0x4e78 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1839
		{ 0x06, 0x009f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1840
		{ 0x06, 0x0ae0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1841
		{ 0x06, 0x834f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1842
		{ 0x06, 0xa010 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1843
		{ 0x06, 0xa5ee },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1844
		{ 0x06, 0x834e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1845
		{ 0x06, 0x01e0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1846
		{ 0x06, 0x834e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1847
		{ 0x06, 0x7805 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1848
		{ 0x06, 0x9e9a },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1849
		{ 0x06, 0xe083 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1850
		{ 0x06, 0x4e78 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1851
		{ 0x06, 0x049e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1852
		{ 0x06, 0x10e0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1853
		{ 0x06, 0x834e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1854
		{ 0x06, 0x7803 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1855
		{ 0x06, 0x9e0f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1856
		{ 0x06, 0xe083 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1857
		{ 0x06, 0x4e78 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1858
		{ 0x06, 0x019e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1859
		{ 0x06, 0x05ae },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1860
		{ 0x06, 0x0caf },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1861
		{ 0x06, 0x81f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1862
		{ 0x06, 0xaf81 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1863
		{ 0x06, 0xa3af },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1864
		{ 0x06, 0x81dc },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1865
		{ 0x06, 0xaf82 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1866
		{ 0x06, 0x13ee },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1867
		{ 0x06, 0x8348 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1868
		{ 0x06, 0x00ee },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1869
		{ 0x06, 0x8349 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1870
		{ 0x06, 0x00e0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1871
		{ 0x06, 0x8351 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1872
		{ 0x06, 0x10e4 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1873
		{ 0x06, 0x8351 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1874
		{ 0x06, 0x5801 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1875
		{ 0x06, 0x9fea },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1876
		{ 0x06, 0xd000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1877
		{ 0x06, 0xd180 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1878
		{ 0x06, 0x1f66 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1879
		{ 0x06, 0xe2f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1880
		{ 0x06, 0xeae3 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1881
		{ 0x06, 0xf8eb },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1882
		{ 0x06, 0x5af8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1883
		{ 0x06, 0x1e20 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1884
		{ 0x06, 0xe6f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1885
		{ 0x06, 0xeae5 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1886
		{ 0x06, 0xf8eb },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1887
		{ 0x06, 0xd302 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1888
		{ 0x06, 0xb3fe },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1889
		{ 0x06, 0xe2f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1890
		{ 0x06, 0x7cef },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1891
		{ 0x06, 0x325b },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1892
		{ 0x06, 0x80e3 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1893
		{ 0x06, 0xf87d },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1894
		{ 0x06, 0x9e03 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1895
		{ 0x06, 0x7dff },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1896
		{ 0x06, 0xff0d },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1897
		{ 0x06, 0x581c },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1898
		{ 0x06, 0x551a },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1899
		{ 0x06, 0x6511 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1900
		{ 0x06, 0xa190 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1901
		{ 0x06, 0xd3e2 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1902
		{ 0x06, 0x8348 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1903
		{ 0x06, 0xe383 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1904
		{ 0x06, 0x491b },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1905
		{ 0x06, 0x56ab },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1906
		{ 0x06, 0x08ef },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1907
		{ 0x06, 0x56e6 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1908
		{ 0x06, 0x8348 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1909
		{ 0x06, 0xe783 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1910
		{ 0x06, 0x4910 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1911
		{ 0x06, 0xd180 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1912
		{ 0x06, 0x1f66 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1913
		{ 0x06, 0xa004 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1914
		{ 0x06, 0xb9e2 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1915
		{ 0x06, 0x8348 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1916
		{ 0x06, 0xe383 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1917
		{ 0x06, 0x49ef },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1918
		{ 0x06, 0x65e2 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1919
		{ 0x06, 0x834a },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1920
		{ 0x06, 0xe383 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1921
		{ 0x06, 0x4b1b },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1922
		{ 0x06, 0x56aa },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1923
		{ 0x06, 0x0eef },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1924
		{ 0x06, 0x56e6 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1925
		{ 0x06, 0x834a },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1926
		{ 0x06, 0xe783 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1927
		{ 0x06, 0x4be2 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1928
		{ 0x06, 0x834d },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1929
		{ 0x06, 0xe683 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1930
		{ 0x06, 0x4ce0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1931
		{ 0x06, 0x834d },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1932
		{ 0x06, 0xa000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1933
		{ 0x06, 0x0caf },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1934
		{ 0x06, 0x81dc },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1935
		{ 0x06, 0xe083 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1936
		{ 0x06, 0x4d10 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1937
		{ 0x06, 0xe483 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1938
		{ 0x06, 0x4dae },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1939
		{ 0x06, 0x0480 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1940
		{ 0x06, 0xe483 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1941
		{ 0x06, 0x4de0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1942
		{ 0x06, 0x834e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1943
		{ 0x06, 0x7803 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1944
		{ 0x06, 0x9e0b },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1945
		{ 0x06, 0xe083 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1946
		{ 0x06, 0x4e78 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1947
		{ 0x06, 0x049e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1948
		{ 0x06, 0x04ee },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1949
		{ 0x06, 0x834e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1950
		{ 0x06, 0x02e0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1951
		{ 0x06, 0x8332 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1952
		{ 0x06, 0xe183 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1953
		{ 0x06, 0x3359 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1954
		{ 0x06, 0x0fe2 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1955
		{ 0x06, 0x834d },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1956
		{ 0x06, 0x0c24 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1957
		{ 0x06, 0x5af0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1958
		{ 0x06, 0x1e12 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1959
		{ 0x06, 0xe4f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1960
		{ 0x06, 0x8ce5 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1961
		{ 0x06, 0xf88d },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1962
		{ 0x06, 0xe083 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1963
		{ 0x06, 0x30e1 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1964
		{ 0x06, 0x8331 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1965
		{ 0x06, 0x6801 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1966
		{ 0x06, 0xe4f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1967
		{ 0x06, 0x8ae5 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1968
		{ 0x06, 0xf88b },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1969
		{ 0x06, 0xae37 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1970
		{ 0x06, 0xee83 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1971
		{ 0x06, 0x4e03 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1972
		{ 0x06, 0xe083 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1973
		{ 0x06, 0x4ce1 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1974
		{ 0x06, 0x834d },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1975
		{ 0x06, 0x1b01 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1976
		{ 0x06, 0x9e04 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1977
		{ 0x06, 0xaaa1 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1978
		{ 0x06, 0xaea8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1979
		{ 0x06, 0xee83 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1980
		{ 0x06, 0x4e04 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1981
		{ 0x06, 0xee83 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1982
		{ 0x06, 0x4f00 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1983
		{ 0x06, 0xaeab },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1984
		{ 0x06, 0xe083 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1985
		{ 0x06, 0x4f78 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1986
		{ 0x06, 0x039f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1987
		{ 0x06, 0x14ee },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1988
		{ 0x06, 0x834e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1989
		{ 0x06, 0x05d2 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1990
		{ 0x06, 0x40d6 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1991
		{ 0x06, 0x5554 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1992
		{ 0x06, 0x0282 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1993
		{ 0x06, 0x17d2 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1994
		{ 0x06, 0xa0d6 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1995
		{ 0x06, 0xba00 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1996
		{ 0x06, 0x0282 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1997
		{ 0x06, 0x17fe },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1998
		{ 0x06, 0xfdfc },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1999
		{ 0x06, 0x05f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2000
		{ 0x06, 0xe0f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2001
		{ 0x06, 0x60e1 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2002
		{ 0x06, 0xf861 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2003
		{ 0x06, 0x6802 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2004
		{ 0x06, 0xe4f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2005
		{ 0x06, 0x60e5 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2006
		{ 0x06, 0xf861 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2007
		{ 0x06, 0xe0f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2008
		{ 0x06, 0x48e1 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2009
		{ 0x06, 0xf849 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2010
		{ 0x06, 0x580f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2011
		{ 0x06, 0x1e02 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2012
		{ 0x06, 0xe4f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2013
		{ 0x06, 0x48e5 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2014
		{ 0x06, 0xf849 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2015
		{ 0x06, 0xd000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2016
		{ 0x06, 0x0282 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2017
		{ 0x06, 0x5bbf },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2018
		{ 0x06, 0x8350 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2019
		{ 0x06, 0xef46 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2020
		{ 0x06, 0xdc19 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2021
		{ 0x06, 0xddd0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2022
		{ 0x06, 0x0102 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2023
		{ 0x06, 0x825b },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2024
		{ 0x06, 0x0282 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2025
		{ 0x06, 0x77e0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2026
		{ 0x06, 0xf860 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2027
		{ 0x06, 0xe1f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2028
		{ 0x06, 0x6158 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2029
		{ 0x06, 0xfde4 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2030
		{ 0x06, 0xf860 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2031
		{ 0x06, 0xe5f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2032
		{ 0x06, 0x61fc },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2033
		{ 0x06, 0x04f9 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2034
		{ 0x06, 0xfafb },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2035
		{ 0x06, 0xc6bf },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2036
		{ 0x06, 0xf840 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2037
		{ 0x06, 0xbe83 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2038
		{ 0x06, 0x50a0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2039
		{ 0x06, 0x0101 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2040
		{ 0x06, 0x071b },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2041
		{ 0x06, 0x89cf },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2042
		{ 0x06, 0xd208 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2043
		{ 0x06, 0xebdb },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2044
		{ 0x06, 0x19b2 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2045
		{ 0x06, 0xfbff },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2046
		{ 0x06, 0xfefd },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2047
		{ 0x06, 0x04f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2048
		{ 0x06, 0xe0f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2049
		{ 0x06, 0x48e1 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2050
		{ 0x06, 0xf849 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2051
		{ 0x06, 0x6808 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2052
		{ 0x06, 0xe4f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2053
		{ 0x06, 0x48e5 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2054
		{ 0x06, 0xf849 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2055
		{ 0x06, 0x58f7 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2056
		{ 0x06, 0xe4f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2057
		{ 0x06, 0x48e5 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2058
		{ 0x06, 0xf849 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2059
		{ 0x06, 0xfc04 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2060
		{ 0x06, 0x4d20 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2061
		{ 0x06, 0x0002 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2062
		{ 0x06, 0x4e22 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2063
		{ 0x06, 0x0002 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2064
		{ 0x06, 0x4ddf },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2065
		{ 0x06, 0xff01 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2066
		{ 0x06, 0x4edd },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2067
		{ 0x06, 0xff01 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2068
		{ 0x05, 0x83d4 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2069
		{ 0x06, 0x8000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2070
		{ 0x05, 0x83d8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2071
		{ 0x06, 0x8051 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2072
		{ 0x02, 0x6010 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2073
		{ 0x03, 0xdc00 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2074
		{ 0x05, 0xfff6 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2075
		{ 0x06, 0x00fc },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2076
		{ 0x1f, 0x0000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2077
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2078
		{ 0x1f, 0x0000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2079
		{ 0x0d, 0xf880 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2080
		{ 0x1f, 0x0000 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2081
	};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2082
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2083
	rtl_phy_write(ioaddr, phy_reg_init_0, ARRAY_SIZE(phy_reg_init_0));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2084
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2085
	mdio_write(ioaddr, 0x1f, 0x0002);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2086
	mdio_plus_minus(ioaddr, 0x0b, 0x0010, 0x00ef);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2087
	mdio_plus_minus(ioaddr, 0x0c, 0xa200, 0x5d00);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2088
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2089
	rtl_phy_write(ioaddr, phy_reg_init_1, ARRAY_SIZE(phy_reg_init_1));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2090
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2091
	if (rtl8168d_efuse_read(ioaddr, 0x01) == 0xb1) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2092
		static const struct phy_reg phy_reg_init[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2093
			{ 0x1f, 0x0002 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2094
			{ 0x05, 0x669a },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2095
			{ 0x1f, 0x0005 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2096
			{ 0x05, 0x8330 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2097
			{ 0x06, 0x669a },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2098
			{ 0x1f, 0x0002 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2099
		};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2100
		int val;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2101
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2102
		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2103
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2104
		val = mdio_read(ioaddr, 0x0d);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2105
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2106
		if ((val & 0x00ff) != 0x006c) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2107
			static const u32 set[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2108
				0x0065, 0x0066, 0x0067, 0x0068,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2109
				0x0069, 0x006a, 0x006b, 0x006c
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2110
			};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2111
			int i;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2112
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2113
			mdio_write(ioaddr, 0x1f, 0x0002);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2114
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2115
			val &= 0xff00;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2116
			for (i = 0; i < ARRAY_SIZE(set); i++)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2117
				mdio_write(ioaddr, 0x0d, val | set[i]);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2118
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2119
	} else {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2120
		static const struct phy_reg phy_reg_init[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2121
			{ 0x1f, 0x0002 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2122
			{ 0x05, 0x6662 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2123
			{ 0x1f, 0x0005 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2124
			{ 0x05, 0x8330 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2125
			{ 0x06, 0x6662 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2126
		};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2127
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2128
		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2129
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2130
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2131
	mdio_write(ioaddr, 0x1f, 0x0002);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2132
	mdio_patch(ioaddr, 0x0d, 0x0300);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2133
	mdio_patch(ioaddr, 0x0f, 0x0010);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2134
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2135
	mdio_write(ioaddr, 0x1f, 0x0002);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2136
	mdio_plus_minus(ioaddr, 0x02, 0x0100, 0x0600);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2137
	mdio_plus_minus(ioaddr, 0x03, 0x0000, 0xe000);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2138
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2139
	rtl_phy_write(ioaddr, phy_reg_init_2, ARRAY_SIZE(phy_reg_init_2));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2140
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2141
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2142
static void rtl8168d_2_hw_phy_config(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2143
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2144
	static const struct phy_reg phy_reg_init_0[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2145
		{ 0x1f, 0x0001 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2146
		{ 0x06, 0x4064 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2147
		{ 0x07, 0x2863 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2148
		{ 0x08, 0x059c },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2149
		{ 0x09, 0x26b4 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2150
		{ 0x0a, 0x6a19 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2151
		{ 0x0b, 0xdcc8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2152
		{ 0x10, 0xf06d },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2153
		{ 0x14, 0x7f68 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2154
		{ 0x18, 0x7fd9 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2155
		{ 0x1c, 0xf0ff },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2156
		{ 0x1d, 0x3d9c },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2157
		{ 0x1f, 0x0003 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2158
		{ 0x12, 0xf49f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2159
		{ 0x13, 0x070b },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2160
		{ 0x1a, 0x05ad },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2161
		{ 0x14, 0x94c0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2162
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2163
		{ 0x1f, 0x0002 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2164
		{ 0x06, 0x5561 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2165
		{ 0x1f, 0x0005 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2166
		{ 0x05, 0x8332 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2167
		{ 0x06, 0x5561 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2168
	};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2169
	static const struct phy_reg phy_reg_init_1[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2170
		{ 0x1f, 0x0005 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2171
		{ 0x05, 0xffc2 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2172
		{ 0x1f, 0x0005 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2173
		{ 0x05, 0x8000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2174
		{ 0x06, 0xf8f9 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2175
		{ 0x06, 0xfaee },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2176
		{ 0x06, 0xf8ea },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2177
		{ 0x06, 0x00ee },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2178
		{ 0x06, 0xf8eb },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2179
		{ 0x06, 0x00e2 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2180
		{ 0x06, 0xf87c },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2181
		{ 0x06, 0xe3f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2182
		{ 0x06, 0x7da5 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2183
		{ 0x06, 0x1111 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2184
		{ 0x06, 0x12d2 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2185
		{ 0x06, 0x40d6 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2186
		{ 0x06, 0x4444 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2187
		{ 0x06, 0x0281 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2188
		{ 0x06, 0xc6d2 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2189
		{ 0x06, 0xa0d6 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2190
		{ 0x06, 0xaaaa },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2191
		{ 0x06, 0x0281 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2192
		{ 0x06, 0xc6ae },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2193
		{ 0x06, 0x0fa5 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2194
		{ 0x06, 0x4444 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2195
		{ 0x06, 0x02ae },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2196
		{ 0x06, 0x4da5 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2197
		{ 0x06, 0xaaaa },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2198
		{ 0x06, 0x02ae },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2199
		{ 0x06, 0x47af },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2200
		{ 0x06, 0x81c2 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2201
		{ 0x06, 0xee83 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2202
		{ 0x06, 0x4e00 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2203
		{ 0x06, 0xee83 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2204
		{ 0x06, 0x4d0f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2205
		{ 0x06, 0xee83 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2206
		{ 0x06, 0x4c0f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2207
		{ 0x06, 0xee83 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2208
		{ 0x06, 0x4f00 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2209
		{ 0x06, 0xee83 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2210
		{ 0x06, 0x5100 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2211
		{ 0x06, 0xee83 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2212
		{ 0x06, 0x4aff },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2213
		{ 0x06, 0xee83 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2214
		{ 0x06, 0x4bff },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2215
		{ 0x06, 0xe083 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2216
		{ 0x06, 0x30e1 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2217
		{ 0x06, 0x8331 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2218
		{ 0x06, 0x58fe },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2219
		{ 0x06, 0xe4f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2220
		{ 0x06, 0x8ae5 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2221
		{ 0x06, 0xf88b },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2222
		{ 0x06, 0xe083 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2223
		{ 0x06, 0x32e1 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2224
		{ 0x06, 0x8333 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2225
		{ 0x06, 0x590f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2226
		{ 0x06, 0xe283 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2227
		{ 0x06, 0x4d0c },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2228
		{ 0x06, 0x245a },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2229
		{ 0x06, 0xf01e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2230
		{ 0x06, 0x12e4 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2231
		{ 0x06, 0xf88c },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2232
		{ 0x06, 0xe5f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2233
		{ 0x06, 0x8daf },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2234
		{ 0x06, 0x81c2 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2235
		{ 0x06, 0xe083 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2236
		{ 0x06, 0x4f10 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2237
		{ 0x06, 0xe483 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2238
		{ 0x06, 0x4fe0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2239
		{ 0x06, 0x834e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2240
		{ 0x06, 0x7800 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2241
		{ 0x06, 0x9f0a },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2242
		{ 0x06, 0xe083 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2243
		{ 0x06, 0x4fa0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2244
		{ 0x06, 0x10a5 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2245
		{ 0x06, 0xee83 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2246
		{ 0x06, 0x4e01 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2247
		{ 0x06, 0xe083 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2248
		{ 0x06, 0x4e78 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2249
		{ 0x06, 0x059e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2250
		{ 0x06, 0x9ae0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2251
		{ 0x06, 0x834e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2252
		{ 0x06, 0x7804 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2253
		{ 0x06, 0x9e10 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2254
		{ 0x06, 0xe083 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2255
		{ 0x06, 0x4e78 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2256
		{ 0x06, 0x039e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2257
		{ 0x06, 0x0fe0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2258
		{ 0x06, 0x834e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2259
		{ 0x06, 0x7801 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2260
		{ 0x06, 0x9e05 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2261
		{ 0x06, 0xae0c },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2262
		{ 0x06, 0xaf81 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2263
		{ 0x06, 0xa7af },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2264
		{ 0x06, 0x8152 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2265
		{ 0x06, 0xaf81 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2266
		{ 0x06, 0x8baf },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2267
		{ 0x06, 0x81c2 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2268
		{ 0x06, 0xee83 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2269
		{ 0x06, 0x4800 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2270
		{ 0x06, 0xee83 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2271
		{ 0x06, 0x4900 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2272
		{ 0x06, 0xe083 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2273
		{ 0x06, 0x5110 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2274
		{ 0x06, 0xe483 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2275
		{ 0x06, 0x5158 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2276
		{ 0x06, 0x019f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2277
		{ 0x06, 0xead0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2278
		{ 0x06, 0x00d1 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2279
		{ 0x06, 0x801f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2280
		{ 0x06, 0x66e2 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2281
		{ 0x06, 0xf8ea },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2282
		{ 0x06, 0xe3f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2283
		{ 0x06, 0xeb5a },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2284
		{ 0x06, 0xf81e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2285
		{ 0x06, 0x20e6 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2286
		{ 0x06, 0xf8ea },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2287
		{ 0x06, 0xe5f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2288
		{ 0x06, 0xebd3 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2289
		{ 0x06, 0x02b3 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2290
		{ 0x06, 0xfee2 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2291
		{ 0x06, 0xf87c },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2292
		{ 0x06, 0xef32 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2293
		{ 0x06, 0x5b80 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2294
		{ 0x06, 0xe3f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2295
		{ 0x06, 0x7d9e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2296
		{ 0x06, 0x037d },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2297
		{ 0x06, 0xffff },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2298
		{ 0x06, 0x0d58 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2299
		{ 0x06, 0x1c55 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2300
		{ 0x06, 0x1a65 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2301
		{ 0x06, 0x11a1 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2302
		{ 0x06, 0x90d3 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2303
		{ 0x06, 0xe283 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2304
		{ 0x06, 0x48e3 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2305
		{ 0x06, 0x8349 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2306
		{ 0x06, 0x1b56 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2307
		{ 0x06, 0xab08 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2308
		{ 0x06, 0xef56 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2309
		{ 0x06, 0xe683 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2310
		{ 0x06, 0x48e7 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2311
		{ 0x06, 0x8349 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2312
		{ 0x06, 0x10d1 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2313
		{ 0x06, 0x801f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2314
		{ 0x06, 0x66a0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2315
		{ 0x06, 0x04b9 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2316
		{ 0x06, 0xe283 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2317
		{ 0x06, 0x48e3 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2318
		{ 0x06, 0x8349 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2319
		{ 0x06, 0xef65 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2320
		{ 0x06, 0xe283 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2321
		{ 0x06, 0x4ae3 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2322
		{ 0x06, 0x834b },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2323
		{ 0x06, 0x1b56 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2324
		{ 0x06, 0xaa0e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2325
		{ 0x06, 0xef56 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2326
		{ 0x06, 0xe683 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2327
		{ 0x06, 0x4ae7 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2328
		{ 0x06, 0x834b },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2329
		{ 0x06, 0xe283 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2330
		{ 0x06, 0x4de6 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2331
		{ 0x06, 0x834c },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2332
		{ 0x06, 0xe083 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2333
		{ 0x06, 0x4da0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2334
		{ 0x06, 0x000c },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2335
		{ 0x06, 0xaf81 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2336
		{ 0x06, 0x8be0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2337
		{ 0x06, 0x834d },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2338
		{ 0x06, 0x10e4 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2339
		{ 0x06, 0x834d },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2340
		{ 0x06, 0xae04 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2341
		{ 0x06, 0x80e4 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2342
		{ 0x06, 0x834d },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2343
		{ 0x06, 0xe083 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2344
		{ 0x06, 0x4e78 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2345
		{ 0x06, 0x039e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2346
		{ 0x06, 0x0be0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2347
		{ 0x06, 0x834e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2348
		{ 0x06, 0x7804 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2349
		{ 0x06, 0x9e04 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2350
		{ 0x06, 0xee83 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2351
		{ 0x06, 0x4e02 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2352
		{ 0x06, 0xe083 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2353
		{ 0x06, 0x32e1 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2354
		{ 0x06, 0x8333 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2355
		{ 0x06, 0x590f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2356
		{ 0x06, 0xe283 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2357
		{ 0x06, 0x4d0c },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2358
		{ 0x06, 0x245a },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2359
		{ 0x06, 0xf01e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2360
		{ 0x06, 0x12e4 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2361
		{ 0x06, 0xf88c },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2362
		{ 0x06, 0xe5f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2363
		{ 0x06, 0x8de0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2364
		{ 0x06, 0x8330 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2365
		{ 0x06, 0xe183 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2366
		{ 0x06, 0x3168 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2367
		{ 0x06, 0x01e4 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2368
		{ 0x06, 0xf88a },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2369
		{ 0x06, 0xe5f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2370
		{ 0x06, 0x8bae },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2371
		{ 0x06, 0x37ee },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2372
		{ 0x06, 0x834e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2373
		{ 0x06, 0x03e0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2374
		{ 0x06, 0x834c },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2375
		{ 0x06, 0xe183 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2376
		{ 0x06, 0x4d1b },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2377
		{ 0x06, 0x019e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2378
		{ 0x06, 0x04aa },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2379
		{ 0x06, 0xa1ae },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2380
		{ 0x06, 0xa8ee },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2381
		{ 0x06, 0x834e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2382
		{ 0x06, 0x04ee },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2383
		{ 0x06, 0x834f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2384
		{ 0x06, 0x00ae },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2385
		{ 0x06, 0xabe0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2386
		{ 0x06, 0x834f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2387
		{ 0x06, 0x7803 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2388
		{ 0x06, 0x9f14 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2389
		{ 0x06, 0xee83 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2390
		{ 0x06, 0x4e05 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2391
		{ 0x06, 0xd240 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2392
		{ 0x06, 0xd655 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2393
		{ 0x06, 0x5402 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2394
		{ 0x06, 0x81c6 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2395
		{ 0x06, 0xd2a0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2396
		{ 0x06, 0xd6ba },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2397
		{ 0x06, 0x0002 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2398
		{ 0x06, 0x81c6 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2399
		{ 0x06, 0xfefd },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2400
		{ 0x06, 0xfc05 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2401
		{ 0x06, 0xf8e0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2402
		{ 0x06, 0xf860 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2403
		{ 0x06, 0xe1f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2404
		{ 0x06, 0x6168 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2405
		{ 0x06, 0x02e4 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2406
		{ 0x06, 0xf860 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2407
		{ 0x06, 0xe5f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2408
		{ 0x06, 0x61e0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2409
		{ 0x06, 0xf848 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2410
		{ 0x06, 0xe1f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2411
		{ 0x06, 0x4958 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2412
		{ 0x06, 0x0f1e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2413
		{ 0x06, 0x02e4 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2414
		{ 0x06, 0xf848 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2415
		{ 0x06, 0xe5f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2416
		{ 0x06, 0x49d0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2417
		{ 0x06, 0x0002 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2418
		{ 0x06, 0x820a },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2419
		{ 0x06, 0xbf83 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2420
		{ 0x06, 0x50ef },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2421
		{ 0x06, 0x46dc },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2422
		{ 0x06, 0x19dd },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2423
		{ 0x06, 0xd001 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2424
		{ 0x06, 0x0282 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2425
		{ 0x06, 0x0a02 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2426
		{ 0x06, 0x8226 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2427
		{ 0x06, 0xe0f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2428
		{ 0x06, 0x60e1 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2429
		{ 0x06, 0xf861 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2430
		{ 0x06, 0x58fd },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2431
		{ 0x06, 0xe4f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2432
		{ 0x06, 0x60e5 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2433
		{ 0x06, 0xf861 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2434
		{ 0x06, 0xfc04 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2435
		{ 0x06, 0xf9fa },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2436
		{ 0x06, 0xfbc6 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2437
		{ 0x06, 0xbff8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2438
		{ 0x06, 0x40be },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2439
		{ 0x06, 0x8350 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2440
		{ 0x06, 0xa001 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2441
		{ 0x06, 0x0107 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2442
		{ 0x06, 0x1b89 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2443
		{ 0x06, 0xcfd2 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2444
		{ 0x06, 0x08eb },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2445
		{ 0x06, 0xdb19 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2446
		{ 0x06, 0xb2fb },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2447
		{ 0x06, 0xfffe },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2448
		{ 0x06, 0xfd04 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2449
		{ 0x06, 0xf8e0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2450
		{ 0x06, 0xf848 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2451
		{ 0x06, 0xe1f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2452
		{ 0x06, 0x4968 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2453
		{ 0x06, 0x08e4 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2454
		{ 0x06, 0xf848 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2455
		{ 0x06, 0xe5f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2456
		{ 0x06, 0x4958 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2457
		{ 0x06, 0xf7e4 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2458
		{ 0x06, 0xf848 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2459
		{ 0x06, 0xe5f8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2460
		{ 0x06, 0x49fc },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2461
		{ 0x06, 0x044d },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2462
		{ 0x06, 0x2000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2463
		{ 0x06, 0x024e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2464
		{ 0x06, 0x2200 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2465
		{ 0x06, 0x024d },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2466
		{ 0x06, 0xdfff },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2467
		{ 0x06, 0x014e },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2468
		{ 0x06, 0xddff },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2469
		{ 0x06, 0x0100 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2470
		{ 0x05, 0x83d8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2471
		{ 0x06, 0x8000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2472
		{ 0x03, 0xdc00 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2473
		{ 0x05, 0xfff6 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2474
		{ 0x06, 0x00fc },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2475
		{ 0x1f, 0x0000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2476
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2477
		{ 0x1f, 0x0000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2478
		{ 0x0d, 0xf880 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2479
		{ 0x1f, 0x0000 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2480
	};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2481
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2482
	rtl_phy_write(ioaddr, phy_reg_init_0, ARRAY_SIZE(phy_reg_init_0));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2483
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2484
	if (rtl8168d_efuse_read(ioaddr, 0x01) == 0xb1) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2485
		static const struct phy_reg phy_reg_init[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2486
			{ 0x1f, 0x0002 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2487
			{ 0x05, 0x669a },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2488
			{ 0x1f, 0x0005 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2489
			{ 0x05, 0x8330 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2490
			{ 0x06, 0x669a },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2491
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2492
			{ 0x1f, 0x0002 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2493
		};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2494
		int val;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2495
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2496
		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2497
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2498
		val = mdio_read(ioaddr, 0x0d);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2499
		if ((val & 0x00ff) != 0x006c) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2500
			u32 set[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2501
				0x0065, 0x0066, 0x0067, 0x0068,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2502
				0x0069, 0x006a, 0x006b, 0x006c
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2503
			};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2504
			int i;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2505
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2506
			mdio_write(ioaddr, 0x1f, 0x0002);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2507
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2508
			val &= 0xff00;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2509
			for (i = 0; i < ARRAY_SIZE(set); i++)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2510
				mdio_write(ioaddr, 0x0d, val | set[i]);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2511
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2512
	} else {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2513
		static const struct phy_reg phy_reg_init[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2514
			{ 0x1f, 0x0002 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2515
			{ 0x05, 0x2642 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2516
			{ 0x1f, 0x0005 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2517
			{ 0x05, 0x8330 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2518
			{ 0x06, 0x2642 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2519
		};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2520
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2521
		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2522
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2523
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2524
	mdio_write(ioaddr, 0x1f, 0x0002);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2525
	mdio_plus_minus(ioaddr, 0x02, 0x0100, 0x0600);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2526
	mdio_plus_minus(ioaddr, 0x03, 0x0000, 0xe000);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2527
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2528
	mdio_write(ioaddr, 0x1f, 0x0001);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2529
	mdio_write(ioaddr, 0x17, 0x0cc0);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2530
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2531
	mdio_write(ioaddr, 0x1f, 0x0002);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2532
	mdio_patch(ioaddr, 0x0f, 0x0017);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2533
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2534
	rtl_phy_write(ioaddr, phy_reg_init_1, ARRAY_SIZE(phy_reg_init_1));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2535
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2536
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2537
static void rtl8168d_3_hw_phy_config(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2538
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2539
	static const struct phy_reg phy_reg_init[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2540
		{ 0x1f, 0x0002 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2541
		{ 0x10, 0x0008 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2542
		{ 0x0d, 0x006c },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2543
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2544
		{ 0x1f, 0x0000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2545
		{ 0x0d, 0xf880 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2546
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2547
		{ 0x1f, 0x0001 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2548
		{ 0x17, 0x0cc0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2549
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2550
		{ 0x1f, 0x0001 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2551
		{ 0x0b, 0xa4d8 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2552
		{ 0x09, 0x281c },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2553
		{ 0x07, 0x2883 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2554
		{ 0x0a, 0x6b35 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2555
		{ 0x1d, 0x3da4 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2556
		{ 0x1c, 0xeffd },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2557
		{ 0x14, 0x7f52 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2558
		{ 0x18, 0x7fc6 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2559
		{ 0x08, 0x0601 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2560
		{ 0x06, 0x4063 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2561
		{ 0x10, 0xf074 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2562
		{ 0x1f, 0x0003 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2563
		{ 0x13, 0x0789 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2564
		{ 0x12, 0xf4bd },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2565
		{ 0x1a, 0x04fd },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2566
		{ 0x14, 0x84b0 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2567
		{ 0x1f, 0x0000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2568
		{ 0x00, 0x9200 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2569
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2570
		{ 0x1f, 0x0005 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2571
		{ 0x01, 0x0340 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2572
		{ 0x1f, 0x0001 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2573
		{ 0x04, 0x4000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2574
		{ 0x03, 0x1d21 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2575
		{ 0x02, 0x0c32 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2576
		{ 0x01, 0x0200 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2577
		{ 0x00, 0x5554 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2578
		{ 0x04, 0x4800 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2579
		{ 0x04, 0x4000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2580
		{ 0x04, 0xf000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2581
		{ 0x03, 0xdf01 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2582
		{ 0x02, 0xdf20 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2583
		{ 0x01, 0x101a },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2584
		{ 0x00, 0xa0ff },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2585
		{ 0x04, 0xf800 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2586
		{ 0x04, 0xf000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2587
		{ 0x1f, 0x0000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2588
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2589
		{ 0x1f, 0x0007 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2590
		{ 0x1e, 0x0023 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2591
		{ 0x16, 0x0000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2592
		{ 0x1f, 0x0000 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2593
	};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2594
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2595
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2596
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2597
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2598
static void rtl8102e_hw_phy_config(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2599
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2600
	static const struct phy_reg phy_reg_init[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2601
		{ 0x1f, 0x0003 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2602
		{ 0x08, 0x441d },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2603
		{ 0x01, 0x9100 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2604
		{ 0x1f, 0x0000 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2605
	};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2606
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2607
	mdio_write(ioaddr, 0x1f, 0x0000);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2608
	mdio_patch(ioaddr, 0x11, 1 << 12);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2609
	mdio_patch(ioaddr, 0x19, 1 << 13);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2610
	mdio_patch(ioaddr, 0x10, 1 << 15);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2611
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2612
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2613
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2614
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2615
static void rtl_hw_phy_config(struct net_device *dev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2616
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2617
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2618
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2619
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2620
	rtl8169_print_mac_version(tp);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2621
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2622
	switch (tp->mac_version) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2623
	case RTL_GIGA_MAC_VER_01:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2624
		break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2625
	case RTL_GIGA_MAC_VER_02:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2626
	case RTL_GIGA_MAC_VER_03:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2627
		rtl8169s_hw_phy_config(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2628
		break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2629
	case RTL_GIGA_MAC_VER_04:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2630
		rtl8169sb_hw_phy_config(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2631
		break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2632
	case RTL_GIGA_MAC_VER_05:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2633
		rtl8169scd_hw_phy_config(tp, ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2634
		break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2635
	case RTL_GIGA_MAC_VER_06:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2636
		rtl8169sce_hw_phy_config(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2637
		break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2638
	case RTL_GIGA_MAC_VER_07:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2639
	case RTL_GIGA_MAC_VER_08:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2640
	case RTL_GIGA_MAC_VER_09:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2641
		rtl8102e_hw_phy_config(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2642
		break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2643
	case RTL_GIGA_MAC_VER_11:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2644
		rtl8168bb_hw_phy_config(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2645
		break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2646
	case RTL_GIGA_MAC_VER_12:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2647
		rtl8168bef_hw_phy_config(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2648
		break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2649
	case RTL_GIGA_MAC_VER_17:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2650
		rtl8168bef_hw_phy_config(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2651
		break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2652
	case RTL_GIGA_MAC_VER_18:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2653
		rtl8168cp_1_hw_phy_config(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2654
		break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2655
	case RTL_GIGA_MAC_VER_19:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2656
		rtl8168c_1_hw_phy_config(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2657
		break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2658
	case RTL_GIGA_MAC_VER_20:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2659
		rtl8168c_2_hw_phy_config(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2660
		break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2661
	case RTL_GIGA_MAC_VER_21:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2662
		rtl8168c_3_hw_phy_config(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2663
		break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2664
	case RTL_GIGA_MAC_VER_22:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2665
		rtl8168c_4_hw_phy_config(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2666
		break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2667
	case RTL_GIGA_MAC_VER_23:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2668
	case RTL_GIGA_MAC_VER_24:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2669
		rtl8168cp_2_hw_phy_config(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2670
		break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2671
	case RTL_GIGA_MAC_VER_25:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2672
		rtl8168d_1_hw_phy_config(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2673
		break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2674
	case RTL_GIGA_MAC_VER_26:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2675
		rtl8168d_2_hw_phy_config(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2676
		break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2677
	case RTL_GIGA_MAC_VER_27:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2678
		rtl8168d_3_hw_phy_config(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2679
		break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2680
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2681
	default:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2682
		break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2683
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2684
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2685
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2686
static void rtl8169_phy_timer(unsigned long __opaque)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2687
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2688
	struct net_device *dev = (struct net_device *)__opaque;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2689
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2690
	struct timer_list *timer = &tp->timer;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2691
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2692
	unsigned long timeout = RTL8169_PHY_TIMEOUT;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2693
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2694
	assert(tp->mac_version > RTL_GIGA_MAC_VER_01);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2695
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2696
	if (!(tp->phy_1000_ctrl_reg & ADVERTISE_1000FULL))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2697
		return;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2698
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2699
	spin_lock_irq(&tp->lock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2700
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2701
	if (tp->phy_reset_pending(ioaddr)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2702
		/*
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2703
		 * A busy loop could burn quite a few cycles on nowadays CPU.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2704
		 * Let's delay the execution of the timer for a few ticks.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2705
		 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2706
		timeout = HZ/10;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2707
		goto out_mod_timer;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2708
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2709
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2710
	if (tp->link_ok(ioaddr))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2711
		goto out_unlock;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2712
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2713
	if (netif_msg_link(tp))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2714
		printk(KERN_WARNING "%s: PHY reset until link up\n", dev->name);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2715
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2716
	tp->phy_reset_enable(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2717
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2718
out_mod_timer:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2719
	mod_timer(timer, jiffies + timeout);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2720
out_unlock:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2721
	spin_unlock_irq(&tp->lock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2722
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2723
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2724
static inline void rtl8169_delete_timer(struct net_device *dev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2725
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2726
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2727
	struct timer_list *timer = &tp->timer;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2728
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2729
	if (tp->mac_version <= RTL_GIGA_MAC_VER_01)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2730
		return;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2731
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2732
	del_timer_sync(timer);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2733
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2734
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2735
static inline void rtl8169_request_timer(struct net_device *dev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2736
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2737
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2738
	struct timer_list *timer = &tp->timer;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2739
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2740
	if (tp->mac_version <= RTL_GIGA_MAC_VER_01)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2741
		return;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2742
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2743
	mod_timer(timer, jiffies + RTL8169_PHY_TIMEOUT);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2744
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2745
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2746
#ifdef CONFIG_NET_POLL_CONTROLLER
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2747
/*
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2748
 * Polling 'interrupt' - used by things like netconsole to send skbs
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2749
 * without having to re-enable interrupts. It's not called while
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2750
 * the interrupt routine is executing.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2751
 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2752
static void rtl8169_netpoll(struct net_device *dev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2753
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2754
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2755
	struct pci_dev *pdev = tp->pci_dev;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2756
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2757
	disable_irq(pdev->irq);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2758
	rtl8169_interrupt(pdev->irq, dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2759
	enable_irq(pdev->irq);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2760
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2761
#endif
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2762
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2763
static void rtl8169_release_board(struct pci_dev *pdev, struct net_device *dev,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2764
				  void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2765
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2766
	iounmap(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2767
	pci_release_regions(pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2768
	pci_disable_device(pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2769
	free_netdev(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2770
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2771
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2772
static void rtl8169_phy_reset(struct net_device *dev,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2773
			      struct rtl8169_private *tp)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2774
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2775
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2776
	unsigned int i;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2777
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2778
	tp->phy_reset_enable(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2779
	for (i = 0; i < 100; i++) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2780
		if (!tp->phy_reset_pending(ioaddr))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2781
			return;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2782
		msleep(1);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2783
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2784
	if (netif_msg_link(tp))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2785
		printk(KERN_ERR "%s: PHY reset failed.\n", dev->name);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2786
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2787
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2788
static void rtl8169_init_phy(struct net_device *dev, struct rtl8169_private *tp)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2789
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2790
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2791
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2792
	rtl_hw_phy_config(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2793
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2794
	if (tp->mac_version <= RTL_GIGA_MAC_VER_06) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2795
		dprintk("Set MAC Reg C+CR Offset 0x82h = 0x01h\n");
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2796
		RTL_W8(0x82, 0x01);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2797
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2798
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2799
	pci_write_config_byte(tp->pci_dev, PCI_LATENCY_TIMER, 0x40);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2800
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2801
	if (tp->mac_version <= RTL_GIGA_MAC_VER_06)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2802
		pci_write_config_byte(tp->pci_dev, PCI_CACHE_LINE_SIZE, 0x08);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2803
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2804
	if (tp->mac_version == RTL_GIGA_MAC_VER_02) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2805
		dprintk("Set MAC Reg C+CR Offset 0x82h = 0x01h\n");
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2806
		RTL_W8(0x82, 0x01);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2807
		dprintk("Set PHY Reg 0x0bh = 0x00h\n");
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2808
		mdio_write(ioaddr, 0x0b, 0x0000); //w 0x0b 15 0 0
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2809
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2810
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2811
	rtl8169_phy_reset(dev, tp);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2812
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2813
	/*
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2814
	 * rtl8169_set_speed_xmii takes good care of the Fast Ethernet
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2815
	 * only 8101. Don't panic.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2816
	 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2817
	rtl8169_set_speed(dev, AUTONEG_ENABLE, SPEED_1000, DUPLEX_FULL);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2818
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2819
	if ((RTL_R8(PHYstatus) & TBI_Enable) && netif_msg_link(tp))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2820
		printk(KERN_INFO PFX "%s: TBI auto-negotiating\n", dev->name);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2821
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2822
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2823
static void rtl_rar_set(struct rtl8169_private *tp, u8 *addr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2824
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2825
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2826
	u32 high;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2827
	u32 low;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2828
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2829
	low  = addr[0] | (addr[1] << 8) | (addr[2] << 16) | (addr[3] << 24);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2830
	high = addr[4] | (addr[5] << 8);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2831
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2832
	spin_lock_irq(&tp->lock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2833
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2834
	RTL_W8(Cfg9346, Cfg9346_Unlock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2835
	RTL_W32(MAC0, low);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2836
	RTL_W32(MAC4, high);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2837
	RTL_W8(Cfg9346, Cfg9346_Lock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2838
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2839
	spin_unlock_irq(&tp->lock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2840
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2841
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2842
static int rtl_set_mac_address(struct net_device *dev, void *p)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2843
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2844
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2845
	struct sockaddr *addr = p;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2846
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2847
	if (!is_valid_ether_addr(addr->sa_data))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2848
		return -EADDRNOTAVAIL;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2849
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2850
	memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2851
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2852
	rtl_rar_set(tp, dev->dev_addr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2853
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2854
	return 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2855
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2856
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2857
static int rtl8169_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2858
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2859
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2860
	struct mii_ioctl_data *data = if_mii(ifr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2861
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2862
	return netif_running(dev) ? tp->do_ioctl(tp, data, cmd) : -ENODEV;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2863
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2864
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2865
static int rtl_xmii_ioctl(struct rtl8169_private *tp, struct mii_ioctl_data *data, int cmd)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2866
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2867
	switch (cmd) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2868
	case SIOCGMIIPHY:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2869
		data->phy_id = 32; /* Internal PHY */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2870
		return 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2871
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2872
	case SIOCGMIIREG:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2873
		data->val_out = mdio_read(tp->mmio_addr, data->reg_num & 0x1f);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2874
		return 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2875
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2876
	case SIOCSMIIREG:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2877
		mdio_write(tp->mmio_addr, data->reg_num & 0x1f, data->val_in);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2878
		return 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2879
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2880
	return -EOPNOTSUPP;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2881
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2882
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2883
static int rtl_tbi_ioctl(struct rtl8169_private *tp, struct mii_ioctl_data *data, int cmd)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2884
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2885
	return -EOPNOTSUPP;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2886
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2887
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2888
static const struct rtl_cfg_info {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2889
	void (*hw_start)(struct net_device *);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2890
	unsigned int region;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2891
	unsigned int align;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2892
	u16 intr_event;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2893
	u16 napi_event;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2894
	unsigned features;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2895
	u8 default_ver;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2896
} rtl_cfg_infos [] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2897
	[RTL_CFG_0] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2898
		.hw_start	= rtl_hw_start_8169,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2899
		.region		= 1,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2900
		.align		= 0,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2901
		.intr_event	= SYSErr | LinkChg | RxOverflow |
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2902
				  RxFIFOOver | TxErr | TxOK | RxOK | RxErr,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2903
		.napi_event	= RxFIFOOver | TxErr | TxOK | RxOK | RxOverflow,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2904
		.features	= RTL_FEATURE_GMII,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2905
		.default_ver	= RTL_GIGA_MAC_VER_01,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2906
	},
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2907
	[RTL_CFG_1] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2908
		.hw_start	= rtl_hw_start_8168,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2909
		.region		= 2,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2910
		.align		= 8,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2911
		.intr_event	= SYSErr | LinkChg | RxOverflow |
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2912
				  TxErr | TxOK | RxOK | RxErr,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2913
		.napi_event	= TxErr | TxOK | RxOK | RxOverflow,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2914
		.features	= RTL_FEATURE_GMII | RTL_FEATURE_MSI,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2915
		.default_ver	= RTL_GIGA_MAC_VER_11,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2916
	},
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2917
	[RTL_CFG_2] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2918
		.hw_start	= rtl_hw_start_8101,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2919
		.region		= 2,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2920
		.align		= 8,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2921
		.intr_event	= SYSErr | LinkChg | RxOverflow | PCSTimeout |
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2922
				  RxFIFOOver | TxErr | TxOK | RxOK | RxErr,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2923
		.napi_event	= RxFIFOOver | TxErr | TxOK | RxOK | RxOverflow,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2924
		.features	= RTL_FEATURE_MSI,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2925
		.default_ver	= RTL_GIGA_MAC_VER_13,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2926
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2927
};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2928
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2929
/* Cfg9346_Unlock assumed. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2930
static unsigned rtl_try_msi(struct pci_dev *pdev, void __iomem *ioaddr,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2931
			    const struct rtl_cfg_info *cfg)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2932
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2933
	unsigned msi = 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2934
	u8 cfg2;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2935
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2936
	cfg2 = RTL_R8(Config2) & ~MSIEnable;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2937
	if (cfg->features & RTL_FEATURE_MSI) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2938
		if (pci_enable_msi(pdev)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2939
			dev_info(&pdev->dev, "no MSI. Back to INTx.\n");
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2940
		} else {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2941
			cfg2 |= MSIEnable;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2942
			msi = RTL_FEATURE_MSI;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2943
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2944
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2945
	RTL_W8(Config2, cfg2);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2946
	return msi;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2947
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2948
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2949
static void rtl_disable_msi(struct pci_dev *pdev, struct rtl8169_private *tp)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2950
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2951
	if (tp->features & RTL_FEATURE_MSI) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2952
		pci_disable_msi(pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2953
		tp->features &= ~RTL_FEATURE_MSI;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2954
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2955
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2956
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2957
static const struct net_device_ops rtl8169_netdev_ops = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2958
	.ndo_open		= rtl8169_open,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2959
	.ndo_stop		= rtl8169_close,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2960
	.ndo_get_stats		= rtl8169_get_stats,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2961
	.ndo_start_xmit		= rtl8169_start_xmit,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2962
	.ndo_tx_timeout		= rtl8169_tx_timeout,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2963
	.ndo_validate_addr	= eth_validate_addr,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2964
	.ndo_change_mtu		= rtl8169_change_mtu,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2965
	.ndo_set_mac_address	= rtl_set_mac_address,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2966
	.ndo_do_ioctl		= rtl8169_ioctl,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2967
	.ndo_set_multicast_list	= rtl_set_rx_mode,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2968
#ifdef CONFIG_R8169_VLAN
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2969
	.ndo_vlan_rx_register	= rtl8169_vlan_rx_register,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2970
#endif
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2971
#ifdef CONFIG_NET_POLL_CONTROLLER
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2972
	.ndo_poll_controller	= rtl8169_netpoll,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2973
#endif
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2974
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2975
};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2976
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2977
static int __devinit
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2978
rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2979
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2980
	const struct rtl_cfg_info *cfg = rtl_cfg_infos + ent->driver_data;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2981
	const unsigned int region = cfg->region;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2982
	struct rtl8169_private *tp;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2983
	struct mii_if_info *mii;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2984
	struct net_device *dev;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2985
	void __iomem *ioaddr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2986
	unsigned int i;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2987
	int rc;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2988
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2989
	if (netif_msg_drv(&debug)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2990
		printk(KERN_INFO "%s Gigabit Ethernet driver %s loaded\n",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2991
		       MODULENAME, RTL8169_VERSION);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2992
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2993
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2994
	dev = alloc_etherdev(sizeof (*tp));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2995
	if (!dev) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2996
		if (netif_msg_drv(&debug))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2997
			dev_err(&pdev->dev, "unable to alloc new ethernet\n");
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2998
		rc = -ENOMEM;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2999
		goto out;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3000
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3001
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3002
	SET_NETDEV_DEV(dev, &pdev->dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3003
	dev->netdev_ops = &rtl8169_netdev_ops;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3004
	tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3005
	tp->dev = dev;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3006
	tp->pci_dev = pdev;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3007
	tp->msg_enable = netif_msg_init(debug.msg_enable, R8169_MSG_DEFAULT);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3008
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3009
	mii = &tp->mii;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3010
	mii->dev = dev;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3011
	mii->mdio_read = rtl_mdio_read;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3012
	mii->mdio_write = rtl_mdio_write;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3013
	mii->phy_id_mask = 0x1f;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3014
	mii->reg_num_mask = 0x1f;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3015
	mii->supports_gmii = !!(cfg->features & RTL_FEATURE_GMII);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3016
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3017
	/* enable device (incl. PCI PM wakeup and hotplug setup) */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3018
	rc = pci_enable_device(pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3019
	if (rc < 0) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3020
		if (netif_msg_probe(tp))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3021
			dev_err(&pdev->dev, "enable failure\n");
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3022
		goto err_out_free_dev_1;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3023
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3024
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3025
	rc = pci_set_mwi(pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3026
	if (rc < 0)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3027
		goto err_out_disable_2;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3028
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3029
	/* make sure PCI base addr 1 is MMIO */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3030
	if (!(pci_resource_flags(pdev, region) & IORESOURCE_MEM)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3031
		if (netif_msg_probe(tp)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3032
			dev_err(&pdev->dev,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3033
				"region #%d not an MMIO resource, aborting\n",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3034
				region);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3035
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3036
		rc = -ENODEV;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3037
		goto err_out_mwi_3;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3038
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3039
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3040
	/* check for weird/broken PCI region reporting */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3041
	if (pci_resource_len(pdev, region) < R8169_REGS_SIZE) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3042
		if (netif_msg_probe(tp)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3043
			dev_err(&pdev->dev,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3044
				"Invalid PCI region size(s), aborting\n");
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3045
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3046
		rc = -ENODEV;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3047
		goto err_out_mwi_3;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3048
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3049
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3050
	rc = pci_request_regions(pdev, MODULENAME);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3051
	if (rc < 0) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3052
		if (netif_msg_probe(tp))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3053
			dev_err(&pdev->dev, "could not request regions.\n");
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3054
		goto err_out_mwi_3;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3055
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3056
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3057
	tp->cp_cmd = PCIMulRW | RxChkSum;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3058
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3059
	if ((sizeof(dma_addr_t) > 4) &&
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3060
	    !pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) && use_dac) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3061
		tp->cp_cmd |= PCIDAC;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3062
		dev->features |= NETIF_F_HIGHDMA;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3063
	} else {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3064
		rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3065
		if (rc < 0) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3066
			if (netif_msg_probe(tp)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3067
				dev_err(&pdev->dev,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3068
					"DMA configuration failed.\n");
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3069
			}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3070
			goto err_out_free_res_4;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3071
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3072
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3073
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3074
	/* ioremap MMIO region */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3075
	ioaddr = ioremap(pci_resource_start(pdev, region), R8169_REGS_SIZE);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3076
	if (!ioaddr) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3077
		if (netif_msg_probe(tp))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3078
			dev_err(&pdev->dev, "cannot remap MMIO, aborting\n");
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3079
		rc = -EIO;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3080
		goto err_out_free_res_4;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3081
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3082
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3083
	tp->pcie_cap = pci_find_capability(pdev, PCI_CAP_ID_EXP);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3084
	if (!tp->pcie_cap && netif_msg_probe(tp))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3085
		dev_info(&pdev->dev, "no PCI Express capability\n");
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3086
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3087
	RTL_W16(IntrMask, 0x0000);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3088
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3089
	/* Soft reset the chip. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3090
	RTL_W8(ChipCmd, CmdReset);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3091
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3092
	/* Check that the chip has finished the reset. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3093
	for (i = 0; i < 100; i++) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3094
		if ((RTL_R8(ChipCmd) & CmdReset) == 0)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3095
			break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3096
		msleep_interruptible(1);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3097
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3098
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3099
	RTL_W16(IntrStatus, 0xffff);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3100
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3101
	pci_set_master(pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3102
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3103
	/* Identify chip attached to board */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3104
	rtl8169_get_mac_version(tp, ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3105
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3106
	/* Use appropriate default if unknown */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3107
	if (tp->mac_version == RTL_GIGA_MAC_NONE) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3108
		if (netif_msg_probe(tp)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3109
			dev_notice(&pdev->dev,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3110
				   "unknown MAC, using family default\n");
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3111
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3112
		tp->mac_version = cfg->default_ver;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3113
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3114
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3115
	rtl8169_print_mac_version(tp);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3116
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3117
	for (i = 0; i < ARRAY_SIZE(rtl_chip_info); i++) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3118
		if (tp->mac_version == rtl_chip_info[i].mac_version)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3119
			break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3120
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3121
	if (i == ARRAY_SIZE(rtl_chip_info)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3122
		dev_err(&pdev->dev,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3123
			"driver bug, MAC version not found in rtl_chip_info\n");
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3124
		goto err_out_msi_5;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3125
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3126
	tp->chipset = i;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3127
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3128
	RTL_W8(Cfg9346, Cfg9346_Unlock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3129
	RTL_W8(Config1, RTL_R8(Config1) | PMEnable);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3130
	RTL_W8(Config5, RTL_R8(Config5) & PMEStatus);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3131
	if ((RTL_R8(Config3) & (LinkUp | MagicPacket)) != 0)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3132
		tp->features |= RTL_FEATURE_WOL;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3133
	if ((RTL_R8(Config5) & (UWF | BWF | MWF)) != 0)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3134
		tp->features |= RTL_FEATURE_WOL;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3135
	tp->features |= rtl_try_msi(pdev, ioaddr, cfg);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3136
	RTL_W8(Cfg9346, Cfg9346_Lock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3137
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3138
	if ((tp->mac_version <= RTL_GIGA_MAC_VER_06) &&
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3139
	    (RTL_R8(PHYstatus) & TBI_Enable)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3140
		tp->set_speed = rtl8169_set_speed_tbi;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3141
		tp->get_settings = rtl8169_gset_tbi;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3142
		tp->phy_reset_enable = rtl8169_tbi_reset_enable;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3143
		tp->phy_reset_pending = rtl8169_tbi_reset_pending;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3144
		tp->link_ok = rtl8169_tbi_link_ok;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3145
		tp->do_ioctl = rtl_tbi_ioctl;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3146
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3147
		tp->phy_1000_ctrl_reg = ADVERTISE_1000FULL; /* Implied by TBI */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3148
	} else {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3149
		tp->set_speed = rtl8169_set_speed_xmii;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3150
		tp->get_settings = rtl8169_gset_xmii;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3151
		tp->phy_reset_enable = rtl8169_xmii_reset_enable;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3152
		tp->phy_reset_pending = rtl8169_xmii_reset_pending;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3153
		tp->link_ok = rtl8169_xmii_link_ok;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3154
		tp->do_ioctl = rtl_xmii_ioctl;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3155
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3156
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3157
	spin_lock_init(&tp->lock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3158
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3159
	tp->mmio_addr = ioaddr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3160
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3161
	/* Get MAC address */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3162
	for (i = 0; i < MAC_ADDR_LEN; i++)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3163
		dev->dev_addr[i] = RTL_R8(MAC0 + i);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3164
	memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3165
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3166
	SET_ETHTOOL_OPS(dev, &rtl8169_ethtool_ops);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3167
	dev->watchdog_timeo = RTL8169_TX_TIMEOUT;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3168
	dev->irq = pdev->irq;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3169
	dev->base_addr = (unsigned long) ioaddr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3170
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3171
	netif_napi_add(dev, &tp->napi, rtl8169_poll, R8169_NAPI_WEIGHT);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3172
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3173
#ifdef CONFIG_R8169_VLAN
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3174
	dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3175
#endif
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3176
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3177
	tp->intr_mask = 0xffff;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3178
	tp->align = cfg->align;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3179
	tp->hw_start = cfg->hw_start;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3180
	tp->intr_event = cfg->intr_event;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3181
	tp->napi_event = cfg->napi_event;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3182
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3183
	init_timer(&tp->timer);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3184
	tp->timer.data = (unsigned long) dev;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3185
	tp->timer.function = rtl8169_phy_timer;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3186
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3187
	rc = register_netdev(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3188
	if (rc < 0)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3189
		goto err_out_msi_5;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3190
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3191
	pci_set_drvdata(pdev, dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3192
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3193
	if (netif_msg_probe(tp)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3194
		u32 xid = RTL_R32(TxConfig) & 0x9cf0f8ff;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3195
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3196
		printk(KERN_INFO "%s: %s at 0x%lx, "
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3197
		       "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x, "
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3198
		       "XID %08x IRQ %d\n",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3199
		       dev->name,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3200
		       rtl_chip_info[tp->chipset].name,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3201
		       dev->base_addr,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3202
		       dev->dev_addr[0], dev->dev_addr[1],
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3203
		       dev->dev_addr[2], dev->dev_addr[3],
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3204
		       dev->dev_addr[4], dev->dev_addr[5], xid, dev->irq);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3205
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3206
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3207
	rtl8169_init_phy(dev, tp);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3208
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3209
	/*
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3210
	 * Pretend we are using VLANs; This bypasses a nasty bug where
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3211
	 * Interrupts stop flowing on high load on 8110SCd controllers.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3212
	 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3213
	if (tp->mac_version == RTL_GIGA_MAC_VER_05)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3214
		RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) | RxVlan);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3215
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3216
	device_set_wakeup_enable(&pdev->dev, tp->features & RTL_FEATURE_WOL);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3217
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3218
out:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3219
	return rc;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3220
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3221
err_out_msi_5:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3222
	rtl_disable_msi(pdev, tp);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3223
	iounmap(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3224
err_out_free_res_4:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3225
	pci_release_regions(pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3226
err_out_mwi_3:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3227
	pci_clear_mwi(pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3228
err_out_disable_2:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3229
	pci_disable_device(pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3230
err_out_free_dev_1:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3231
	free_netdev(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3232
	goto out;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3233
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3234
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3235
static void __devexit rtl8169_remove_one(struct pci_dev *pdev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3236
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3237
	struct net_device *dev = pci_get_drvdata(pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3238
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3239
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3240
	flush_scheduled_work();
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3241
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3242
	unregister_netdev(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3243
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3244
	/* restore original MAC address */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3245
	rtl_rar_set(tp, dev->perm_addr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3246
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3247
	rtl_disable_msi(pdev, tp);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3248
	rtl8169_release_board(pdev, dev, tp->mmio_addr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3249
	pci_set_drvdata(pdev, NULL);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3250
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3251
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3252
static void rtl8169_set_rxbufsize(struct rtl8169_private *tp,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3253
				  unsigned int mtu)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3254
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3255
	unsigned int max_frame = mtu + VLAN_ETH_HLEN + ETH_FCS_LEN;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3256
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3257
	if (max_frame != 16383)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3258
		printk(KERN_WARNING "WARNING! Changing of MTU on this NIC"
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3259
			"May lead to frame reception errors!\n");
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3260
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3261
	tp->rx_buf_sz = (max_frame > RX_BUF_SIZE) ? max_frame : RX_BUF_SIZE;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3262
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3263
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3264
static int rtl8169_open(struct net_device *dev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3265
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3266
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3267
	struct pci_dev *pdev = tp->pci_dev;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3268
	int retval = -ENOMEM;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3269
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3270
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3271
	/*
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3272
	 * Note that we use a magic value here, its wierd I know
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3273
	 * its done because, some subset of rtl8169 hardware suffers from
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3274
	 * a problem in which frames received that are longer than
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3275
	 * the size set in RxMaxSize register return garbage sizes
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3276
	 * when received.  To avoid this we need to turn off filtering,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3277
	 * which is done by setting a value of 16383 in the RxMaxSize register
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3278
	 * and allocating 16k frames to handle the largest possible rx value
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3279
	 * thats what the magic math below does.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3280
	 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3281
	rtl8169_set_rxbufsize(tp, 16383 - VLAN_ETH_HLEN - ETH_FCS_LEN);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3282
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3283
	/*
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3284
	 * Rx and Tx desscriptors needs 256 bytes alignment.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3285
	 * pci_alloc_consistent provides more.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3286
	 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3287
	tp->TxDescArray = pci_alloc_consistent(pdev, R8169_TX_RING_BYTES,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3288
					       &tp->TxPhyAddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3289
	if (!tp->TxDescArray)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3290
		goto out;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3291
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3292
	tp->RxDescArray = pci_alloc_consistent(pdev, R8169_RX_RING_BYTES,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3293
					       &tp->RxPhyAddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3294
	if (!tp->RxDescArray)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3295
		goto err_free_tx_0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3296
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3297
	retval = rtl8169_init_ring(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3298
	if (retval < 0)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3299
		goto err_free_rx_1;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3300
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3301
	INIT_DELAYED_WORK(&tp->task, NULL);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3302
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3303
	smp_mb();
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3304
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3305
	retval = request_irq(dev->irq, rtl8169_interrupt,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3306
			     (tp->features & RTL_FEATURE_MSI) ? 0 : IRQF_SHARED,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3307
			     dev->name, dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3308
	if (retval < 0)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3309
		goto err_release_ring_2;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3310
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3311
	napi_enable(&tp->napi);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3312
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3313
	rtl_hw_start(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3314
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3315
	rtl8169_request_timer(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3316
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3317
	rtl8169_check_link_status(dev, tp, tp->mmio_addr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3318
out:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3319
	return retval;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3320
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3321
err_release_ring_2:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3322
	rtl8169_rx_clear(tp);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3323
err_free_rx_1:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3324
	pci_free_consistent(pdev, R8169_RX_RING_BYTES, tp->RxDescArray,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3325
			    tp->RxPhyAddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3326
err_free_tx_0:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3327
	pci_free_consistent(pdev, R8169_TX_RING_BYTES, tp->TxDescArray,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3328
			    tp->TxPhyAddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3329
	goto out;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3330
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3331
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3332
static void rtl8169_hw_reset(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3333
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3334
	/* Disable interrupts */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3335
	rtl8169_irq_mask_and_ack(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3336
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3337
	/* Reset the chipset */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3338
	RTL_W8(ChipCmd, CmdReset);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3339
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3340
	/* PCI commit */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3341
	RTL_R8(ChipCmd);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3342
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3343
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3344
static void rtl_set_rx_tx_config_registers(struct rtl8169_private *tp)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3345
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3346
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3347
	u32 cfg = rtl8169_rx_config;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3348
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3349
	cfg |= (RTL_R32(RxConfig) & rtl_chip_info[tp->chipset].RxConfigMask);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3350
	RTL_W32(RxConfig, cfg);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3351
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3352
	/* Set DMA burst size and Interframe Gap Time */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3353
	RTL_W32(TxConfig, (TX_DMA_BURST << TxDMAShift) |
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3354
		(InterFrameGap << TxInterFrameGapShift));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3355
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3356
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3357
static void rtl_hw_start(struct net_device *dev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3358
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3359
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3360
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3361
	unsigned int i;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3362
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3363
	/* Soft reset the chip. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3364
	RTL_W8(ChipCmd, CmdReset);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3365
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3366
	/* Check that the chip has finished the reset. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3367
	for (i = 0; i < 100; i++) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3368
		if ((RTL_R8(ChipCmd) & CmdReset) == 0)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3369
			break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3370
		msleep_interruptible(1);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3371
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3372
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3373
	tp->hw_start(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3374
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3375
	netif_start_queue(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3376
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3377
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3378
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3379
static void rtl_set_rx_tx_desc_registers(struct rtl8169_private *tp,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3380
					 void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3381
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3382
	/*
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3383
	 * Magic spell: some iop3xx ARM board needs the TxDescAddrHigh
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3384
	 * register to be written before TxDescAddrLow to work.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3385
	 * Switching from MMIO to I/O access fixes the issue as well.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3386
	 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3387
	RTL_W32(TxDescStartAddrHigh, ((u64) tp->TxPhyAddr) >> 32);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3388
	RTL_W32(TxDescStartAddrLow, ((u64) tp->TxPhyAddr) & DMA_BIT_MASK(32));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3389
	RTL_W32(RxDescAddrHigh, ((u64) tp->RxPhyAddr) >> 32);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3390
	RTL_W32(RxDescAddrLow, ((u64) tp->RxPhyAddr) & DMA_BIT_MASK(32));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3391
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3392
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3393
static u16 rtl_rw_cpluscmd(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3394
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3395
	u16 cmd;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3396
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3397
	cmd = RTL_R16(CPlusCmd);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3398
	RTL_W16(CPlusCmd, cmd);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3399
	return cmd;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3400
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3401
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3402
static void rtl_set_rx_max_size(void __iomem *ioaddr, unsigned int rx_buf_sz)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3403
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3404
	/* Low hurts. Let's disable the filtering. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3405
	RTL_W16(RxMaxSize, rx_buf_sz + 1);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3406
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3407
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3408
static void rtl8169_set_magic_reg(void __iomem *ioaddr, unsigned mac_version)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3409
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3410
	static const struct {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3411
		u32 mac_version;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3412
		u32 clk;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3413
		u32 val;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3414
	} cfg2_info [] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3415
		{ RTL_GIGA_MAC_VER_05, PCI_Clock_33MHz, 0x000fff00 }, // 8110SCd
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3416
		{ RTL_GIGA_MAC_VER_05, PCI_Clock_66MHz, 0x000fffff },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3417
		{ RTL_GIGA_MAC_VER_06, PCI_Clock_33MHz, 0x00ffff00 }, // 8110SCe
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3418
		{ RTL_GIGA_MAC_VER_06, PCI_Clock_66MHz, 0x00ffffff }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3419
	}, *p = cfg2_info;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3420
	unsigned int i;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3421
	u32 clk;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3422
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3423
	clk = RTL_R8(Config2) & PCI_Clock_66MHz;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3424
	for (i = 0; i < ARRAY_SIZE(cfg2_info); i++, p++) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3425
		if ((p->mac_version == mac_version) && (p->clk == clk)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3426
			RTL_W32(0x7c, p->val);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3427
			break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3428
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3429
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3430
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3431
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3432
static void rtl_hw_start_8169(struct net_device *dev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3433
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3434
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3435
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3436
	struct pci_dev *pdev = tp->pci_dev;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3437
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3438
	if (tp->mac_version == RTL_GIGA_MAC_VER_05) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3439
		RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) | PCIMulRW);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3440
		pci_write_config_byte(pdev, PCI_CACHE_LINE_SIZE, 0x08);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3441
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3442
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3443
	RTL_W8(Cfg9346, Cfg9346_Unlock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3444
	if ((tp->mac_version == RTL_GIGA_MAC_VER_01) ||
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3445
	    (tp->mac_version == RTL_GIGA_MAC_VER_02) ||
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3446
	    (tp->mac_version == RTL_GIGA_MAC_VER_03) ||
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3447
	    (tp->mac_version == RTL_GIGA_MAC_VER_04))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3448
		RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3449
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3450
	RTL_W8(EarlyTxThres, EarlyTxThld);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3451
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3452
	rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3453
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3454
	if ((tp->mac_version == RTL_GIGA_MAC_VER_01) ||
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3455
	    (tp->mac_version == RTL_GIGA_MAC_VER_02) ||
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3456
	    (tp->mac_version == RTL_GIGA_MAC_VER_03) ||
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3457
	    (tp->mac_version == RTL_GIGA_MAC_VER_04))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3458
		rtl_set_rx_tx_config_registers(tp);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3459
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3460
	tp->cp_cmd |= rtl_rw_cpluscmd(ioaddr) | PCIMulRW;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3461
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3462
	if ((tp->mac_version == RTL_GIGA_MAC_VER_02) ||
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3463
	    (tp->mac_version == RTL_GIGA_MAC_VER_03)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3464
		dprintk("Set MAC Reg C+CR Offset 0xE0. "
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3465
			"Bit-3 and bit-14 MUST be 1\n");
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3466
		tp->cp_cmd |= (1 << 14);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3467
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3468
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3469
	RTL_W16(CPlusCmd, tp->cp_cmd);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3470
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3471
	rtl8169_set_magic_reg(ioaddr, tp->mac_version);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3472
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3473
	/*
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3474
	 * Undocumented corner. Supposedly:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3475
	 * (TxTimer << 12) | (TxPackets << 8) | (RxTimer << 4) | RxPackets
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3476
	 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3477
	RTL_W16(IntrMitigate, 0x0000);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3478
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3479
	rtl_set_rx_tx_desc_registers(tp, ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3480
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3481
	if ((tp->mac_version != RTL_GIGA_MAC_VER_01) &&
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3482
	    (tp->mac_version != RTL_GIGA_MAC_VER_02) &&
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3483
	    (tp->mac_version != RTL_GIGA_MAC_VER_03) &&
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3484
	    (tp->mac_version != RTL_GIGA_MAC_VER_04)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3485
		RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3486
		rtl_set_rx_tx_config_registers(tp);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3487
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3488
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3489
	RTL_W8(Cfg9346, Cfg9346_Lock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3490
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3491
	/* Initially a 10 us delay. Turned it into a PCI commit. - FR */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3492
	RTL_R8(IntrMask);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3493
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3494
	RTL_W32(RxMissed, 0);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3495
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3496
	rtl_set_rx_mode(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3497
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3498
	/* no early-rx interrupts */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3499
	RTL_W16(MultiIntr, RTL_R16(MultiIntr) & 0xF000);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3500
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3501
	/* Enable all known interrupts by setting the interrupt mask. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3502
	RTL_W16(IntrMask, tp->intr_event);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3503
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3504
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3505
static void rtl_tx_performance_tweak(struct pci_dev *pdev, u16 force)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3506
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3507
	struct net_device *dev = pci_get_drvdata(pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3508
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3509
	int cap = tp->pcie_cap;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3510
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3511
	if (cap) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3512
		u16 ctl;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3513
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3514
		pci_read_config_word(pdev, cap + PCI_EXP_DEVCTL, &ctl);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3515
		ctl = (ctl & ~PCI_EXP_DEVCTL_READRQ) | force;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3516
		pci_write_config_word(pdev, cap + PCI_EXP_DEVCTL, ctl);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3517
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3518
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3519
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3520
static void rtl_csi_access_enable(void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3521
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3522
	u32 csi;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3523
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3524
	csi = rtl_csi_read(ioaddr, 0x070c) & 0x00ffffff;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3525
	rtl_csi_write(ioaddr, 0x070c, csi | 0x27000000);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3526
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3527
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3528
struct ephy_info {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3529
	unsigned int offset;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3530
	u16 mask;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3531
	u16 bits;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3532
};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3533
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3534
static void rtl_ephy_init(void __iomem *ioaddr, const struct ephy_info *e, int len)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3535
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3536
	u16 w;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3537
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3538
	while (len-- > 0) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3539
		w = (rtl_ephy_read(ioaddr, e->offset) & ~e->mask) | e->bits;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3540
		rtl_ephy_write(ioaddr, e->offset, w);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3541
		e++;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3542
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3543
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3544
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3545
static void rtl_disable_clock_request(struct pci_dev *pdev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3546
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3547
	struct net_device *dev = pci_get_drvdata(pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3548
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3549
	int cap = tp->pcie_cap;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3550
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3551
	if (cap) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3552
		u16 ctl;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3553
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3554
		pci_read_config_word(pdev, cap + PCI_EXP_LNKCTL, &ctl);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3555
		ctl &= ~PCI_EXP_LNKCTL_CLKREQ_EN;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3556
		pci_write_config_word(pdev, cap + PCI_EXP_LNKCTL, ctl);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3557
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3558
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3559
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3560
#define R8168_CPCMD_QUIRK_MASK (\
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3561
	EnableBist | \
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3562
	Mac_dbgo_oe | \
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3563
	Force_half_dup | \
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3564
	Force_rxflow_en | \
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3565
	Force_txflow_en | \
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3566
	Cxpl_dbg_sel | \
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3567
	ASF | \
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3568
	PktCntrDisable | \
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3569
	Mac_dbgo_sel)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3570
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3571
static void rtl_hw_start_8168bb(void __iomem *ioaddr, struct pci_dev *pdev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3572
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3573
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3574
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3575
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3576
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3577
	rtl_tx_performance_tweak(pdev,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3578
		(0x5 << MAX_READ_REQUEST_SHIFT) | PCI_EXP_DEVCTL_NOSNOOP_EN);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3579
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3580
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3581
static void rtl_hw_start_8168bef(void __iomem *ioaddr, struct pci_dev *pdev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3582
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3583
	rtl_hw_start_8168bb(ioaddr, pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3584
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3585
	RTL_W8(EarlyTxThres, EarlyTxThld);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3586
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3587
	RTL_W8(Config4, RTL_R8(Config4) & ~(1 << 0));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3588
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3589
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3590
static void __rtl_hw_start_8168cp(void __iomem *ioaddr, struct pci_dev *pdev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3591
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3592
	RTL_W8(Config1, RTL_R8(Config1) | Speed_down);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3593
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3594
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3595
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3596
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3597
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3598
	rtl_disable_clock_request(pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3599
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3600
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3601
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3602
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3603
static void rtl_hw_start_8168cp_1(void __iomem *ioaddr, struct pci_dev *pdev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3604
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3605
	static const struct ephy_info e_info_8168cp[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3606
		{ 0x01, 0,	0x0001 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3607
		{ 0x02, 0x0800,	0x1000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3608
		{ 0x03, 0,	0x0042 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3609
		{ 0x06, 0x0080,	0x0000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3610
		{ 0x07, 0,	0x2000 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3611
	};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3612
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3613
	rtl_csi_access_enable(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3614
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3615
	rtl_ephy_init(ioaddr, e_info_8168cp, ARRAY_SIZE(e_info_8168cp));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3616
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3617
	__rtl_hw_start_8168cp(ioaddr, pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3618
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3619
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3620
static void rtl_hw_start_8168cp_2(void __iomem *ioaddr, struct pci_dev *pdev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3621
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3622
	rtl_csi_access_enable(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3623
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3624
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3625
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3626
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3627
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3628
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3629
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3630
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3631
static void rtl_hw_start_8168cp_3(void __iomem *ioaddr, struct pci_dev *pdev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3632
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3633
	rtl_csi_access_enable(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3634
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3635
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3636
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3637
	/* Magic. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3638
	RTL_W8(DBG_REG, 0x20);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3639
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3640
	RTL_W8(EarlyTxThres, EarlyTxThld);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3641
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3642
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3643
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3644
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3645
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3646
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3647
static void rtl_hw_start_8168c_1(void __iomem *ioaddr, struct pci_dev *pdev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3648
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3649
	static const struct ephy_info e_info_8168c_1[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3650
		{ 0x02, 0x0800,	0x1000 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3651
		{ 0x03, 0,	0x0002 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3652
		{ 0x06, 0x0080,	0x0000 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3653
	};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3654
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3655
	rtl_csi_access_enable(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3656
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3657
	RTL_W8(DBG_REG, 0x06 | FIX_NAK_1 | FIX_NAK_2);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3658
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3659
	rtl_ephy_init(ioaddr, e_info_8168c_1, ARRAY_SIZE(e_info_8168c_1));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3660
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3661
	__rtl_hw_start_8168cp(ioaddr, pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3662
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3663
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3664
static void rtl_hw_start_8168c_2(void __iomem *ioaddr, struct pci_dev *pdev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3665
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3666
	static const struct ephy_info e_info_8168c_2[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3667
		{ 0x01, 0,	0x0001 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3668
		{ 0x03, 0x0400,	0x0220 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3669
	};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3670
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3671
	rtl_csi_access_enable(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3672
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3673
	rtl_ephy_init(ioaddr, e_info_8168c_2, ARRAY_SIZE(e_info_8168c_2));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3674
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3675
	__rtl_hw_start_8168cp(ioaddr, pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3676
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3677
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3678
static void rtl_hw_start_8168c_3(void __iomem *ioaddr, struct pci_dev *pdev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3679
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3680
	rtl_hw_start_8168c_2(ioaddr, pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3681
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3682
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3683
static void rtl_hw_start_8168c_4(void __iomem *ioaddr, struct pci_dev *pdev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3684
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3685
	rtl_csi_access_enable(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3686
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3687
	__rtl_hw_start_8168cp(ioaddr, pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3688
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3689
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3690
static void rtl_hw_start_8168d(void __iomem *ioaddr, struct pci_dev *pdev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3691
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3692
	rtl_csi_access_enable(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3693
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3694
	rtl_disable_clock_request(pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3695
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3696
	RTL_W8(EarlyTxThres, EarlyTxThld);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3697
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3698
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3699
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3700
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3701
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3702
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3703
static void rtl_hw_start_8168(struct net_device *dev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3704
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3705
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3706
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3707
	struct pci_dev *pdev = tp->pci_dev;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3708
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3709
	RTL_W8(Cfg9346, Cfg9346_Unlock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3710
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3711
	RTL_W8(EarlyTxThres, EarlyTxThld);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3712
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3713
	rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3714
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3715
	tp->cp_cmd |= RTL_R16(CPlusCmd) | PktCntrDisable | INTT_1;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3716
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3717
	RTL_W16(CPlusCmd, tp->cp_cmd);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3718
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3719
	RTL_W16(IntrMitigate, 0x5151);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3720
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3721
	/* Work around for RxFIFO overflow. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3722
	if (tp->mac_version == RTL_GIGA_MAC_VER_11) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3723
		tp->intr_event |= RxFIFOOver | PCSTimeout;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3724
		tp->intr_event &= ~RxOverflow;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3725
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3726
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3727
	rtl_set_rx_tx_desc_registers(tp, ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3728
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3729
	rtl_set_rx_mode(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3730
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3731
	RTL_W32(TxConfig, (TX_DMA_BURST << TxDMAShift) |
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3732
		(InterFrameGap << TxInterFrameGapShift));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3733
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3734
	RTL_R8(IntrMask);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3735
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3736
	switch (tp->mac_version) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3737
	case RTL_GIGA_MAC_VER_11:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3738
		rtl_hw_start_8168bb(ioaddr, pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3739
	break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3740
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3741
	case RTL_GIGA_MAC_VER_12:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3742
	case RTL_GIGA_MAC_VER_17:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3743
		rtl_hw_start_8168bef(ioaddr, pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3744
	break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3745
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3746
	case RTL_GIGA_MAC_VER_18:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3747
		rtl_hw_start_8168cp_1(ioaddr, pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3748
	break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3749
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3750
	case RTL_GIGA_MAC_VER_19:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3751
		rtl_hw_start_8168c_1(ioaddr, pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3752
	break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3753
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3754
	case RTL_GIGA_MAC_VER_20:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3755
		rtl_hw_start_8168c_2(ioaddr, pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3756
	break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3757
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3758
	case RTL_GIGA_MAC_VER_21:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3759
		rtl_hw_start_8168c_3(ioaddr, pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3760
	break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3761
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3762
	case RTL_GIGA_MAC_VER_22:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3763
		rtl_hw_start_8168c_4(ioaddr, pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3764
	break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3765
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3766
	case RTL_GIGA_MAC_VER_23:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3767
		rtl_hw_start_8168cp_2(ioaddr, pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3768
	break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3769
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3770
	case RTL_GIGA_MAC_VER_24:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3771
		rtl_hw_start_8168cp_3(ioaddr, pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3772
	break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3773
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3774
	case RTL_GIGA_MAC_VER_25:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3775
	case RTL_GIGA_MAC_VER_26:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3776
	case RTL_GIGA_MAC_VER_27:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3777
		rtl_hw_start_8168d(ioaddr, pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3778
	break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3779
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3780
	default:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3781
		printk(KERN_ERR PFX "%s: unknown chipset (mac_version = %d).\n",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3782
			dev->name, tp->mac_version);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3783
	break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3784
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3785
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3786
	RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3787
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3788
	RTL_W8(Cfg9346, Cfg9346_Lock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3789
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3790
	RTL_W16(MultiIntr, RTL_R16(MultiIntr) & 0xF000);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3791
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3792
	RTL_W16(IntrMask, tp->intr_event);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3793
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3794
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3795
#define R810X_CPCMD_QUIRK_MASK (\
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3796
	EnableBist | \
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3797
	Mac_dbgo_oe | \
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3798
	Force_half_dup | \
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3799
	Force_rxflow_en | \
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3800
	Force_txflow_en | \
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3801
	Cxpl_dbg_sel | \
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3802
	ASF | \
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3803
	PktCntrDisable | \
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3804
	PCIDAC | \
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3805
	PCIMulRW)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3806
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3807
static void rtl_hw_start_8102e_1(void __iomem *ioaddr, struct pci_dev *pdev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3808
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3809
	static const struct ephy_info e_info_8102e_1[] = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3810
		{ 0x01,	0, 0x6e65 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3811
		{ 0x02,	0, 0x091f },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3812
		{ 0x03,	0, 0xc2f9 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3813
		{ 0x06,	0, 0xafb5 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3814
		{ 0x07,	0, 0x0e00 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3815
		{ 0x19,	0, 0xec80 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3816
		{ 0x01,	0, 0x2e65 },
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3817
		{ 0x01,	0, 0x6e65 }
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3818
	};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3819
	u8 cfg1;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3820
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3821
	rtl_csi_access_enable(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3822
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3823
	RTL_W8(DBG_REG, FIX_NAK_1);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3824
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3825
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3826
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3827
	RTL_W8(Config1,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3828
	       LEDS1 | LEDS0 | Speed_down | MEMMAP | IOMAP | VPD | PMEnable);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3829
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3830
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3831
	cfg1 = RTL_R8(Config1);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3832
	if ((cfg1 & LEDS0) && (cfg1 & LEDS1))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3833
		RTL_W8(Config1, cfg1 & ~LEDS0);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3834
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3835
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R810X_CPCMD_QUIRK_MASK);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3836
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3837
	rtl_ephy_init(ioaddr, e_info_8102e_1, ARRAY_SIZE(e_info_8102e_1));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3838
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3839
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3840
static void rtl_hw_start_8102e_2(void __iomem *ioaddr, struct pci_dev *pdev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3841
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3842
	rtl_csi_access_enable(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3843
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3844
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3845
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3846
	RTL_W8(Config1, MEMMAP | IOMAP | VPD | PMEnable);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3847
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3848
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3849
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R810X_CPCMD_QUIRK_MASK);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3850
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3851
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3852
static void rtl_hw_start_8102e_3(void __iomem *ioaddr, struct pci_dev *pdev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3853
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3854
	rtl_hw_start_8102e_2(ioaddr, pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3855
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3856
	rtl_ephy_write(ioaddr, 0x03, 0xc2f9);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3857
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3858
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3859
static void rtl_hw_start_8101(struct net_device *dev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3860
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3861
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3862
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3863
	struct pci_dev *pdev = tp->pci_dev;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3864
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3865
	if ((tp->mac_version == RTL_GIGA_MAC_VER_13) ||
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3866
	    (tp->mac_version == RTL_GIGA_MAC_VER_16)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3867
		int cap = tp->pcie_cap;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3868
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3869
		if (cap) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3870
			pci_write_config_word(pdev, cap + PCI_EXP_DEVCTL,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3871
					      PCI_EXP_DEVCTL_NOSNOOP_EN);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3872
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3873
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3874
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3875
	switch (tp->mac_version) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3876
	case RTL_GIGA_MAC_VER_07:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3877
		rtl_hw_start_8102e_1(ioaddr, pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3878
		break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3879
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3880
	case RTL_GIGA_MAC_VER_08:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3881
		rtl_hw_start_8102e_3(ioaddr, pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3882
		break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3883
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3884
	case RTL_GIGA_MAC_VER_09:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3885
		rtl_hw_start_8102e_2(ioaddr, pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3886
		break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3887
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3888
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3889
	RTL_W8(Cfg9346, Cfg9346_Unlock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3890
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3891
	RTL_W8(EarlyTxThres, EarlyTxThld);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3892
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3893
	rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3894
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3895
	tp->cp_cmd |= rtl_rw_cpluscmd(ioaddr) | PCIMulRW;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3896
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3897
	RTL_W16(CPlusCmd, tp->cp_cmd);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3898
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3899
	RTL_W16(IntrMitigate, 0x0000);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3900
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3901
	rtl_set_rx_tx_desc_registers(tp, ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3902
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3903
	RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3904
	rtl_set_rx_tx_config_registers(tp);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3905
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3906
	RTL_W8(Cfg9346, Cfg9346_Lock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3907
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3908
	RTL_R8(IntrMask);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3909
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3910
	rtl_set_rx_mode(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3911
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3912
	RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3913
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3914
	RTL_W16(MultiIntr, RTL_R16(MultiIntr) & 0xf000);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3915
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3916
	RTL_W16(IntrMask, tp->intr_event);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3917
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3918
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3919
static int rtl8169_change_mtu(struct net_device *dev, int new_mtu)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3920
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3921
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3922
	int ret = 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3923
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3924
	if (new_mtu < ETH_ZLEN || new_mtu > SafeMtu)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3925
		return -EINVAL;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3926
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3927
	dev->mtu = new_mtu;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3928
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3929
	if (!netif_running(dev))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3930
		goto out;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3931
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3932
	rtl8169_down(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3933
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3934
	rtl8169_set_rxbufsize(tp, dev->mtu);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3935
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3936
	ret = rtl8169_init_ring(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3937
	if (ret < 0)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3938
		goto out;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3939
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3940
	napi_enable(&tp->napi);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3941
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3942
	rtl_hw_start(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3943
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3944
	rtl8169_request_timer(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3945
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3946
out:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3947
	return ret;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3948
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3949
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3950
static inline void rtl8169_make_unusable_by_asic(struct RxDesc *desc)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3951
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3952
	desc->addr = cpu_to_le64(0x0badbadbadbadbadull);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3953
	desc->opts1 &= ~cpu_to_le32(DescOwn | RsvdMask);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3954
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3955
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3956
static void rtl8169_free_rx_skb(struct rtl8169_private *tp,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3957
				struct sk_buff **sk_buff, struct RxDesc *desc)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3958
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3959
	struct pci_dev *pdev = tp->pci_dev;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3960
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3961
	pci_unmap_single(pdev, le64_to_cpu(desc->addr), tp->rx_buf_sz,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3962
			 PCI_DMA_FROMDEVICE);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3963
	dev_kfree_skb(*sk_buff);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3964
	*sk_buff = NULL;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3965
	rtl8169_make_unusable_by_asic(desc);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3966
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3967
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3968
static inline void rtl8169_mark_to_asic(struct RxDesc *desc, u32 rx_buf_sz)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3969
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3970
	u32 eor = le32_to_cpu(desc->opts1) & RingEnd;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3971
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3972
	desc->opts1 = cpu_to_le32(DescOwn | eor | rx_buf_sz);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3973
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3974
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3975
static inline void rtl8169_map_to_asic(struct RxDesc *desc, dma_addr_t mapping,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3976
				       u32 rx_buf_sz)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3977
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3978
	desc->addr = cpu_to_le64(mapping);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3979
	wmb();
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3980
	rtl8169_mark_to_asic(desc, rx_buf_sz);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3981
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3982
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3983
static struct sk_buff *rtl8169_alloc_rx_skb(struct pci_dev *pdev,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3984
					    struct net_device *dev,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3985
					    struct RxDesc *desc, int rx_buf_sz,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3986
					    unsigned int align)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3987
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3988
	struct sk_buff *skb;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3989
	dma_addr_t mapping;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3990
	unsigned int pad;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3991
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3992
	pad = align ? align : NET_IP_ALIGN;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3993
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3994
	skb = netdev_alloc_skb(dev, rx_buf_sz + pad);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3995
	if (!skb)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3996
		goto err_out;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3997
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3998
	skb_reserve(skb, align ? ((pad - 1) & (unsigned long)skb->data) : pad);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3999
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4000
	mapping = pci_map_single(pdev, skb->data, rx_buf_sz,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4001
				 PCI_DMA_FROMDEVICE);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4002
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4003
	rtl8169_map_to_asic(desc, mapping, rx_buf_sz);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4004
out:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4005
	return skb;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4006
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4007
err_out:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4008
	rtl8169_make_unusable_by_asic(desc);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4009
	goto out;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4010
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4011
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4012
static void rtl8169_rx_clear(struct rtl8169_private *tp)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4013
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4014
	unsigned int i;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4015
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4016
	for (i = 0; i < NUM_RX_DESC; i++) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4017
		if (tp->Rx_skbuff[i]) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4018
			rtl8169_free_rx_skb(tp, tp->Rx_skbuff + i,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4019
					    tp->RxDescArray + i);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4020
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4021
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4022
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4023
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4024
static u32 rtl8169_rx_fill(struct rtl8169_private *tp, struct net_device *dev,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4025
			   u32 start, u32 end)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4026
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4027
	u32 cur;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4028
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4029
	for (cur = start; end - cur != 0; cur++) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4030
		struct sk_buff *skb;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4031
		unsigned int i = cur % NUM_RX_DESC;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4032
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4033
		WARN_ON((s32)(end - cur) < 0);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4034
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4035
		if (tp->Rx_skbuff[i])
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4036
			continue;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4037
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4038
		skb = rtl8169_alloc_rx_skb(tp->pci_dev, dev,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4039
					   tp->RxDescArray + i,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4040
					   tp->rx_buf_sz, tp->align);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4041
		if (!skb)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4042
			break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4043
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4044
		tp->Rx_skbuff[i] = skb;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4045
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4046
	return cur - start;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4047
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4048
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4049
static inline void rtl8169_mark_as_last_descriptor(struct RxDesc *desc)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4050
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4051
	desc->opts1 |= cpu_to_le32(RingEnd);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4052
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4053
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4054
static void rtl8169_init_ring_indexes(struct rtl8169_private *tp)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4055
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4056
	tp->dirty_tx = tp->dirty_rx = tp->cur_tx = tp->cur_rx = 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4057
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4058
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4059
static int rtl8169_init_ring(struct net_device *dev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4060
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4061
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4062
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4063
	rtl8169_init_ring_indexes(tp);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4064
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4065
	memset(tp->tx_skb, 0x0, NUM_TX_DESC * sizeof(struct ring_info));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4066
	memset(tp->Rx_skbuff, 0x0, NUM_RX_DESC * sizeof(struct sk_buff *));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4067
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4068
	if (rtl8169_rx_fill(tp, dev, 0, NUM_RX_DESC) != NUM_RX_DESC)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4069
		goto err_out;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4070
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4071
	rtl8169_mark_as_last_descriptor(tp->RxDescArray + NUM_RX_DESC - 1);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4072
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4073
	return 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4074
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4075
err_out:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4076
	rtl8169_rx_clear(tp);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4077
	return -ENOMEM;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4078
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4079
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4080
static void rtl8169_unmap_tx_skb(struct pci_dev *pdev, struct ring_info *tx_skb,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4081
				 struct TxDesc *desc)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4082
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4083
	unsigned int len = tx_skb->len;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4084
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4085
	pci_unmap_single(pdev, le64_to_cpu(desc->addr), len, PCI_DMA_TODEVICE);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4086
	desc->opts1 = 0x00;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4087
	desc->opts2 = 0x00;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4088
	desc->addr = 0x00;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4089
	tx_skb->len = 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4090
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4091
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4092
static void rtl8169_tx_clear(struct rtl8169_private *tp)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4093
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4094
	unsigned int i;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4095
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4096
	for (i = tp->dirty_tx; i < tp->dirty_tx + NUM_TX_DESC; i++) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4097
		unsigned int entry = i % NUM_TX_DESC;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4098
		struct ring_info *tx_skb = tp->tx_skb + entry;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4099
		unsigned int len = tx_skb->len;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4100
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4101
		if (len) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4102
			struct sk_buff *skb = tx_skb->skb;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4103
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4104
			rtl8169_unmap_tx_skb(tp->pci_dev, tx_skb,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4105
					     tp->TxDescArray + entry);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4106
			if (skb) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4107
				dev_kfree_skb(skb);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4108
				tx_skb->skb = NULL;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4109
			}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4110
			tp->dev->stats.tx_dropped++;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4111
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4112
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4113
	tp->cur_tx = tp->dirty_tx = 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4114
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4115
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4116
static void rtl8169_schedule_work(struct net_device *dev, work_func_t task)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4117
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4118
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4119
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4120
	PREPARE_DELAYED_WORK(&tp->task, task);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4121
	schedule_delayed_work(&tp->task, 4);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4122
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4123
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4124
static void rtl8169_wait_for_quiescence(struct net_device *dev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4125
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4126
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4127
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4128
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4129
	synchronize_irq(dev->irq);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4130
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4131
	/* Wait for any pending NAPI task to complete */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4132
	napi_disable(&tp->napi);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4133
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4134
	rtl8169_irq_mask_and_ack(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4135
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4136
	tp->intr_mask = 0xffff;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4137
	RTL_W16(IntrMask, tp->intr_event);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4138
	napi_enable(&tp->napi);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4139
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4140
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4141
static void rtl8169_reinit_task(struct work_struct *work)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4142
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4143
	struct rtl8169_private *tp =
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4144
		container_of(work, struct rtl8169_private, task.work);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4145
	struct net_device *dev = tp->dev;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4146
	int ret;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4147
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4148
	rtnl_lock();
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4149
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4150
	if (!netif_running(dev))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4151
		goto out_unlock;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4152
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4153
	rtl8169_wait_for_quiescence(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4154
	rtl8169_close(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4155
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4156
	ret = rtl8169_open(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4157
	if (unlikely(ret < 0)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4158
		if (net_ratelimit() && netif_msg_drv(tp)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4159
			printk(KERN_ERR PFX "%s: reinit failure (status = %d)."
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4160
			       " Rescheduling.\n", dev->name, ret);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4161
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4162
		rtl8169_schedule_work(dev, rtl8169_reinit_task);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4163
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4164
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4165
out_unlock:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4166
	rtnl_unlock();
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4167
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4168
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4169
static void rtl8169_reset_task(struct work_struct *work)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4170
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4171
	struct rtl8169_private *tp =
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4172
		container_of(work, struct rtl8169_private, task.work);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4173
	struct net_device *dev = tp->dev;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4174
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4175
	rtnl_lock();
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4176
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4177
	if (!netif_running(dev))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4178
		goto out_unlock;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4179
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4180
	rtl8169_wait_for_quiescence(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4181
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4182
	rtl8169_rx_interrupt(dev, tp, tp->mmio_addr, ~(u32)0);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4183
	rtl8169_tx_clear(tp);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4184
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4185
	if (tp->dirty_rx == tp->cur_rx) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4186
		rtl8169_init_ring_indexes(tp);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4187
		rtl_hw_start(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4188
		netif_wake_queue(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4189
		rtl8169_check_link_status(dev, tp, tp->mmio_addr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4190
	} else {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4191
		if (net_ratelimit() && netif_msg_intr(tp)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4192
			printk(KERN_EMERG PFX "%s: Rx buffers shortage\n",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4193
			       dev->name);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4194
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4195
		rtl8169_schedule_work(dev, rtl8169_reset_task);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4196
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4197
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4198
out_unlock:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4199
	rtnl_unlock();
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4200
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4201
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4202
static void rtl8169_tx_timeout(struct net_device *dev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4203
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4204
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4205
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4206
	rtl8169_hw_reset(tp->mmio_addr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4207
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4208
	/* Let's wait a bit while any (async) irq lands on */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4209
	rtl8169_schedule_work(dev, rtl8169_reset_task);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4210
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4211
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4212
static int rtl8169_xmit_frags(struct rtl8169_private *tp, struct sk_buff *skb,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4213
			      u32 opts1)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4214
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4215
	struct skb_shared_info *info = skb_shinfo(skb);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4216
	unsigned int cur_frag, entry;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4217
	struct TxDesc * uninitialized_var(txd);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4218
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4219
	entry = tp->cur_tx;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4220
	for (cur_frag = 0; cur_frag < info->nr_frags; cur_frag++) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4221
		skb_frag_t *frag = info->frags + cur_frag;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4222
		dma_addr_t mapping;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4223
		u32 status, len;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4224
		void *addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4225
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4226
		entry = (entry + 1) % NUM_TX_DESC;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4227
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4228
		txd = tp->TxDescArray + entry;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4229
		len = frag->size;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4230
		addr = ((void *) page_address(frag->page)) + frag->page_offset;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4231
		mapping = pci_map_single(tp->pci_dev, addr, len, PCI_DMA_TODEVICE);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4232
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4233
		/* anti gcc 2.95.3 bugware (sic) */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4234
		status = opts1 | len | (RingEnd * !((entry + 1) % NUM_TX_DESC));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4235
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4236
		txd->opts1 = cpu_to_le32(status);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4237
		txd->addr = cpu_to_le64(mapping);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4238
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4239
		tp->tx_skb[entry].len = len;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4240
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4241
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4242
	if (cur_frag) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4243
		tp->tx_skb[entry].skb = skb;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4244
		txd->opts1 |= cpu_to_le32(LastFrag);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4245
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4246
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4247
	return cur_frag;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4248
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4249
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4250
static inline u32 rtl8169_tso_csum(struct sk_buff *skb, struct net_device *dev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4251
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4252
	if (dev->features & NETIF_F_TSO) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4253
		u32 mss = skb_shinfo(skb)->gso_size;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4254
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4255
		if (mss)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4256
			return LargeSend | ((mss & MSSMask) << MSSShift);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4257
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4258
	if (skb->ip_summed == CHECKSUM_PARTIAL) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4259
		const struct iphdr *ip = ip_hdr(skb);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4260
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4261
		if (ip->protocol == IPPROTO_TCP)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4262
			return IPCS | TCPCS;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4263
		else if (ip->protocol == IPPROTO_UDP)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4264
			return IPCS | UDPCS;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4265
		WARN_ON(1);	/* we need a WARN() */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4266
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4267
	return 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4268
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4269
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4270
static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4271
				      struct net_device *dev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4272
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4273
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4274
	unsigned int frags, entry = tp->cur_tx % NUM_TX_DESC;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4275
	struct TxDesc *txd = tp->TxDescArray + entry;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4276
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4277
	dma_addr_t mapping;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4278
	u32 status, len;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4279
	u32 opts1;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4280
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4281
	if (unlikely(TX_BUFFS_AVAIL(tp) < skb_shinfo(skb)->nr_frags)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4282
		if (netif_msg_drv(tp)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4283
			printk(KERN_ERR
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4284
			       "%s: BUG! Tx Ring full when queue awake!\n",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4285
			       dev->name);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4286
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4287
		goto err_stop;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4288
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4289
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4290
	if (unlikely(le32_to_cpu(txd->opts1) & DescOwn))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4291
		goto err_stop;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4292
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4293
	opts1 = DescOwn | rtl8169_tso_csum(skb, dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4294
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4295
	frags = rtl8169_xmit_frags(tp, skb, opts1);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4296
	if (frags) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4297
		len = skb_headlen(skb);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4298
		opts1 |= FirstFrag;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4299
	} else {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4300
		len = skb->len;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4301
		opts1 |= FirstFrag | LastFrag;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4302
		tp->tx_skb[entry].skb = skb;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4303
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4304
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4305
	mapping = pci_map_single(tp->pci_dev, skb->data, len, PCI_DMA_TODEVICE);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4306
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4307
	tp->tx_skb[entry].len = len;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4308
	txd->addr = cpu_to_le64(mapping);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4309
	txd->opts2 = cpu_to_le32(rtl8169_tx_vlan_tag(tp, skb));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4310
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4311
	wmb();
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4312
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4313
	/* anti gcc 2.95.3 bugware (sic) */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4314
	status = opts1 | len | (RingEnd * !((entry + 1) % NUM_TX_DESC));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4315
	txd->opts1 = cpu_to_le32(status);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4316
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4317
	tp->cur_tx += frags + 1;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4318
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4319
	smp_wmb();
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4320
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4321
	RTL_W8(TxPoll, NPQ);	/* set polling bit */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4322
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4323
	if (TX_BUFFS_AVAIL(tp) < MAX_SKB_FRAGS) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4324
		netif_stop_queue(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4325
		smp_rmb();
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4326
		if (TX_BUFFS_AVAIL(tp) >= MAX_SKB_FRAGS)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4327
			netif_wake_queue(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4328
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4329
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4330
	return NETDEV_TX_OK;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4331
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4332
err_stop:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4333
	netif_stop_queue(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4334
	dev->stats.tx_dropped++;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4335
	return NETDEV_TX_BUSY;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4336
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4337
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4338
static void rtl8169_pcierr_interrupt(struct net_device *dev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4339
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4340
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4341
	struct pci_dev *pdev = tp->pci_dev;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4342
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4343
	u16 pci_status, pci_cmd;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4344
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4345
	pci_read_config_word(pdev, PCI_COMMAND, &pci_cmd);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4346
	pci_read_config_word(pdev, PCI_STATUS, &pci_status);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4347
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4348
	if (netif_msg_intr(tp)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4349
		printk(KERN_ERR
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4350
		       "%s: PCI error (cmd = 0x%04x, status = 0x%04x).\n",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4351
		       dev->name, pci_cmd, pci_status);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4352
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4353
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4354
	/*
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4355
	 * The recovery sequence below admits a very elaborated explanation:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4356
	 * - it seems to work;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4357
	 * - I did not see what else could be done;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4358
	 * - it makes iop3xx happy.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4359
	 *
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4360
	 * Feel free to adjust to your needs.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4361
	 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4362
	if (pdev->broken_parity_status)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4363
		pci_cmd &= ~PCI_COMMAND_PARITY;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4364
	else
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4365
		pci_cmd |= PCI_COMMAND_SERR | PCI_COMMAND_PARITY;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4366
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4367
	pci_write_config_word(pdev, PCI_COMMAND, pci_cmd);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4368
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4369
	pci_write_config_word(pdev, PCI_STATUS,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4370
		pci_status & (PCI_STATUS_DETECTED_PARITY |
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4371
		PCI_STATUS_SIG_SYSTEM_ERROR | PCI_STATUS_REC_MASTER_ABORT |
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4372
		PCI_STATUS_REC_TARGET_ABORT | PCI_STATUS_SIG_TARGET_ABORT));
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4373
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4374
	/* The infamous DAC f*ckup only happens at boot time */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4375
	if ((tp->cp_cmd & PCIDAC) && !tp->dirty_rx && !tp->cur_rx) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4376
		if (netif_msg_intr(tp))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4377
			printk(KERN_INFO "%s: disabling PCI DAC.\n", dev->name);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4378
		tp->cp_cmd &= ~PCIDAC;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4379
		RTL_W16(CPlusCmd, tp->cp_cmd);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4380
		dev->features &= ~NETIF_F_HIGHDMA;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4381
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4382
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4383
	rtl8169_hw_reset(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4384
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4385
	rtl8169_schedule_work(dev, rtl8169_reinit_task);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4386
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4387
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4388
static void rtl8169_tx_interrupt(struct net_device *dev,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4389
				 struct rtl8169_private *tp,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4390
				 void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4391
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4392
	unsigned int dirty_tx, tx_left;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4393
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4394
	dirty_tx = tp->dirty_tx;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4395
	smp_rmb();
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4396
	tx_left = tp->cur_tx - dirty_tx;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4397
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4398
	while (tx_left > 0) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4399
		unsigned int entry = dirty_tx % NUM_TX_DESC;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4400
		struct ring_info *tx_skb = tp->tx_skb + entry;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4401
		u32 len = tx_skb->len;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4402
		u32 status;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4403
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4404
		rmb();
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4405
		status = le32_to_cpu(tp->TxDescArray[entry].opts1);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4406
		if (status & DescOwn)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4407
			break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4408
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4409
		dev->stats.tx_bytes += len;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4410
		dev->stats.tx_packets++;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4411
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4412
		rtl8169_unmap_tx_skb(tp->pci_dev, tx_skb, tp->TxDescArray + entry);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4413
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4414
		if (status & LastFrag) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4415
			dev_kfree_skb(tx_skb->skb);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4416
			tx_skb->skb = NULL;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4417
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4418
		dirty_tx++;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4419
		tx_left--;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4420
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4421
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4422
	if (tp->dirty_tx != dirty_tx) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4423
		tp->dirty_tx = dirty_tx;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4424
		smp_wmb();
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4425
		if (netif_queue_stopped(dev) &&
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4426
		    (TX_BUFFS_AVAIL(tp) >= MAX_SKB_FRAGS)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4427
			netif_wake_queue(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4428
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4429
		/*
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4430
		 * 8168 hack: TxPoll requests are lost when the Tx packets are
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4431
		 * too close. Let's kick an extra TxPoll request when a burst
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4432
		 * of start_xmit activity is detected (if it is not detected,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4433
		 * it is slow enough). -- FR
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4434
		 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4435
		smp_rmb();
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4436
		if (tp->cur_tx != dirty_tx)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4437
			RTL_W8(TxPoll, NPQ);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4438
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4439
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4440
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4441
static inline int rtl8169_fragmented_frame(u32 status)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4442
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4443
	return (status & (FirstFrag | LastFrag)) != (FirstFrag | LastFrag);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4444
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4445
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4446
static inline void rtl8169_rx_csum(struct sk_buff *skb, struct RxDesc *desc)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4447
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4448
	u32 opts1 = le32_to_cpu(desc->opts1);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4449
	u32 status = opts1 & RxProtoMask;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4450
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4451
	if (((status == RxProtoTCP) && !(opts1 & TCPFail)) ||
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4452
	    ((status == RxProtoUDP) && !(opts1 & UDPFail)) ||
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4453
	    ((status == RxProtoIP) && !(opts1 & IPFail)))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4454
		skb->ip_summed = CHECKSUM_UNNECESSARY;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4455
	else
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4456
		skb->ip_summed = CHECKSUM_NONE;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4457
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4458
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4459
static inline bool rtl8169_try_rx_copy(struct sk_buff **sk_buff,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4460
				       struct rtl8169_private *tp, int pkt_size,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4461
				       dma_addr_t addr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4462
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4463
	struct sk_buff *skb;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4464
	bool done = false;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4465
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4466
	if (pkt_size >= rx_copybreak)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4467
		goto out;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4468
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4469
	skb = netdev_alloc_skb_ip_align(tp->dev, pkt_size);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4470
	if (!skb)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4471
		goto out;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4472
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4473
	pci_dma_sync_single_for_cpu(tp->pci_dev, addr, pkt_size,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4474
				    PCI_DMA_FROMDEVICE);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4475
	skb_copy_from_linear_data(*sk_buff, skb->data, pkt_size);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4476
	*sk_buff = skb;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4477
	done = true;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4478
out:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4479
	return done;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4480
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4481
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4482
static int rtl8169_rx_interrupt(struct net_device *dev,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4483
				struct rtl8169_private *tp,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4484
				void __iomem *ioaddr, u32 budget)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4485
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4486
	unsigned int cur_rx, rx_left;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4487
	unsigned int delta, count;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4488
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4489
	cur_rx = tp->cur_rx;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4490
	rx_left = NUM_RX_DESC + tp->dirty_rx - cur_rx;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4491
	rx_left = min(rx_left, budget);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4492
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4493
	for (; rx_left > 0; rx_left--, cur_rx++) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4494
		unsigned int entry = cur_rx % NUM_RX_DESC;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4495
		struct RxDesc *desc = tp->RxDescArray + entry;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4496
		u32 status;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4497
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4498
		rmb();
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4499
		status = le32_to_cpu(desc->opts1);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4500
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4501
		if (status & DescOwn)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4502
			break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4503
		if (unlikely(status & RxRES)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4504
			if (netif_msg_rx_err(tp)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4505
				printk(KERN_INFO
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4506
				       "%s: Rx ERROR. status = %08x\n",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4507
				       dev->name, status);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4508
			}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4509
			dev->stats.rx_errors++;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4510
			if (status & (RxRWT | RxRUNT))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4511
				dev->stats.rx_length_errors++;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4512
			if (status & RxCRC)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4513
				dev->stats.rx_crc_errors++;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4514
			if (status & RxFOVF) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4515
				rtl8169_schedule_work(dev, rtl8169_reset_task);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4516
				dev->stats.rx_fifo_errors++;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4517
			}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4518
			rtl8169_mark_to_asic(desc, tp->rx_buf_sz);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4519
		} else {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4520
			struct sk_buff *skb = tp->Rx_skbuff[entry];
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4521
			dma_addr_t addr = le64_to_cpu(desc->addr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4522
			int pkt_size = (status & 0x00001FFF) - 4;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4523
			struct pci_dev *pdev = tp->pci_dev;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4524
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4525
			/*
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4526
			 * The driver does not support incoming fragmented
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4527
			 * frames. They are seen as a symptom of over-mtu
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4528
			 * sized frames.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4529
			 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4530
			if (unlikely(rtl8169_fragmented_frame(status))) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4531
				dev->stats.rx_dropped++;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4532
				dev->stats.rx_length_errors++;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4533
				rtl8169_mark_to_asic(desc, tp->rx_buf_sz);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4534
				continue;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4535
			}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4536
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4537
			rtl8169_rx_csum(skb, desc);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4538
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4539
			if (rtl8169_try_rx_copy(&skb, tp, pkt_size, addr)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4540
				pci_dma_sync_single_for_device(pdev, addr,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4541
					pkt_size, PCI_DMA_FROMDEVICE);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4542
				rtl8169_mark_to_asic(desc, tp->rx_buf_sz);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4543
			} else {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4544
				pci_unmap_single(pdev, addr, tp->rx_buf_sz,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4545
						 PCI_DMA_FROMDEVICE);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4546
				tp->Rx_skbuff[entry] = NULL;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4547
			}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4548
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4549
			skb_put(skb, pkt_size);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4550
			skb->protocol = eth_type_trans(skb, dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4551
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4552
			if (rtl8169_rx_vlan_skb(tp, desc, skb) < 0)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4553
				netif_receive_skb(skb);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4554
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4555
			dev->stats.rx_bytes += pkt_size;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4556
			dev->stats.rx_packets++;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4557
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4558
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4559
		/* Work around for AMD plateform. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4560
		if ((desc->opts2 & cpu_to_le32(0xfffe000)) &&
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4561
		    (tp->mac_version == RTL_GIGA_MAC_VER_05)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4562
			desc->opts2 = 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4563
			cur_rx++;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4564
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4565
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4566
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4567
	count = cur_rx - tp->cur_rx;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4568
	tp->cur_rx = cur_rx;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4569
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4570
	delta = rtl8169_rx_fill(tp, dev, tp->dirty_rx, tp->cur_rx);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4571
	if (!delta && count && netif_msg_intr(tp))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4572
		printk(KERN_INFO "%s: no Rx buffer allocated\n", dev->name);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4573
	tp->dirty_rx += delta;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4574
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4575
	/*
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4576
	 * FIXME: until there is periodic timer to try and refill the ring,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4577
	 * a temporary shortage may definitely kill the Rx process.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4578
	 * - disable the asic to try and avoid an overflow and kick it again
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4579
	 *   after refill ?
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4580
	 * - how do others driver handle this condition (Uh oh...).
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4581
	 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4582
	if ((tp->dirty_rx + NUM_RX_DESC == tp->cur_rx) && netif_msg_intr(tp))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4583
		printk(KERN_EMERG "%s: Rx buffers exhausted\n", dev->name);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4584
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4585
	return count;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4586
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4587
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4588
static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4589
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4590
	struct net_device *dev = dev_instance;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4591
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4592
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4593
	int handled = 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4594
	int status;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4595
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4596
	/* loop handling interrupts until we have no new ones or
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4597
	 * we hit a invalid/hotplug case.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4598
	 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4599
	status = RTL_R16(IntrStatus);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4600
	while (status && status != 0xffff) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4601
		handled = 1;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4602
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4603
		/* Handle all of the error cases first. These will reset
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4604
		 * the chip, so just exit the loop.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4605
		 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4606
		if (unlikely(!netif_running(dev))) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4607
			rtl8169_asic_down(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4608
			break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4609
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4610
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4611
		/* Work around for rx fifo overflow */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4612
		if (unlikely(status & RxFIFOOver) &&
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4613
		(tp->mac_version == RTL_GIGA_MAC_VER_11)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4614
			netif_stop_queue(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4615
			rtl8169_tx_timeout(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4616
			break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4617
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4618
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4619
		if (unlikely(status & SYSErr)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4620
			rtl8169_pcierr_interrupt(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4621
			break;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4622
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4623
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4624
		if (status & LinkChg)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4625
			rtl8169_check_link_status(dev, tp, ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4626
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4627
		/* We need to see the lastest version of tp->intr_mask to
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4628
		 * avoid ignoring an MSI interrupt and having to wait for
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4629
		 * another event which may never come.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4630
		 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4631
		smp_rmb();
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4632
		if (status & tp->intr_mask & tp->napi_event) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4633
			RTL_W16(IntrMask, tp->intr_event & ~tp->napi_event);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4634
			tp->intr_mask = ~tp->napi_event;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4635
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4636
			if (likely(napi_schedule_prep(&tp->napi)))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4637
				__napi_schedule(&tp->napi);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4638
			else if (netif_msg_intr(tp)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4639
				printk(KERN_INFO "%s: interrupt %04x in poll\n",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4640
				dev->name, status);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4641
			}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4642
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4643
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4644
		/* We only get a new MSI interrupt when all active irq
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4645
		 * sources on the chip have been acknowledged. So, ack
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4646
		 * everything we've seen and check if new sources have become
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4647
		 * active to avoid blocking all interrupts from the chip.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4648
		 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4649
		RTL_W16(IntrStatus,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4650
			(status & RxFIFOOver) ? (status | RxOverflow) : status);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4651
		status = RTL_R16(IntrStatus);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4652
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4653
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4654
	return IRQ_RETVAL(handled);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4655
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4656
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4657
static int rtl8169_poll(struct napi_struct *napi, int budget)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4658
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4659
	struct rtl8169_private *tp = container_of(napi, struct rtl8169_private, napi);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4660
	struct net_device *dev = tp->dev;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4661
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4662
	int work_done;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4663
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4664
	work_done = rtl8169_rx_interrupt(dev, tp, ioaddr, (u32) budget);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4665
	rtl8169_tx_interrupt(dev, tp, ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4666
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4667
	if (work_done < budget) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4668
		napi_complete(napi);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4669
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4670
		/* We need for force the visibility of tp->intr_mask
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4671
		 * for other CPUs, as we can loose an MSI interrupt
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4672
		 * and potentially wait for a retransmit timeout if we don't.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4673
		 * The posted write to IntrMask is safe, as it will
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4674
		 * eventually make it to the chip and we won't loose anything
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4675
		 * until it does.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4676
		 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4677
		tp->intr_mask = 0xffff;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4678
		smp_wmb();
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4679
		RTL_W16(IntrMask, tp->intr_event);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4680
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4681
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4682
	return work_done;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4683
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4684
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4685
static void rtl8169_rx_missed(struct net_device *dev, void __iomem *ioaddr)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4686
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4687
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4688
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4689
	if (tp->mac_version > RTL_GIGA_MAC_VER_06)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4690
		return;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4691
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4692
	dev->stats.rx_missed_errors += (RTL_R32(RxMissed) & 0xffffff);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4693
	RTL_W32(RxMissed, 0);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4694
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4695
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4696
static void rtl8169_down(struct net_device *dev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4697
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4698
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4699
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4700
	unsigned int intrmask;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4701
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4702
	rtl8169_delete_timer(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4703
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4704
	netif_stop_queue(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4705
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4706
	napi_disable(&tp->napi);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4707
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4708
core_down:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4709
	spin_lock_irq(&tp->lock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4710
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4711
	rtl8169_asic_down(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4712
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4713
	rtl8169_rx_missed(dev, ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4714
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4715
	spin_unlock_irq(&tp->lock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4716
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4717
	synchronize_irq(dev->irq);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4718
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4719
	/* Give a racing hard_start_xmit a few cycles to complete. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4720
	synchronize_sched();  /* FIXME: should this be synchronize_irq()? */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4721
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4722
	/*
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4723
	 * And now for the 50k$ question: are IRQ disabled or not ?
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4724
	 *
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4725
	 * Two paths lead here:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4726
	 * 1) dev->close
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4727
	 *    -> netif_running() is available to sync the current code and the
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4728
	 *       IRQ handler. See rtl8169_interrupt for details.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4729
	 * 2) dev->change_mtu
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4730
	 *    -> rtl8169_poll can not be issued again and re-enable the
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4731
	 *       interruptions. Let's simply issue the IRQ down sequence again.
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4732
	 *
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4733
	 * No loop if hotpluged or major error (0xffff).
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4734
	 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4735
	intrmask = RTL_R16(IntrMask);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4736
	if (intrmask && (intrmask != 0xffff))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4737
		goto core_down;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4738
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4739
	rtl8169_tx_clear(tp);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4740
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4741
	rtl8169_rx_clear(tp);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4742
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4743
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4744
static int rtl8169_close(struct net_device *dev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4745
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4746
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4747
	struct pci_dev *pdev = tp->pci_dev;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4748
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4749
	/* update counters before going down */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4750
	rtl8169_update_counters(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4751
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4752
	rtl8169_down(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4753
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4754
	free_irq(dev->irq, dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4755
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4756
	pci_free_consistent(pdev, R8169_RX_RING_BYTES, tp->RxDescArray,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4757
			    tp->RxPhyAddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4758
	pci_free_consistent(pdev, R8169_TX_RING_BYTES, tp->TxDescArray,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4759
			    tp->TxPhyAddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4760
	tp->TxDescArray = NULL;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4761
	tp->RxDescArray = NULL;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4762
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4763
	return 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4764
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4765
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4766
static void rtl_set_rx_mode(struct net_device *dev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4767
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4768
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4769
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4770
	unsigned long flags;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4771
	u32 mc_filter[2];	/* Multicast hash filter */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4772
	int rx_mode;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4773
	u32 tmp = 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4774
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4775
	if (dev->flags & IFF_PROMISC) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4776
		/* Unconditionally log net taps. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4777
		if (netif_msg_link(tp)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4778
			printk(KERN_NOTICE "%s: Promiscuous mode enabled.\n",
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4779
			       dev->name);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4780
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4781
		rx_mode =
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4782
		    AcceptBroadcast | AcceptMulticast | AcceptMyPhys |
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4783
		    AcceptAllPhys;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4784
		mc_filter[1] = mc_filter[0] = 0xffffffff;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4785
	} else if ((dev->mc_count > multicast_filter_limit) ||
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4786
		   (dev->flags & IFF_ALLMULTI)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4787
		/* Too many to filter perfectly -- accept all multicasts. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4788
		rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4789
		mc_filter[1] = mc_filter[0] = 0xffffffff;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4790
	} else {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4791
		struct dev_mc_list *mclist;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4792
		unsigned int i;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4793
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4794
		rx_mode = AcceptBroadcast | AcceptMyPhys;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4795
		mc_filter[1] = mc_filter[0] = 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4796
		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4797
		     i++, mclist = mclist->next) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4798
			int bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4799
			mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4800
			rx_mode |= AcceptMulticast;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4801
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4802
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4803
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4804
	spin_lock_irqsave(&tp->lock, flags);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4805
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4806
	tmp = rtl8169_rx_config | rx_mode |
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4807
	      (RTL_R32(RxConfig) & rtl_chip_info[tp->chipset].RxConfigMask);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4808
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4809
	if (tp->mac_version > RTL_GIGA_MAC_VER_06) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4810
		u32 data = mc_filter[0];
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4811
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4812
		mc_filter[0] = swab32(mc_filter[1]);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4813
		mc_filter[1] = swab32(data);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4814
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4815
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4816
	RTL_W32(MAR0 + 0, mc_filter[0]);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4817
	RTL_W32(MAR0 + 4, mc_filter[1]);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4818
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4819
	RTL_W32(RxConfig, tmp);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4820
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4821
	spin_unlock_irqrestore(&tp->lock, flags);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4822
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4823
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4824
/**
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4825
 *  rtl8169_get_stats - Get rtl8169 read/write statistics
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4826
 *  @dev: The Ethernet Device to get statistics for
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4827
 *
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4828
 *  Get TX/RX statistics for rtl8169
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4829
 */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4830
static struct net_device_stats *rtl8169_get_stats(struct net_device *dev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4831
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4832
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4833
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4834
	unsigned long flags;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4835
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4836
	if (netif_running(dev)) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4837
		spin_lock_irqsave(&tp->lock, flags);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4838
		rtl8169_rx_missed(dev, ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4839
		spin_unlock_irqrestore(&tp->lock, flags);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4840
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4841
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4842
	return &dev->stats;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4843
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4844
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4845
static void rtl8169_net_suspend(struct net_device *dev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4846
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4847
	if (!netif_running(dev))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4848
		return;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4849
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4850
	netif_device_detach(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4851
	netif_stop_queue(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4852
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4853
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4854
#ifdef CONFIG_PM
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4855
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4856
static int rtl8169_suspend(struct device *device)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4857
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4858
	struct pci_dev *pdev = to_pci_dev(device);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4859
	struct net_device *dev = pci_get_drvdata(pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4860
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4861
	rtl8169_net_suspend(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4862
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4863
	return 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4864
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4865
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4866
static int rtl8169_resume(struct device *device)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4867
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4868
	struct pci_dev *pdev = to_pci_dev(device);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4869
	struct net_device *dev = pci_get_drvdata(pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4870
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4871
	if (!netif_running(dev))
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4872
		goto out;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4873
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4874
	netif_device_attach(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4875
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4876
	rtl8169_schedule_work(dev, rtl8169_reset_task);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4877
out:
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4878
	return 0;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4879
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4880
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4881
static const struct dev_pm_ops rtl8169_pm_ops = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4882
	.suspend = rtl8169_suspend,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4883
	.resume = rtl8169_resume,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4884
	.freeze = rtl8169_suspend,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4885
	.thaw = rtl8169_resume,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4886
	.poweroff = rtl8169_suspend,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4887
	.restore = rtl8169_resume,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4888
};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4889
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4890
#define RTL8169_PM_OPS	(&rtl8169_pm_ops)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4891
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4892
#else /* !CONFIG_PM */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4893
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4894
#define RTL8169_PM_OPS	NULL
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4895
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4896
#endif /* !CONFIG_PM */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4897
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4898
static void rtl_shutdown(struct pci_dev *pdev)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4899
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4900
	struct net_device *dev = pci_get_drvdata(pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4901
	struct rtl8169_private *tp = netdev_priv(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4902
	void __iomem *ioaddr = tp->mmio_addr;
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4903
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4904
	rtl8169_net_suspend(dev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4905
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4906
	/* restore original MAC address */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4907
	rtl_rar_set(tp, dev->perm_addr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4908
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4909
	spin_lock_irq(&tp->lock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4910
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4911
	rtl8169_asic_down(ioaddr);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4912
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4913
	spin_unlock_irq(&tp->lock);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4914
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4915
	if (system_state == SYSTEM_POWER_OFF) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4916
		/* WoL fails with some 8168 when the receiver is disabled. */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4917
		if (tp->features & RTL_FEATURE_WOL) {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4918
			pci_clear_master(pdev);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4919
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4920
			RTL_W8(ChipCmd, CmdRxEnb);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4921
			/* PCI commit */
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4922
			RTL_R8(ChipCmd);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4923
		}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4924
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4925
		pci_wake_from_d3(pdev, true);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4926
		pci_set_power_state(pdev, PCI_D3hot);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4927
	}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4928
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4929
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4930
static struct pci_driver rtl8169_pci_driver = {
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4931
	.name		= MODULENAME,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4932
	.id_table	= rtl8169_pci_tbl,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4933
	.probe		= rtl8169_init_one,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4934
	.remove		= __devexit_p(rtl8169_remove_one),
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4935
	.shutdown	= rtl_shutdown,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4936
	.driver.pm	= RTL8169_PM_OPS,
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4937
};
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4938
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4939
static int __init rtl8169_init_module(void)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4940
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4941
	return pci_register_driver(&rtl8169_pci_driver);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4942
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4943
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4944
static void __exit rtl8169_cleanup_module(void)
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4945
{
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4946
	pci_unregister_driver(&rtl8169_pci_driver);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4947
}
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4948
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4949
module_init(rtl8169_init_module);
7aeb32a5bb6d Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4950
module_exit(rtl8169_cleanup_module);