devices/r8169-2.6.33-ethercat.c
author Knud Baastrup <kba@deif.com>
Tue, 14 Apr 2015 10:12:55 -0400
changeset 2625 e25af8bd3957
parent 2589 2b9c78543663
permissions -rw-r--r--
Eoe mac address now derived from unique mac.
The EoE MAC address is now derived from the NIC part of the first global
unique MAC address of the linked list of available network interfaces or
otherwise the MAC address used by the EtherCAT master. The EoE MAC address
will get the format 02:NIC:NIC:NIC:RP:RP where NIC comes from the unique MAC
address (if available) and RP is the ring position of the EoE slave.
2053
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
     1
/*
cceb9aacf4a6 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.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
     3
 *
cceb9aacf4a6 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>
cceb9aacf4a6 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>
cceb9aacf4a6 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.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
     7
 *
cceb9aacf4a6 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.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
     9
 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    10
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    11
#include <linux/module.h>
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    12
#include <linux/moduleparam.h>
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    13
#include <linux/pci.h>
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    14
#include <linux/netdevice.h>
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    15
#include <linux/etherdevice.h>
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    16
#include <linux/delay.h>
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    17
#include <linux/ethtool.h>
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    18
#include <linux/mii.h>
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    19
#include <linux/if_vlan.h>
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    20
#include <linux/crc32.h>
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    21
#include <linux/in.h>
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    22
#include <linux/ip.h>
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    23
#include <linux/tcp.h>
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    24
#include <linux/init.h>
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    25
#include <linux/dma-mapping.h>
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    26
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    27
#include <asm/system.h>
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    28
#include <asm/io.h>
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    29
#include <asm/irq.h>
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    30
#include "../globals.h"
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    31
#include "ecdev.h"
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    32
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    33
#define RTL8169_VERSION "2.3LK-NAPI"
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    34
#define MODULENAME "ec_r8169"
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    35
#define PFX MODULENAME ": "
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    36
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    37
#ifdef RTL8169_DEBUG
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    38
#define assert(expr) \
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    39
	if (!(expr)) {					\
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    40
		printk( "Assertion failed! %s,%s,%s,line=%d\n",	\
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    41
		#expr,__FILE__,__func__,__LINE__);		\
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    42
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    43
#define dprintk(fmt, args...) \
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    44
	do { printk(KERN_DEBUG PFX fmt, ## args); } while (0)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    45
#else
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    46
#define assert(expr) do {} while (0)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    47
#define dprintk(fmt, args...)	do {} while (0)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    48
#endif /* RTL8169_DEBUG */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    49
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    50
#define R8169_MSG_DEFAULT \
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    51
	(NETIF_MSG_DRV | NETIF_MSG_PROBE | NETIF_MSG_IFUP | NETIF_MSG_IFDOWN)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    52
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    53
#define TX_BUFFS_AVAIL(tp) \
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    54
	(tp->dirty_tx + NUM_TX_DESC - tp->cur_tx - 1)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    55
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    56
/* Maximum number of multicast addresses to filter (vs. Rx-all-multicast).
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    57
   The RTL chips use a 64 element hash table based on the Ethernet CRC. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    58
static const int multicast_filter_limit = 32;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    59
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    60
/* MAC address length */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    61
#define MAC_ADDR_LEN	6
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    62
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    63
#define MAX_READ_REQUEST_SHIFT	12
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    64
#define RX_FIFO_THRESH	7	/* 7 means NO threshold, Rx buffer level before first PCI xfer. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    65
#define RX_DMA_BURST	6	/* Maximum PCI burst, '6' is 1024 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    66
#define TX_DMA_BURST	6	/* Maximum PCI burst, '6' is 1024 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    67
#define EarlyTxThld	0x3F	/* 0x3F means NO early transmit */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    68
#define SafeMtu		0x1c20	/* ... actually life sucks beyond ~7k */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    69
#define InterFrameGap	0x03	/* 3 means InterFrameGap = the shortest one */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    70
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    71
#define R8169_REGS_SIZE		256
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    72
#define R8169_NAPI_WEIGHT	64
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    73
#define NUM_TX_DESC	64	/* Number of Tx descriptor registers */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    74
#define NUM_RX_DESC	256	/* Number of Rx descriptor registers */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    75
#define RX_BUF_SIZE	1536	/* Rx Buffer size */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    76
#define R8169_TX_RING_BYTES	(NUM_TX_DESC * sizeof(struct TxDesc))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    77
#define R8169_RX_RING_BYTES	(NUM_RX_DESC * sizeof(struct RxDesc))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    78
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    79
#define RTL8169_TX_TIMEOUT	(6*HZ)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    80
#define RTL8169_PHY_TIMEOUT	(10*HZ)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    81
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    82
#define RTL_EEPROM_SIG		cpu_to_le32(0x8129)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    83
#define RTL_EEPROM_SIG_MASK	cpu_to_le32(0xffff)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    84
#define RTL_EEPROM_SIG_ADDR	0x0000
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    85
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    86
/* write/read MMIO register */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    87
#define RTL_W8(reg, val8)	writeb ((val8), ioaddr + (reg))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    88
#define RTL_W16(reg, val16)	writew ((val16), ioaddr + (reg))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    89
#define RTL_W32(reg, val32)	writel ((val32), ioaddr + (reg))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    90
#define RTL_R8(reg)		readb (ioaddr + (reg))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    91
#define RTL_R16(reg)		readw (ioaddr + (reg))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    92
#define RTL_R32(reg)		((unsigned long) readl (ioaddr + (reg)))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    93
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    94
enum mac_version {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    95
	RTL_GIGA_MAC_NONE   = 0x00,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    96
	RTL_GIGA_MAC_VER_01 = 0x01, // 8169
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    97
	RTL_GIGA_MAC_VER_02 = 0x02, // 8169S
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    98
	RTL_GIGA_MAC_VER_03 = 0x03, // 8110S
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
    99
	RTL_GIGA_MAC_VER_04 = 0x04, // 8169SB
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   100
	RTL_GIGA_MAC_VER_05 = 0x05, // 8110SCd
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   101
	RTL_GIGA_MAC_VER_06 = 0x06, // 8110SCe
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   102
	RTL_GIGA_MAC_VER_07 = 0x07, // 8102e
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   103
	RTL_GIGA_MAC_VER_08 = 0x08, // 8102e
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   104
	RTL_GIGA_MAC_VER_09 = 0x09, // 8102e
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   105
	RTL_GIGA_MAC_VER_10 = 0x0a, // 8101e
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   106
	RTL_GIGA_MAC_VER_11 = 0x0b, // 8168Bb
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   107
	RTL_GIGA_MAC_VER_12 = 0x0c, // 8168Be
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   108
	RTL_GIGA_MAC_VER_13 = 0x0d, // 8101Eb
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   109
	RTL_GIGA_MAC_VER_14 = 0x0e, // 8101 ?
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   110
	RTL_GIGA_MAC_VER_15 = 0x0f, // 8101 ?
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   111
	RTL_GIGA_MAC_VER_16 = 0x11, // 8101Ec
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   112
	RTL_GIGA_MAC_VER_17 = 0x10, // 8168Bf
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   113
	RTL_GIGA_MAC_VER_18 = 0x12, // 8168CP
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   114
	RTL_GIGA_MAC_VER_19 = 0x13, // 8168C
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   115
	RTL_GIGA_MAC_VER_20 = 0x14, // 8168C
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   116
	RTL_GIGA_MAC_VER_21 = 0x15, // 8168C
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   117
	RTL_GIGA_MAC_VER_22 = 0x16, // 8168C
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   118
	RTL_GIGA_MAC_VER_23 = 0x17, // 8168CP
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   119
	RTL_GIGA_MAC_VER_24 = 0x18, // 8168CP
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   120
	RTL_GIGA_MAC_VER_25 = 0x19, // 8168D
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   121
	RTL_GIGA_MAC_VER_26 = 0x1a, // 8168D
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   122
	RTL_GIGA_MAC_VER_27 = 0x1b  // 8168DP
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   123
};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   124
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   125
#define _R(NAME,MAC,MASK) \
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   126
	{ .name = NAME, .mac_version = MAC, .RxConfigMask = MASK }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   127
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   128
static const struct {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   129
	const char *name;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   130
	u8 mac_version;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   131
	u32 RxConfigMask;	/* Clears the bits supported by this chip */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   132
} rtl_chip_info[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   133
	_R("RTL8169",		RTL_GIGA_MAC_VER_01, 0xff7e1880), // 8169
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   134
	_R("RTL8169s",		RTL_GIGA_MAC_VER_02, 0xff7e1880), // 8169S
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   135
	_R("RTL8110s",		RTL_GIGA_MAC_VER_03, 0xff7e1880), // 8110S
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   136
	_R("RTL8169sb/8110sb",	RTL_GIGA_MAC_VER_04, 0xff7e1880), // 8169SB
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   137
	_R("RTL8169sc/8110sc",	RTL_GIGA_MAC_VER_05, 0xff7e1880), // 8110SCd
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   138
	_R("RTL8169sc/8110sc",	RTL_GIGA_MAC_VER_06, 0xff7e1880), // 8110SCe
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   139
	_R("RTL8102e",		RTL_GIGA_MAC_VER_07, 0xff7e1880), // PCI-E
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   140
	_R("RTL8102e",		RTL_GIGA_MAC_VER_08, 0xff7e1880), // PCI-E
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   141
	_R("RTL8102e",		RTL_GIGA_MAC_VER_09, 0xff7e1880), // PCI-E
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   142
	_R("RTL8101e",		RTL_GIGA_MAC_VER_10, 0xff7e1880), // PCI-E
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   143
	_R("RTL8168b/8111b",	RTL_GIGA_MAC_VER_11, 0xff7e1880), // PCI-E
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   144
	_R("RTL8168b/8111b",	RTL_GIGA_MAC_VER_12, 0xff7e1880), // PCI-E
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   145
	_R("RTL8101e",		RTL_GIGA_MAC_VER_13, 0xff7e1880), // PCI-E 8139
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   146
	_R("RTL8100e",		RTL_GIGA_MAC_VER_14, 0xff7e1880), // PCI-E 8139
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   147
	_R("RTL8100e",		RTL_GIGA_MAC_VER_15, 0xff7e1880), // PCI-E 8139
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   148
	_R("RTL8168b/8111b",	RTL_GIGA_MAC_VER_17, 0xff7e1880), // PCI-E
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   149
	_R("RTL8101e",		RTL_GIGA_MAC_VER_16, 0xff7e1880), // PCI-E
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   150
	_R("RTL8168cp/8111cp",	RTL_GIGA_MAC_VER_18, 0xff7e1880), // PCI-E
cceb9aacf4a6 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_19, 0xff7e1880), // PCI-E
cceb9aacf4a6 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_20, 0xff7e1880), // PCI-E
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   153
	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_21, 0xff7e1880), // PCI-E
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   154
	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_22, 0xff7e1880), // PCI-E
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   155
	_R("RTL8168cp/8111cp",	RTL_GIGA_MAC_VER_23, 0xff7e1880), // PCI-E
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   156
	_R("RTL8168cp/8111cp",	RTL_GIGA_MAC_VER_24, 0xff7e1880), // PCI-E
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   157
	_R("RTL8168d/8111d",	RTL_GIGA_MAC_VER_25, 0xff7e1880), // PCI-E
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   158
	_R("RTL8168d/8111d",	RTL_GIGA_MAC_VER_26, 0xff7e1880), // PCI-E
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   159
	_R("RTL8168dp/8111dp",	RTL_GIGA_MAC_VER_27, 0xff7e1880)  // PCI-E
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   160
};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   161
#undef _R
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   162
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   163
enum cfg_version {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   164
	RTL_CFG_0 = 0x00,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   165
	RTL_CFG_1,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   166
	RTL_CFG_2
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   167
};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   168
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   169
static void rtl_hw_start_8169(struct net_device *);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   170
static void rtl_hw_start_8168(struct net_device *);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   171
static void rtl_hw_start_8101(struct net_device *);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   172
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   173
static struct pci_device_id rtl8169_pci_tbl[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   174
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8129), 0, 0, RTL_CFG_0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   175
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8136), 0, 0, RTL_CFG_2 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   176
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8167), 0, 0, RTL_CFG_0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   177
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8168), 0, 0, RTL_CFG_1 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   178
	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8169), 0, 0, RTL_CFG_0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   179
	{ PCI_DEVICE(PCI_VENDOR_ID_DLINK,	0x4300), 0, 0, RTL_CFG_0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   180
	{ PCI_DEVICE(PCI_VENDOR_ID_AT,		0xc107), 0, 0, RTL_CFG_0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   181
	{ PCI_DEVICE(0x16ec,			0x0116), 0, 0, RTL_CFG_0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   182
	{ PCI_VENDOR_ID_LINKSYS,		0x1032,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   183
		PCI_ANY_ID, 0x0024, 0, 0, RTL_CFG_0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   184
	{ 0x0001,				0x8168,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   185
		PCI_ANY_ID, 0x2410, 0, 0, RTL_CFG_2 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   186
	{0,},
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   187
};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   188
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   189
/* prevent driver from being loaded automatically */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   190
//MODULE_DEVICE_TABLE(pci, rtl8169_pci_tbl);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   191
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   192
/*
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   193
 * we set our copybreak very high so that we don't have
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   194
 * to allocate 16k frames all the time (see note in
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   195
 * rtl8169_open()
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   196
 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   197
static int rx_copybreak = 16383;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   198
static int use_dac;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   199
static struct {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   200
	u32 msg_enable;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   201
} debug = { -1 };
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   202
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   203
enum rtl_registers {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   204
	MAC0		= 0,	/* Ethernet hardware address. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   205
	MAC4		= 4,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   206
	MAR0		= 8,	/* Multicast filter. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   207
	CounterAddrLow		= 0x10,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   208
	CounterAddrHigh		= 0x14,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   209
	TxDescStartAddrLow	= 0x20,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   210
	TxDescStartAddrHigh	= 0x24,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   211
	TxHDescStartAddrLow	= 0x28,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   212
	TxHDescStartAddrHigh	= 0x2c,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   213
	FLASH		= 0x30,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   214
	ERSR		= 0x36,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   215
	ChipCmd		= 0x37,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   216
	TxPoll		= 0x38,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   217
	IntrMask	= 0x3c,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   218
	IntrStatus	= 0x3e,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   219
	TxConfig	= 0x40,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   220
	RxConfig	= 0x44,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   221
	RxMissed	= 0x4c,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   222
	Cfg9346		= 0x50,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   223
	Config0		= 0x51,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   224
	Config1		= 0x52,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   225
	Config2		= 0x53,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   226
	Config3		= 0x54,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   227
	Config4		= 0x55,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   228
	Config5		= 0x56,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   229
	MultiIntr	= 0x5c,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   230
	PHYAR		= 0x60,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   231
	PHYstatus	= 0x6c,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   232
	RxMaxSize	= 0xda,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   233
	CPlusCmd	= 0xe0,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   234
	IntrMitigate	= 0xe2,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   235
	RxDescAddrLow	= 0xe4,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   236
	RxDescAddrHigh	= 0xe8,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   237
	EarlyTxThres	= 0xec,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   238
	FuncEvent	= 0xf0,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   239
	FuncEventMask	= 0xf4,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   240
	FuncPresetState	= 0xf8,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   241
	FuncForceEvent	= 0xfc,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   242
};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   243
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   244
enum rtl8110_registers {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   245
	TBICSR			= 0x64,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   246
	TBI_ANAR		= 0x68,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   247
	TBI_LPAR		= 0x6a,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   248
};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   249
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   250
enum rtl8168_8101_registers {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   251
	CSIDR			= 0x64,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   252
	CSIAR			= 0x68,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   253
#define	CSIAR_FLAG			0x80000000
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   254
#define	CSIAR_WRITE_CMD			0x80000000
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   255
#define	CSIAR_BYTE_ENABLE		0x0f
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   256
#define	CSIAR_BYTE_ENABLE_SHIFT		12
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   257
#define	CSIAR_ADDR_MASK			0x0fff
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   258
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   259
	EPHYAR			= 0x80,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   260
#define	EPHYAR_FLAG			0x80000000
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   261
#define	EPHYAR_WRITE_CMD		0x80000000
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   262
#define	EPHYAR_REG_MASK			0x1f
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   263
#define	EPHYAR_REG_SHIFT		16
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   264
#define	EPHYAR_DATA_MASK		0xffff
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   265
	DBG_REG			= 0xd1,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   266
#define	FIX_NAK_1			(1 << 4)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   267
#define	FIX_NAK_2			(1 << 3)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   268
	EFUSEAR			= 0xdc,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   269
#define	EFUSEAR_FLAG			0x80000000
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   270
#define	EFUSEAR_WRITE_CMD		0x80000000
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   271
#define	EFUSEAR_READ_CMD		0x00000000
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   272
#define	EFUSEAR_REG_MASK		0x03ff
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   273
#define	EFUSEAR_REG_SHIFT		8
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   274
#define	EFUSEAR_DATA_MASK		0xff
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   275
};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   276
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   277
enum rtl_register_content {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   278
	/* InterruptStatusBits */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   279
	SYSErr		= 0x8000,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   280
	PCSTimeout	= 0x4000,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   281
	SWInt		= 0x0100,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   282
	TxDescUnavail	= 0x0080,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   283
	RxFIFOOver	= 0x0040,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   284
	LinkChg		= 0x0020,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   285
	RxOverflow	= 0x0010,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   286
	TxErr		= 0x0008,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   287
	TxOK		= 0x0004,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   288
	RxErr		= 0x0002,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   289
	RxOK		= 0x0001,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   290
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   291
	/* RxStatusDesc */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   292
	RxFOVF	= (1 << 23),
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   293
	RxRWT	= (1 << 22),
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   294
	RxRES	= (1 << 21),
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   295
	RxRUNT	= (1 << 20),
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   296
	RxCRC	= (1 << 19),
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   297
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   298
	/* ChipCmdBits */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   299
	CmdReset	= 0x10,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   300
	CmdRxEnb	= 0x08,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   301
	CmdTxEnb	= 0x04,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   302
	RxBufEmpty	= 0x01,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   303
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   304
	/* TXPoll register p.5 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   305
	HPQ		= 0x80,		/* Poll cmd on the high prio queue */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   306
	NPQ		= 0x40,		/* Poll cmd on the low prio queue */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   307
	FSWInt		= 0x01,		/* Forced software interrupt */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   308
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   309
	/* Cfg9346Bits */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   310
	Cfg9346_Lock	= 0x00,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   311
	Cfg9346_Unlock	= 0xc0,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   312
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   313
	/* rx_mode_bits */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   314
	AcceptErr	= 0x20,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   315
	AcceptRunt	= 0x10,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   316
	AcceptBroadcast	= 0x08,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   317
	AcceptMulticast	= 0x04,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   318
	AcceptMyPhys	= 0x02,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   319
	AcceptAllPhys	= 0x01,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   320
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   321
	/* RxConfigBits */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   322
	RxCfgFIFOShift	= 13,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   323
	RxCfgDMAShift	=  8,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   324
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   325
	/* TxConfigBits */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   326
	TxInterFrameGapShift = 24,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   327
	TxDMAShift = 8,	/* DMA burst value (0-7) is shift this many bits */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   328
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   329
	/* Config1 register p.24 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   330
	LEDS1		= (1 << 7),
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   331
	LEDS0		= (1 << 6),
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   332
	MSIEnable	= (1 << 5),	/* Enable Message Signaled Interrupt */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   333
	Speed_down	= (1 << 4),
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   334
	MEMMAP		= (1 << 3),
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   335
	IOMAP		= (1 << 2),
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   336
	VPD		= (1 << 1),
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   337
	PMEnable	= (1 << 0),	/* Power Management Enable */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   338
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   339
	/* Config2 register p. 25 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   340
	PCI_Clock_66MHz = 0x01,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   341
	PCI_Clock_33MHz = 0x00,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   342
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   343
	/* Config3 register p.25 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   344
	MagicPacket	= (1 << 5),	/* Wake up when receives a Magic Packet */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   345
	LinkUp		= (1 << 4),	/* Wake up when the cable connection is re-established */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   346
	Beacon_en	= (1 << 0),	/* 8168 only. Reserved in the 8168b */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   347
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   348
	/* Config5 register p.27 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   349
	BWF		= (1 << 6),	/* Accept Broadcast wakeup frame */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   350
	MWF		= (1 << 5),	/* Accept Multicast wakeup frame */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   351
	UWF		= (1 << 4),	/* Accept Unicast wakeup frame */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   352
	LanWake		= (1 << 1),	/* LanWake enable/disable */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   353
	PMEStatus	= (1 << 0),	/* PME status can be reset by PCI RST# */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   354
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   355
	/* TBICSR p.28 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   356
	TBIReset	= 0x80000000,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   357
	TBILoopback	= 0x40000000,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   358
	TBINwEnable	= 0x20000000,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   359
	TBINwRestart	= 0x10000000,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   360
	TBILinkOk	= 0x02000000,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   361
	TBINwComplete	= 0x01000000,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   362
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   363
	/* CPlusCmd p.31 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   364
	EnableBist	= (1 << 15),	// 8168 8101
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   365
	Mac_dbgo_oe	= (1 << 14),	// 8168 8101
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   366
	Normal_mode	= (1 << 13),	// unused
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   367
	Force_half_dup	= (1 << 12),	// 8168 8101
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   368
	Force_rxflow_en	= (1 << 11),	// 8168 8101
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   369
	Force_txflow_en	= (1 << 10),	// 8168 8101
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   370
	Cxpl_dbg_sel	= (1 << 9),	// 8168 8101
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   371
	ASF		= (1 << 8),	// 8168 8101
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   372
	PktCntrDisable	= (1 << 7),	// 8168 8101
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   373
	Mac_dbgo_sel	= 0x001c,	// 8168
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   374
	RxVlan		= (1 << 6),
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   375
	RxChkSum	= (1 << 5),
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   376
	PCIDAC		= (1 << 4),
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   377
	PCIMulRW	= (1 << 3),
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   378
	INTT_0		= 0x0000,	// 8168
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   379
	INTT_1		= 0x0001,	// 8168
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   380
	INTT_2		= 0x0002,	// 8168
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   381
	INTT_3		= 0x0003,	// 8168
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   382
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   383
	/* rtl8169_PHYstatus */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   384
	TBI_Enable	= 0x80,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   385
	TxFlowCtrl	= 0x40,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   386
	RxFlowCtrl	= 0x20,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   387
	_1000bpsF	= 0x10,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   388
	_100bps		= 0x08,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   389
	_10bps		= 0x04,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   390
	LinkStatus	= 0x02,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   391
	FullDup		= 0x01,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   392
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   393
	/* _TBICSRBit */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   394
	TBILinkOK	= 0x02000000,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   395
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   396
	/* DumpCounterCommand */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   397
	CounterDump	= 0x8,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   398
};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   399
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   400
enum desc_status_bit {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   401
	DescOwn		= (1 << 31), /* Descriptor is owned by NIC */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   402
	RingEnd		= (1 << 30), /* End of descriptor ring */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   403
	FirstFrag	= (1 << 29), /* First segment of a packet */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   404
	LastFrag	= (1 << 28), /* Final segment of a packet */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   405
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   406
	/* Tx private */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   407
	LargeSend	= (1 << 27), /* TCP Large Send Offload (TSO) */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   408
	MSSShift	= 16,        /* MSS value position */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   409
	MSSMask		= 0xfff,     /* MSS value + LargeSend bit: 12 bits */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   410
	IPCS		= (1 << 18), /* Calculate IP checksum */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   411
	UDPCS		= (1 << 17), /* Calculate UDP/IP checksum */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   412
	TCPCS		= (1 << 16), /* Calculate TCP/IP checksum */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   413
	TxVlanTag	= (1 << 17), /* Add VLAN tag */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   414
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   415
	/* Rx private */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   416
	PID1		= (1 << 18), /* Protocol ID bit 1/2 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   417
	PID0		= (1 << 17), /* Protocol ID bit 2/2 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   418
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   419
#define RxProtoUDP	(PID1)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   420
#define RxProtoTCP	(PID0)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   421
#define RxProtoIP	(PID1 | PID0)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   422
#define RxProtoMask	RxProtoIP
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   423
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   424
	IPFail		= (1 << 16), /* IP checksum failed */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   425
	UDPFail		= (1 << 15), /* UDP/IP checksum failed */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   426
	TCPFail		= (1 << 14), /* TCP/IP checksum failed */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   427
	RxVlanTag	= (1 << 16), /* VLAN tag available */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   428
};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   429
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   430
#define RsvdMask	0x3fffc000
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   431
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   432
struct TxDesc {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   433
	__le32 opts1;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   434
	__le32 opts2;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   435
	__le64 addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   436
};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   437
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   438
struct RxDesc {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   439
	__le32 opts1;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   440
	__le32 opts2;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   441
	__le64 addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   442
};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   443
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   444
struct ring_info {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   445
	struct sk_buff	*skb;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   446
	u32		len;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   447
	u8		__pad[sizeof(void *) - sizeof(u32)];
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   448
};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   449
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   450
enum features {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   451
	RTL_FEATURE_WOL		= (1 << 0),
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   452
	RTL_FEATURE_MSI		= (1 << 1),
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   453
	RTL_FEATURE_GMII	= (1 << 2),
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   454
};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   455
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   456
struct rtl8169_counters {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   457
	__le64	tx_packets;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   458
	__le64	rx_packets;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   459
	__le64	tx_errors;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   460
	__le32	rx_errors;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   461
	__le16	rx_missed;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   462
	__le16	align_errors;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   463
	__le32	tx_one_collision;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   464
	__le32	tx_multi_collision;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   465
	__le64	rx_unicast;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   466
	__le64	rx_broadcast;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   467
	__le32	rx_multicast;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   468
	__le16	tx_aborted;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   469
	__le16	tx_underun;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   470
};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   471
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   472
struct rtl8169_private {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   473
	void __iomem *mmio_addr;	/* memory map physical address */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   474
	struct pci_dev *pci_dev;	/* Index of PCI device */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   475
	struct net_device *dev;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   476
	struct napi_struct napi;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   477
	spinlock_t lock;		/* spin lock flag */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   478
	u32 msg_enable;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   479
	int chipset;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   480
	int mac_version;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   481
	u32 cur_rx; /* Index into the Rx descriptor buffer of next Rx pkt. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   482
	u32 cur_tx; /* Index into the Tx descriptor buffer of next Rx pkt. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   483
	u32 dirty_rx;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   484
	u32 dirty_tx;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   485
	struct TxDesc *TxDescArray;	/* 256-aligned Tx descriptor ring */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   486
	struct RxDesc *RxDescArray;	/* 256-aligned Rx descriptor ring */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   487
	dma_addr_t TxPhyAddr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   488
	dma_addr_t RxPhyAddr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   489
	struct sk_buff *Rx_skbuff[NUM_RX_DESC];	/* Rx data buffers */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   490
	struct ring_info tx_skb[NUM_TX_DESC];	/* Tx data buffers */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   491
	unsigned align;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   492
	unsigned rx_buf_sz;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   493
	struct timer_list timer;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   494
	u16 cp_cmd;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   495
	u16 intr_event;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   496
	u16 napi_event;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   497
	u16 intr_mask;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   498
	int phy_1000_ctrl_reg;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   499
#ifdef CONFIG_R8169_VLAN
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   500
	struct vlan_group *vlgrp;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   501
#endif
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   502
	int (*set_speed)(struct net_device *, u8 autoneg, u16 speed, u8 duplex);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   503
	int (*get_settings)(struct net_device *, struct ethtool_cmd *);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   504
	void (*phy_reset_enable)(void __iomem *);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   505
	void (*hw_start)(struct net_device *);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   506
	unsigned int (*phy_reset_pending)(void __iomem *);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   507
	unsigned int (*link_ok)(void __iomem *);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   508
	int (*do_ioctl)(struct rtl8169_private *tp, struct mii_ioctl_data *data, int cmd);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   509
	int pcie_cap;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   510
	struct delayed_work task;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   511
	unsigned features;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   512
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   513
	struct mii_if_info mii;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   514
	struct rtl8169_counters counters;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   515
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   516
	ec_device_t *ecdev;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   517
	unsigned long ec_watchdog_jiffies;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   518
};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   519
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   520
MODULE_AUTHOR("Florian Pose <fp@igh-essen.com>");
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   521
MODULE_DESCRIPTION("EtherCAT-capable RealTek RTL-8169 Gigabit Ethernet driver");
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   522
module_param(rx_copybreak, int, 0);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   523
MODULE_PARM_DESC(rx_copybreak, "Copy breakpoint for copy-only-tiny-frames");
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   524
module_param(use_dac, int, 0);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   525
MODULE_PARM_DESC(use_dac, "Enable PCI DAC. Unsafe on 32 bit PCI slot.");
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   526
module_param_named(debug, debug.msg_enable, int, 0);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   527
MODULE_PARM_DESC(debug, "Debug verbosity level (0=none, ..., 16=all)");
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   528
MODULE_LICENSE("GPL");
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   529
MODULE_VERSION(EC_MASTER_VERSION);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   530
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   531
static int rtl8169_open(struct net_device *dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   532
static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   533
				      struct net_device *dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   534
static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   535
static int rtl8169_init_ring(struct net_device *dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   536
static void rtl_hw_start(struct net_device *dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   537
static int rtl8169_close(struct net_device *dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   538
static void rtl_set_rx_mode(struct net_device *dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   539
static void rtl8169_tx_timeout(struct net_device *dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   540
static struct net_device_stats *rtl8169_get_stats(struct net_device *dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   541
static int rtl8169_rx_interrupt(struct net_device *, struct rtl8169_private *,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   542
				void __iomem *, u32 budget);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   543
static int rtl8169_change_mtu(struct net_device *dev, int new_mtu);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   544
static void rtl8169_down(struct net_device *dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   545
static void rtl8169_rx_clear(struct rtl8169_private *tp);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   546
static void ec_poll(struct net_device *dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   547
static int rtl8169_poll(struct napi_struct *napi, int budget);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   548
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   549
static const unsigned int rtl8169_rx_config =
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   550
	(RX_FIFO_THRESH << RxCfgFIFOShift) | (RX_DMA_BURST << RxCfgDMAShift);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   551
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   552
static void mdio_write(void __iomem *ioaddr, int reg_addr, int value)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   553
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   554
	int i;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   555
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   556
	RTL_W32(PHYAR, 0x80000000 | (reg_addr & 0x1f) << 16 | (value & 0xffff));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   557
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   558
	for (i = 20; i > 0; i--) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   559
		/*
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   560
		 * Check if the RTL8169 has completed writing to the specified
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   561
		 * MII register.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   562
		 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   563
		if (!(RTL_R32(PHYAR) & 0x80000000))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   564
			break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   565
		udelay(25);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   566
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   567
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   568
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   569
static int mdio_read(void __iomem *ioaddr, int reg_addr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   570
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   571
	int i, value = -1;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   572
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   573
	RTL_W32(PHYAR, 0x0 | (reg_addr & 0x1f) << 16);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   574
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   575
	for (i = 20; i > 0; i--) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   576
		/*
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   577
		 * Check if the RTL8169 has completed retrieving data from
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   578
		 * the specified MII register.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   579
		 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   580
		if (RTL_R32(PHYAR) & 0x80000000) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   581
			value = RTL_R32(PHYAR) & 0xffff;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   582
			break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   583
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   584
		udelay(25);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   585
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   586
	return value;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   587
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   588
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   589
static void mdio_patch(void __iomem *ioaddr, int reg_addr, int value)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   590
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   591
	mdio_write(ioaddr, reg_addr, mdio_read(ioaddr, reg_addr) | value);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   592
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   593
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   594
static void mdio_plus_minus(void __iomem *ioaddr, int reg_addr, int p, int m)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   595
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   596
	int val;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   597
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   598
	val = mdio_read(ioaddr, reg_addr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   599
	mdio_write(ioaddr, reg_addr, (val | p) & ~m);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   600
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   601
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   602
static void rtl_mdio_write(struct net_device *dev, int phy_id, int location,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   603
			   int val)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   604
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   605
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   606
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   607
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   608
	mdio_write(ioaddr, location, val);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   609
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   610
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   611
static int rtl_mdio_read(struct net_device *dev, int phy_id, int location)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   612
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   613
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   614
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   615
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   616
	return mdio_read(ioaddr, location);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   617
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   618
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   619
static void rtl_ephy_write(void __iomem *ioaddr, int reg_addr, int value)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   620
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   621
	unsigned int i;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   622
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   623
	RTL_W32(EPHYAR, EPHYAR_WRITE_CMD | (value & EPHYAR_DATA_MASK) |
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   624
		(reg_addr & EPHYAR_REG_MASK) << EPHYAR_REG_SHIFT);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   625
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   626
	for (i = 0; i < 100; i++) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   627
		if (!(RTL_R32(EPHYAR) & EPHYAR_FLAG))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   628
			break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   629
		udelay(10);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   630
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   631
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   632
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   633
static u16 rtl_ephy_read(void __iomem *ioaddr, int reg_addr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   634
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   635
	u16 value = 0xffff;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   636
	unsigned int i;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   637
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   638
	RTL_W32(EPHYAR, (reg_addr & EPHYAR_REG_MASK) << EPHYAR_REG_SHIFT);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   639
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   640
	for (i = 0; i < 100; i++) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   641
		if (RTL_R32(EPHYAR) & EPHYAR_FLAG) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   642
			value = RTL_R32(EPHYAR) & EPHYAR_DATA_MASK;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   643
			break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   644
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   645
		udelay(10);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   646
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   647
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   648
	return value;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   649
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   650
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   651
static void rtl_csi_write(void __iomem *ioaddr, int addr, int value)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   652
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   653
	unsigned int i;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   654
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   655
	RTL_W32(CSIDR, value);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   656
	RTL_W32(CSIAR, CSIAR_WRITE_CMD | (addr & CSIAR_ADDR_MASK) |
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   657
		CSIAR_BYTE_ENABLE << CSIAR_BYTE_ENABLE_SHIFT);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   658
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   659
	for (i = 0; i < 100; i++) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   660
		if (!(RTL_R32(CSIAR) & CSIAR_FLAG))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   661
			break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   662
		udelay(10);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   663
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   664
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   665
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   666
static u32 rtl_csi_read(void __iomem *ioaddr, int addr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   667
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   668
	u32 value = ~0x00;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   669
	unsigned int i;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   670
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   671
	RTL_W32(CSIAR, (addr & CSIAR_ADDR_MASK) |
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   672
		CSIAR_BYTE_ENABLE << CSIAR_BYTE_ENABLE_SHIFT);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   673
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   674
	for (i = 0; i < 100; i++) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   675
		if (RTL_R32(CSIAR) & CSIAR_FLAG) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   676
			value = RTL_R32(CSIDR);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   677
			break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   678
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   679
		udelay(10);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   680
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   681
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   682
	return value;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   683
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   684
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   685
static u8 rtl8168d_efuse_read(void __iomem *ioaddr, int reg_addr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   686
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   687
	u8 value = 0xff;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   688
	unsigned int i;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   689
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   690
	RTL_W32(EFUSEAR, (reg_addr & EFUSEAR_REG_MASK) << EFUSEAR_REG_SHIFT);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   691
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   692
	for (i = 0; i < 300; i++) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   693
		if (RTL_R32(EFUSEAR) & EFUSEAR_FLAG) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   694
			value = RTL_R32(EFUSEAR) & EFUSEAR_DATA_MASK;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   695
			break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   696
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   697
		udelay(100);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   698
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   699
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   700
	return value;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   701
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   702
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   703
static void rtl8169_irq_mask_and_ack(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   704
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   705
	RTL_W16(IntrMask, 0x0000);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   706
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   707
	RTL_W16(IntrStatus, 0xffff);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   708
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   709
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   710
static void rtl8169_asic_down(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   711
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   712
	RTL_W8(ChipCmd, 0x00);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   713
	rtl8169_irq_mask_and_ack(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   714
	RTL_R16(CPlusCmd);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   715
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   716
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   717
static unsigned int rtl8169_tbi_reset_pending(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   718
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   719
	return RTL_R32(TBICSR) & TBIReset;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   720
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   721
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   722
static unsigned int rtl8169_xmii_reset_pending(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   723
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   724
	return mdio_read(ioaddr, MII_BMCR) & BMCR_RESET;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   725
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   726
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   727
static unsigned int rtl8169_tbi_link_ok(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   728
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   729
	return RTL_R32(TBICSR) & TBILinkOk;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   730
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   731
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   732
static unsigned int rtl8169_xmii_link_ok(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   733
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   734
	return RTL_R8(PHYstatus) & LinkStatus;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   735
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   736
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   737
static void rtl8169_tbi_reset_enable(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   738
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   739
	RTL_W32(TBICSR, RTL_R32(TBICSR) | TBIReset);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   740
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   741
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   742
static void rtl8169_xmii_reset_enable(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   743
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   744
	unsigned int val;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   745
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   746
	val = mdio_read(ioaddr, MII_BMCR) | BMCR_RESET;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   747
	mdio_write(ioaddr, MII_BMCR, val & 0xffff);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   748
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   749
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   750
static void rtl8169_check_link_status(struct net_device *dev,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   751
				      struct rtl8169_private *tp,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   752
				      void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   753
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   754
	unsigned long flags;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   755
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   756
	if (tp->ecdev) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   757
		ecdev_set_link(tp->ecdev, tp->link_ok(ioaddr) ? 1 : 0);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   758
	} else {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   759
		spin_lock_irqsave(&tp->lock, flags);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   760
		if (tp->link_ok(ioaddr)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   761
			netif_carrier_on(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   762
			if (netif_msg_ifup(tp))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   763
				printk(KERN_INFO PFX "%s: link up\n", dev->name);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   764
		} else {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   765
			if (netif_msg_ifdown(tp))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   766
				printk(KERN_INFO PFX "%s: link down\n", dev->name);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   767
			netif_carrier_off(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   768
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   769
		spin_unlock_irqrestore(&tp->lock, flags);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   770
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   771
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   772
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   773
static void rtl8169_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   774
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   775
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   776
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   777
	u8 options;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   778
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   779
	wol->wolopts = 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   780
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   781
#define WAKE_ANY (WAKE_PHY | WAKE_MAGIC | WAKE_UCAST | WAKE_BCAST | WAKE_MCAST)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   782
	wol->supported = WAKE_ANY;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   783
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   784
	spin_lock_irq(&tp->lock);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   785
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   786
	options = RTL_R8(Config1);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   787
	if (!(options & PMEnable))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   788
		goto out_unlock;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   789
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   790
	options = RTL_R8(Config3);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   791
	if (options & LinkUp)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   792
		wol->wolopts |= WAKE_PHY;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   793
	if (options & MagicPacket)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   794
		wol->wolopts |= WAKE_MAGIC;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   795
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   796
	options = RTL_R8(Config5);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   797
	if (options & UWF)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   798
		wol->wolopts |= WAKE_UCAST;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   799
	if (options & BWF)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   800
		wol->wolopts |= WAKE_BCAST;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   801
	if (options & MWF)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   802
		wol->wolopts |= WAKE_MCAST;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   803
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   804
out_unlock:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   805
	spin_unlock_irq(&tp->lock);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   806
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   807
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   808
static int rtl8169_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   809
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   810
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   811
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   812
	unsigned int i;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   813
	static const struct {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   814
		u32 opt;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   815
		u16 reg;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   816
		u8  mask;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   817
	} cfg[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   818
		{ WAKE_ANY,   Config1, PMEnable },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   819
		{ WAKE_PHY,   Config3, LinkUp },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   820
		{ WAKE_MAGIC, Config3, MagicPacket },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   821
		{ WAKE_UCAST, Config5, UWF },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   822
		{ WAKE_BCAST, Config5, BWF },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   823
		{ WAKE_MCAST, Config5, MWF },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   824
		{ WAKE_ANY,   Config5, LanWake }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   825
	};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   826
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   827
	spin_lock_irq(&tp->lock);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   828
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   829
	RTL_W8(Cfg9346, Cfg9346_Unlock);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   830
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   831
	for (i = 0; i < ARRAY_SIZE(cfg); i++) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   832
		u8 options = RTL_R8(cfg[i].reg) & ~cfg[i].mask;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   833
		if (wol->wolopts & cfg[i].opt)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   834
			options |= cfg[i].mask;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   835
		RTL_W8(cfg[i].reg, options);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   836
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   837
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   838
	RTL_W8(Cfg9346, Cfg9346_Lock);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   839
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   840
	if (wol->wolopts)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   841
		tp->features |= RTL_FEATURE_WOL;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   842
	else
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   843
		tp->features &= ~RTL_FEATURE_WOL;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   844
	device_set_wakeup_enable(&tp->pci_dev->dev, wol->wolopts);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   845
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   846
	spin_unlock_irq(&tp->lock);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   847
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   848
	return 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   849
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   850
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   851
static void rtl8169_get_drvinfo(struct net_device *dev,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   852
				struct ethtool_drvinfo *info)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   853
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   854
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   855
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   856
	strcpy(info->driver, MODULENAME);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   857
	strcpy(info->version, RTL8169_VERSION);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   858
	strcpy(info->bus_info, pci_name(tp->pci_dev));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   859
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   860
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   861
static int rtl8169_get_regs_len(struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   862
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   863
	return R8169_REGS_SIZE;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   864
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   865
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   866
static int rtl8169_set_speed_tbi(struct net_device *dev,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   867
				 u8 autoneg, u16 speed, u8 duplex)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   868
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   869
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   870
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   871
	int ret = 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   872
	u32 reg;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   873
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   874
	reg = RTL_R32(TBICSR);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   875
	if ((autoneg == AUTONEG_DISABLE) && (speed == SPEED_1000) &&
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   876
	    (duplex == DUPLEX_FULL)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   877
		RTL_W32(TBICSR, reg & ~(TBINwEnable | TBINwRestart));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   878
	} else if (autoneg == AUTONEG_ENABLE)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   879
		RTL_W32(TBICSR, reg | TBINwEnable | TBINwRestart);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   880
	else {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   881
		if (netif_msg_link(tp)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   882
			printk(KERN_WARNING "%s: "
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   883
			       "incorrect speed setting refused in TBI mode\n",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   884
			       dev->name);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   885
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   886
		ret = -EOPNOTSUPP;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   887
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   888
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   889
	return ret;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   890
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   891
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   892
static int rtl8169_set_speed_xmii(struct net_device *dev,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   893
				  u8 autoneg, u16 speed, u8 duplex)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   894
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   895
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   896
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   897
	int giga_ctrl, bmcr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   898
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   899
	if (autoneg == AUTONEG_ENABLE) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   900
		int auto_nego;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   901
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   902
		auto_nego = mdio_read(ioaddr, MII_ADVERTISE);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   903
		auto_nego |= (ADVERTISE_10HALF | ADVERTISE_10FULL |
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   904
			      ADVERTISE_100HALF | ADVERTISE_100FULL);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   905
		auto_nego |= ADVERTISE_PAUSE_CAP | ADVERTISE_PAUSE_ASYM;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   906
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   907
		giga_ctrl = mdio_read(ioaddr, MII_CTRL1000);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   908
		giga_ctrl &= ~(ADVERTISE_1000FULL | ADVERTISE_1000HALF);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   909
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   910
		/* The 8100e/8101e/8102e do Fast Ethernet only. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   911
		if ((tp->mac_version != RTL_GIGA_MAC_VER_07) &&
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   912
		    (tp->mac_version != RTL_GIGA_MAC_VER_08) &&
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   913
		    (tp->mac_version != RTL_GIGA_MAC_VER_09) &&
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   914
		    (tp->mac_version != RTL_GIGA_MAC_VER_10) &&
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   915
		    (tp->mac_version != RTL_GIGA_MAC_VER_13) &&
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   916
		    (tp->mac_version != RTL_GIGA_MAC_VER_14) &&
cceb9aacf4a6 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_15) &&
cceb9aacf4a6 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_16)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   919
			giga_ctrl |= ADVERTISE_1000FULL | ADVERTISE_1000HALF;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   920
		} else if (netif_msg_link(tp)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   921
			printk(KERN_INFO "%s: PHY does not support 1000Mbps.\n",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   922
			       dev->name);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   923
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   924
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   925
		bmcr = BMCR_ANENABLE | BMCR_ANRESTART;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   926
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   927
		if ((tp->mac_version == RTL_GIGA_MAC_VER_11) ||
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   928
		    (tp->mac_version == RTL_GIGA_MAC_VER_12) ||
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   929
		    (tp->mac_version >= RTL_GIGA_MAC_VER_17)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   930
			/*
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   931
			 * Wake up the PHY.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   932
			 * Vendor specific (0x1f) and reserved (0x0e) MII
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   933
			 * registers.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   934
			 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   935
			mdio_write(ioaddr, 0x1f, 0x0000);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   936
			mdio_write(ioaddr, 0x0e, 0x0000);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   937
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   938
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   939
		mdio_write(ioaddr, MII_ADVERTISE, auto_nego);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   940
		mdio_write(ioaddr, MII_CTRL1000, giga_ctrl);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   941
	} else {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   942
		giga_ctrl = 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   943
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   944
		if (speed == SPEED_10)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   945
			bmcr = 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   946
		else if (speed == SPEED_100)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   947
			bmcr = BMCR_SPEED100;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   948
		else
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   949
			return -EINVAL;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   950
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   951
		if (duplex == DUPLEX_FULL)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   952
			bmcr |= BMCR_FULLDPLX;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   953
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   954
		mdio_write(ioaddr, 0x1f, 0x0000);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   955
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   956
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   957
	tp->phy_1000_ctrl_reg = giga_ctrl;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   958
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   959
	mdio_write(ioaddr, MII_BMCR, bmcr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   960
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   961
	if ((tp->mac_version == RTL_GIGA_MAC_VER_02) ||
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   962
	    (tp->mac_version == RTL_GIGA_MAC_VER_03)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   963
		if ((speed == SPEED_100) && (autoneg != AUTONEG_ENABLE)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   964
			mdio_write(ioaddr, 0x17, 0x2138);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   965
			mdio_write(ioaddr, 0x0e, 0x0260);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   966
		} else {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   967
			mdio_write(ioaddr, 0x17, 0x2108);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   968
			mdio_write(ioaddr, 0x0e, 0x0000);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   969
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   970
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   971
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   972
	return 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   973
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   974
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   975
static int rtl8169_set_speed(struct net_device *dev,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   976
			     u8 autoneg, u16 speed, u8 duplex)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   977
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   978
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   979
	int ret;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   980
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   981
	ret = tp->set_speed(dev, autoneg, speed, duplex);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   982
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   983
	if (netif_running(dev) && (tp->phy_1000_ctrl_reg & ADVERTISE_1000FULL))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   984
		mod_timer(&tp->timer, jiffies + RTL8169_PHY_TIMEOUT);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   985
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   986
	return ret;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   987
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   988
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   989
static int rtl8169_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   990
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   991
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   992
	unsigned long flags;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   993
	int ret;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   994
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   995
	spin_lock_irqsave(&tp->lock, flags);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   996
	ret = rtl8169_set_speed(dev, cmd->autoneg, cmd->speed, cmd->duplex);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   997
	spin_unlock_irqrestore(&tp->lock, flags);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   998
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
   999
	return ret;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1000
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1001
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1002
static u32 rtl8169_get_rx_csum(struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1003
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1004
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1005
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1006
	return tp->cp_cmd & RxChkSum;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1007
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1008
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1009
static int rtl8169_set_rx_csum(struct net_device *dev, u32 data)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1010
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1011
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1012
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1013
	unsigned long flags;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1014
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1015
	spin_lock_irqsave(&tp->lock, flags);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1016
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1017
	if (data)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1018
		tp->cp_cmd |= RxChkSum;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1019
	else
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1020
		tp->cp_cmd &= ~RxChkSum;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1021
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1022
	RTL_W16(CPlusCmd, tp->cp_cmd);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1023
	RTL_R16(CPlusCmd);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1024
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1025
	spin_unlock_irqrestore(&tp->lock, flags);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1026
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1027
	return 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1028
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1029
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1030
#ifdef CONFIG_R8169_VLAN
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1031
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1032
static inline u32 rtl8169_tx_vlan_tag(struct rtl8169_private *tp,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1033
				      struct sk_buff *skb)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1034
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1035
	return (tp->vlgrp && vlan_tx_tag_present(skb)) ?
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1036
		TxVlanTag | swab16(vlan_tx_tag_get(skb)) : 0x00;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1037
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1038
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1039
static void rtl8169_vlan_rx_register(struct net_device *dev,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1040
				     struct vlan_group *grp)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1041
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1042
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1043
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1044
	unsigned long flags;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1045
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1046
	spin_lock_irqsave(&tp->lock, flags);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1047
	tp->vlgrp = grp;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1048
	/*
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1049
	 * Do not disable RxVlan on 8110SCd.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1050
	 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1051
	if (tp->vlgrp || (tp->mac_version == RTL_GIGA_MAC_VER_05))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1052
		tp->cp_cmd |= RxVlan;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1053
	else
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1054
		tp->cp_cmd &= ~RxVlan;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1055
	RTL_W16(CPlusCmd, tp->cp_cmd);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1056
	RTL_R16(CPlusCmd);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1057
	spin_unlock_irqrestore(&tp->lock, flags);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1058
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1059
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1060
static int rtl8169_rx_vlan_skb(struct rtl8169_private *tp, struct RxDesc *desc,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1061
			       struct sk_buff *skb)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1062
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1063
	u32 opts2 = le32_to_cpu(desc->opts2);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1064
	struct vlan_group *vlgrp = tp->vlgrp;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1065
	int ret;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1066
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1067
	if (vlgrp && (opts2 & RxVlanTag)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1068
		vlan_hwaccel_receive_skb(skb, vlgrp, swab16(opts2 & 0xffff));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1069
		ret = 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1070
	} else
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1071
		ret = -1;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1072
	desc->opts2 = 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1073
	return ret;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1074
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1075
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1076
#else /* !CONFIG_R8169_VLAN */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1077
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1078
static inline u32 rtl8169_tx_vlan_tag(struct rtl8169_private *tp,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1079
				      struct sk_buff *skb)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1080
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1081
	return 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1082
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1083
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1084
static int rtl8169_rx_vlan_skb(struct rtl8169_private *tp, struct RxDesc *desc,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1085
			       struct sk_buff *skb)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1086
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1087
	return -1;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1088
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1089
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1090
#endif
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1091
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1092
static int rtl8169_gset_tbi(struct net_device *dev, struct ethtool_cmd *cmd)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1093
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1094
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1095
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1096
	u32 status;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1097
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1098
	cmd->supported =
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1099
		SUPPORTED_1000baseT_Full | SUPPORTED_Autoneg | SUPPORTED_FIBRE;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1100
	cmd->port = PORT_FIBRE;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1101
	cmd->transceiver = XCVR_INTERNAL;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1102
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1103
	status = RTL_R32(TBICSR);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1104
	cmd->advertising = (status & TBINwEnable) ?  ADVERTISED_Autoneg : 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1105
	cmd->autoneg = !!(status & TBINwEnable);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1106
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1107
	cmd->speed = SPEED_1000;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1108
	cmd->duplex = DUPLEX_FULL; /* Always set */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1109
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1110
	return 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1111
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1112
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1113
static int rtl8169_gset_xmii(struct net_device *dev, struct ethtool_cmd *cmd)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1114
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1115
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1116
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1117
	return mii_ethtool_gset(&tp->mii, cmd);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1118
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1119
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1120
static int rtl8169_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1121
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1122
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1123
	unsigned long flags;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1124
	int rc;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1125
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1126
	spin_lock_irqsave(&tp->lock, flags);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1127
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1128
	rc = tp->get_settings(dev, cmd);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1129
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1130
	spin_unlock_irqrestore(&tp->lock, flags);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1131
	return rc;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1132
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1133
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1134
static void rtl8169_get_regs(struct net_device *dev, struct ethtool_regs *regs,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1135
			     void *p)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1136
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1137
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1138
	unsigned long flags;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1139
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1140
	if (regs->len > R8169_REGS_SIZE)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1141
		regs->len = R8169_REGS_SIZE;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1142
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1143
	spin_lock_irqsave(&tp->lock, flags);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1144
	memcpy_fromio(p, tp->mmio_addr, regs->len);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1145
	spin_unlock_irqrestore(&tp->lock, flags);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1146
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1147
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1148
static u32 rtl8169_get_msglevel(struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1149
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1150
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1151
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1152
	return tp->msg_enable;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1153
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1154
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1155
static void rtl8169_set_msglevel(struct net_device *dev, u32 value)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1156
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1157
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1158
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1159
	tp->msg_enable = value;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1160
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1161
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1162
static const char rtl8169_gstrings[][ETH_GSTRING_LEN] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1163
	"tx_packets",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1164
	"rx_packets",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1165
	"tx_errors",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1166
	"rx_errors",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1167
	"rx_missed",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1168
	"align_errors",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1169
	"tx_single_collisions",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1170
	"tx_multi_collisions",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1171
	"unicast",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1172
	"broadcast",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1173
	"multicast",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1174
	"tx_aborted",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1175
	"tx_underrun",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1176
};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1177
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1178
static int rtl8169_get_sset_count(struct net_device *dev, int sset)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1179
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1180
	switch (sset) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1181
	case ETH_SS_STATS:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1182
		return ARRAY_SIZE(rtl8169_gstrings);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1183
	default:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1184
		return -EOPNOTSUPP;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1185
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1186
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1187
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1188
static void rtl8169_update_counters(struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1189
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1190
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1191
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1192
	struct rtl8169_counters *counters;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1193
	dma_addr_t paddr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1194
	u32 cmd;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1195
	int wait = 1000;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1196
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1197
	/*
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1198
	 * Some chips are unable to dump tally counters when the receiver
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1199
	 * is disabled.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1200
	 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1201
	if ((RTL_R8(ChipCmd) & CmdRxEnb) == 0)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1202
		return;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1203
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1204
	counters = pci_alloc_consistent(tp->pci_dev, sizeof(*counters), &paddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1205
	if (!counters)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1206
		return;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1207
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1208
	RTL_W32(CounterAddrHigh, (u64)paddr >> 32);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1209
	cmd = (u64)paddr & DMA_BIT_MASK(32);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1210
	RTL_W32(CounterAddrLow, cmd);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1211
	RTL_W32(CounterAddrLow, cmd | CounterDump);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1212
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1213
	while (wait--) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1214
		if ((RTL_R32(CounterAddrLow) & CounterDump) == 0) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1215
			/* copy updated counters */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1216
			memcpy(&tp->counters, counters, sizeof(*counters));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1217
			break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1218
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1219
		udelay(10);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1220
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1221
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1222
	RTL_W32(CounterAddrLow, 0);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1223
	RTL_W32(CounterAddrHigh, 0);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1224
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1225
	pci_free_consistent(tp->pci_dev, sizeof(*counters), counters, paddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1226
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1227
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1228
static void rtl8169_get_ethtool_stats(struct net_device *dev,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1229
				      struct ethtool_stats *stats, u64 *data)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1230
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1231
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1232
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1233
	ASSERT_RTNL();
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1234
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1235
	rtl8169_update_counters(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1236
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1237
	data[0] = le64_to_cpu(tp->counters.tx_packets);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1238
	data[1] = le64_to_cpu(tp->counters.rx_packets);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1239
	data[2] = le64_to_cpu(tp->counters.tx_errors);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1240
	data[3] = le32_to_cpu(tp->counters.rx_errors);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1241
	data[4] = le16_to_cpu(tp->counters.rx_missed);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1242
	data[5] = le16_to_cpu(tp->counters.align_errors);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1243
	data[6] = le32_to_cpu(tp->counters.tx_one_collision);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1244
	data[7] = le32_to_cpu(tp->counters.tx_multi_collision);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1245
	data[8] = le64_to_cpu(tp->counters.rx_unicast);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1246
	data[9] = le64_to_cpu(tp->counters.rx_broadcast);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1247
	data[10] = le32_to_cpu(tp->counters.rx_multicast);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1248
	data[11] = le16_to_cpu(tp->counters.tx_aborted);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1249
	data[12] = le16_to_cpu(tp->counters.tx_underun);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1250
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1251
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1252
static void rtl8169_get_strings(struct net_device *dev, u32 stringset, u8 *data)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1253
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1254
	switch(stringset) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1255
	case ETH_SS_STATS:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1256
		memcpy(data, *rtl8169_gstrings, sizeof(rtl8169_gstrings));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1257
		break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1258
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1259
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1260
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1261
static const struct ethtool_ops rtl8169_ethtool_ops = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1262
	.get_drvinfo		= rtl8169_get_drvinfo,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1263
	.get_regs_len		= rtl8169_get_regs_len,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1264
	.get_link		= ethtool_op_get_link,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1265
	.get_settings		= rtl8169_get_settings,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1266
	.set_settings		= rtl8169_set_settings,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1267
	.get_msglevel		= rtl8169_get_msglevel,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1268
	.set_msglevel		= rtl8169_set_msglevel,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1269
	.get_rx_csum		= rtl8169_get_rx_csum,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1270
	.set_rx_csum		= rtl8169_set_rx_csum,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1271
	.set_tx_csum		= ethtool_op_set_tx_csum,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1272
	.set_sg			= ethtool_op_set_sg,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1273
	.set_tso		= ethtool_op_set_tso,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1274
	.get_regs		= rtl8169_get_regs,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1275
	.get_wol		= rtl8169_get_wol,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1276
	.set_wol		= rtl8169_set_wol,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1277
	.get_strings		= rtl8169_get_strings,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1278
	.get_sset_count		= rtl8169_get_sset_count,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1279
	.get_ethtool_stats	= rtl8169_get_ethtool_stats,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1280
};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1281
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1282
static void rtl8169_get_mac_version(struct rtl8169_private *tp,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1283
				    void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1284
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1285
	/*
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1286
	 * The driver currently handles the 8168Bf and the 8168Be identically
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1287
	 * but they can be identified more specifically through the test below
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1288
	 * if needed:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1289
	 *
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1290
	 * (RTL_R32(TxConfig) & 0x700000) == 0x500000 ? 8168Bf : 8168Be
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1291
	 *
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1292
	 * Same thing for the 8101Eb and the 8101Ec:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1293
	 *
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1294
	 * (RTL_R32(TxConfig) & 0x700000) == 0x200000 ? 8101Eb : 8101Ec
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1295
	 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1296
	static const struct {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1297
		u32 mask;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1298
		u32 val;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1299
		int mac_version;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1300
	} mac_info[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1301
		/* 8168D family. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1302
		{ 0x7cf00000, 0x28300000,	RTL_GIGA_MAC_VER_26 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1303
		{ 0x7cf00000, 0x28100000,	RTL_GIGA_MAC_VER_25 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1304
		{ 0x7c800000, 0x28800000,	RTL_GIGA_MAC_VER_27 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1305
		{ 0x7c800000, 0x28000000,	RTL_GIGA_MAC_VER_26 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1306
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1307
		/* 8168C family. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1308
		{ 0x7cf00000, 0x3ca00000,	RTL_GIGA_MAC_VER_24 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1309
		{ 0x7cf00000, 0x3c900000,	RTL_GIGA_MAC_VER_23 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1310
		{ 0x7cf00000, 0x3c800000,	RTL_GIGA_MAC_VER_18 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1311
		{ 0x7c800000, 0x3c800000,	RTL_GIGA_MAC_VER_24 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1312
		{ 0x7cf00000, 0x3c000000,	RTL_GIGA_MAC_VER_19 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1313
		{ 0x7cf00000, 0x3c200000,	RTL_GIGA_MAC_VER_20 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1314
		{ 0x7cf00000, 0x3c300000,	RTL_GIGA_MAC_VER_21 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1315
		{ 0x7cf00000, 0x3c400000,	RTL_GIGA_MAC_VER_22 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1316
		{ 0x7c800000, 0x3c000000,	RTL_GIGA_MAC_VER_22 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1317
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1318
		/* 8168B family. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1319
		{ 0x7cf00000, 0x38000000,	RTL_GIGA_MAC_VER_12 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1320
		{ 0x7cf00000, 0x38500000,	RTL_GIGA_MAC_VER_17 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1321
		{ 0x7c800000, 0x38000000,	RTL_GIGA_MAC_VER_17 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1322
		{ 0x7c800000, 0x30000000,	RTL_GIGA_MAC_VER_11 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1323
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1324
		/* 8101 family. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1325
		{ 0x7cf00000, 0x34a00000,	RTL_GIGA_MAC_VER_09 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1326
		{ 0x7cf00000, 0x24a00000,	RTL_GIGA_MAC_VER_09 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1327
		{ 0x7cf00000, 0x34900000,	RTL_GIGA_MAC_VER_08 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1328
		{ 0x7cf00000, 0x24900000,	RTL_GIGA_MAC_VER_08 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1329
		{ 0x7cf00000, 0x34800000,	RTL_GIGA_MAC_VER_07 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1330
		{ 0x7cf00000, 0x24800000,	RTL_GIGA_MAC_VER_07 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1331
		{ 0x7cf00000, 0x34000000,	RTL_GIGA_MAC_VER_13 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1332
		{ 0x7cf00000, 0x34300000,	RTL_GIGA_MAC_VER_10 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1333
		{ 0x7cf00000, 0x34200000,	RTL_GIGA_MAC_VER_16 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1334
		{ 0x7c800000, 0x34800000,	RTL_GIGA_MAC_VER_09 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1335
		{ 0x7c800000, 0x24800000,	RTL_GIGA_MAC_VER_09 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1336
		{ 0x7c800000, 0x34000000,	RTL_GIGA_MAC_VER_16 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1337
		/* FIXME: where did these entries come from ? -- FR */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1338
		{ 0xfc800000, 0x38800000,	RTL_GIGA_MAC_VER_15 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1339
		{ 0xfc800000, 0x30800000,	RTL_GIGA_MAC_VER_14 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1340
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1341
		/* 8110 family. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1342
		{ 0xfc800000, 0x98000000,	RTL_GIGA_MAC_VER_06 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1343
		{ 0xfc800000, 0x18000000,	RTL_GIGA_MAC_VER_05 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1344
		{ 0xfc800000, 0x10000000,	RTL_GIGA_MAC_VER_04 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1345
		{ 0xfc800000, 0x04000000,	RTL_GIGA_MAC_VER_03 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1346
		{ 0xfc800000, 0x00800000,	RTL_GIGA_MAC_VER_02 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1347
		{ 0xfc800000, 0x00000000,	RTL_GIGA_MAC_VER_01 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1348
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1349
		/* Catch-all */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1350
		{ 0x00000000, 0x00000000,	RTL_GIGA_MAC_NONE   }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1351
	}, *p = mac_info;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1352
	u32 reg;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1353
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1354
	reg = RTL_R32(TxConfig);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1355
	while ((reg & p->mask) != p->val)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1356
		p++;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1357
	tp->mac_version = p->mac_version;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1358
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1359
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1360
static void rtl8169_print_mac_version(struct rtl8169_private *tp)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1361
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1362
	dprintk("mac_version = 0x%02x\n", tp->mac_version);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1363
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1364
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1365
struct phy_reg {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1366
	u16 reg;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1367
	u16 val;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1368
};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1369
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1370
static void rtl_phy_write(void __iomem *ioaddr, const struct phy_reg *regs, int len)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1371
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1372
	while (len-- > 0) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1373
		mdio_write(ioaddr, regs->reg, regs->val);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1374
		regs++;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1375
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1376
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1377
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1378
static void rtl8169s_hw_phy_config(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1379
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1380
	static const struct phy_reg phy_reg_init[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1381
		{ 0x1f, 0x0001 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1382
		{ 0x06, 0x006e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1383
		{ 0x08, 0x0708 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1384
		{ 0x15, 0x4000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1385
		{ 0x18, 0x65c7 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1386
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1387
		{ 0x1f, 0x0001 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1388
		{ 0x03, 0x00a1 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1389
		{ 0x02, 0x0008 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1390
		{ 0x01, 0x0120 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1391
		{ 0x00, 0x1000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1392
		{ 0x04, 0x0800 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1393
		{ 0x04, 0x0000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1394
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1395
		{ 0x03, 0xff41 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1396
		{ 0x02, 0xdf60 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1397
		{ 0x01, 0x0140 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1398
		{ 0x00, 0x0077 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1399
		{ 0x04, 0x7800 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1400
		{ 0x04, 0x7000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1401
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1402
		{ 0x03, 0x802f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1403
		{ 0x02, 0x4f02 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1404
		{ 0x01, 0x0409 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1405
		{ 0x00, 0xf0f9 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1406
		{ 0x04, 0x9800 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1407
		{ 0x04, 0x9000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1408
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1409
		{ 0x03, 0xdf01 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1410
		{ 0x02, 0xdf20 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1411
		{ 0x01, 0xff95 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1412
		{ 0x00, 0xba00 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1413
		{ 0x04, 0xa800 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1414
		{ 0x04, 0xa000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1415
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1416
		{ 0x03, 0xff41 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1417
		{ 0x02, 0xdf20 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1418
		{ 0x01, 0x0140 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1419
		{ 0x00, 0x00bb },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1420
		{ 0x04, 0xb800 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1421
		{ 0x04, 0xb000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1422
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1423
		{ 0x03, 0xdf41 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1424
		{ 0x02, 0xdc60 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1425
		{ 0x01, 0x6340 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1426
		{ 0x00, 0x007d },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1427
		{ 0x04, 0xd800 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1428
		{ 0x04, 0xd000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1429
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1430
		{ 0x03, 0xdf01 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1431
		{ 0x02, 0xdf20 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1432
		{ 0x01, 0x100a },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1433
		{ 0x00, 0xa0ff },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1434
		{ 0x04, 0xf800 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1435
		{ 0x04, 0xf000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1436
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1437
		{ 0x1f, 0x0000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1438
		{ 0x0b, 0x0000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1439
		{ 0x00, 0x9200 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1440
	};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1441
cceb9aacf4a6 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));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1443
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1444
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1445
static void rtl8169sb_hw_phy_config(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1446
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1447
	static const struct phy_reg phy_reg_init[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1448
		{ 0x1f, 0x0002 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1449
		{ 0x01, 0x90d0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1450
		{ 0x1f, 0x0000 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1451
	};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1452
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1453
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1454
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1455
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1456
static void rtl8169scd_hw_phy_config_quirk(struct rtl8169_private *tp,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1457
					   void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1458
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1459
	struct pci_dev *pdev = tp->pci_dev;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1460
	u16 vendor_id, device_id;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1461
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1462
	pci_read_config_word(pdev, PCI_SUBSYSTEM_VENDOR_ID, &vendor_id);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1463
	pci_read_config_word(pdev, PCI_SUBSYSTEM_ID, &device_id);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1464
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1465
	if ((vendor_id != PCI_VENDOR_ID_GIGABYTE) || (device_id != 0xe000))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1466
		return;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1467
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1468
	mdio_write(ioaddr, 0x1f, 0x0001);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1469
	mdio_write(ioaddr, 0x10, 0xf01b);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1470
	mdio_write(ioaddr, 0x1f, 0x0000);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1471
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1472
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1473
static void rtl8169scd_hw_phy_config(struct rtl8169_private *tp,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1474
				     void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1475
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1476
	static const struct phy_reg phy_reg_init[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1477
		{ 0x1f, 0x0001 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1478
		{ 0x04, 0x0000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1479
		{ 0x03, 0x00a1 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1480
		{ 0x02, 0x0008 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1481
		{ 0x01, 0x0120 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1482
		{ 0x00, 0x1000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1483
		{ 0x04, 0x0800 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1484
		{ 0x04, 0x9000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1485
		{ 0x03, 0x802f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1486
		{ 0x02, 0x4f02 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1487
		{ 0x01, 0x0409 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1488
		{ 0x00, 0xf099 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1489
		{ 0x04, 0x9800 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1490
		{ 0x04, 0xa000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1491
		{ 0x03, 0xdf01 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1492
		{ 0x02, 0xdf20 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1493
		{ 0x01, 0xff95 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1494
		{ 0x00, 0xba00 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1495
		{ 0x04, 0xa800 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1496
		{ 0x04, 0xf000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1497
		{ 0x03, 0xdf01 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1498
		{ 0x02, 0xdf20 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1499
		{ 0x01, 0x101a },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1500
		{ 0x00, 0xa0ff },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1501
		{ 0x04, 0xf800 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1502
		{ 0x04, 0x0000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1503
		{ 0x1f, 0x0000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1504
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1505
		{ 0x1f, 0x0001 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1506
		{ 0x10, 0xf41b },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1507
		{ 0x14, 0xfb54 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1508
		{ 0x18, 0xf5c7 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1509
		{ 0x1f, 0x0000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1510
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1511
		{ 0x1f, 0x0001 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1512
		{ 0x17, 0x0cc0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1513
		{ 0x1f, 0x0000 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1514
	};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1515
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1516
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1517
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1518
	rtl8169scd_hw_phy_config_quirk(tp, ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1519
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1520
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1521
static void rtl8169sce_hw_phy_config(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1522
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1523
	static const struct phy_reg phy_reg_init[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1524
		{ 0x1f, 0x0001 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1525
		{ 0x04, 0x0000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1526
		{ 0x03, 0x00a1 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1527
		{ 0x02, 0x0008 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1528
		{ 0x01, 0x0120 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1529
		{ 0x00, 0x1000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1530
		{ 0x04, 0x0800 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1531
		{ 0x04, 0x9000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1532
		{ 0x03, 0x802f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1533
		{ 0x02, 0x4f02 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1534
		{ 0x01, 0x0409 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1535
		{ 0x00, 0xf099 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1536
		{ 0x04, 0x9800 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1537
		{ 0x04, 0xa000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1538
		{ 0x03, 0xdf01 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1539
		{ 0x02, 0xdf20 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1540
		{ 0x01, 0xff95 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1541
		{ 0x00, 0xba00 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1542
		{ 0x04, 0xa800 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1543
		{ 0x04, 0xf000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1544
		{ 0x03, 0xdf01 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1545
		{ 0x02, 0xdf20 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1546
		{ 0x01, 0x101a },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1547
		{ 0x00, 0xa0ff },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1548
		{ 0x04, 0xf800 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1549
		{ 0x04, 0x0000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1550
		{ 0x1f, 0x0000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1551
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1552
		{ 0x1f, 0x0001 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1553
		{ 0x0b, 0x8480 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1554
		{ 0x1f, 0x0000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1555
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1556
		{ 0x1f, 0x0001 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1557
		{ 0x18, 0x67c7 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1558
		{ 0x04, 0x2000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1559
		{ 0x03, 0x002f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1560
		{ 0x02, 0x4360 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1561
		{ 0x01, 0x0109 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1562
		{ 0x00, 0x3022 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1563
		{ 0x04, 0x2800 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1564
		{ 0x1f, 0x0000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1565
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1566
		{ 0x1f, 0x0001 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1567
		{ 0x17, 0x0cc0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1568
		{ 0x1f, 0x0000 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1569
	};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1570
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1571
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1572
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1573
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1574
static void rtl8168bb_hw_phy_config(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1575
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1576
	static const struct phy_reg phy_reg_init[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1577
		{ 0x10, 0xf41b },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1578
		{ 0x1f, 0x0000 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1579
	};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1580
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1581
	mdio_write(ioaddr, 0x1f, 0x0001);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1582
	mdio_patch(ioaddr, 0x16, 1 << 0);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1583
cceb9aacf4a6 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));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1585
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1586
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1587
static void rtl8168bef_hw_phy_config(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1588
{
cceb9aacf4a6 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[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1590
		{ 0x1f, 0x0001 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1591
		{ 0x10, 0xf41b },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1592
		{ 0x1f, 0x0000 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1593
	};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1594
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1595
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1596
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1597
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1598
static void rtl8168cp_1_hw_phy_config(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1599
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1600
	static const struct phy_reg phy_reg_init[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1601
		{ 0x1f, 0x0000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1602
		{ 0x1d, 0x0f00 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1603
		{ 0x1f, 0x0002 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1604
		{ 0x0c, 0x1ec8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1605
		{ 0x1f, 0x0000 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1606
	};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1607
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1608
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1609
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1610
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1611
static void rtl8168cp_2_hw_phy_config(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1612
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1613
	static const struct phy_reg phy_reg_init[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1614
		{ 0x1f, 0x0001 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1615
		{ 0x1d, 0x3d98 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1616
		{ 0x1f, 0x0000 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1617
	};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1618
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1619
	mdio_write(ioaddr, 0x1f, 0x0000);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1620
	mdio_patch(ioaddr, 0x14, 1 << 5);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1621
	mdio_patch(ioaddr, 0x0d, 1 << 5);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1622
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1623
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1624
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1625
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1626
static void rtl8168c_1_hw_phy_config(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1627
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1628
	static const struct phy_reg phy_reg_init[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1629
		{ 0x1f, 0x0001 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1630
		{ 0x12, 0x2300 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1631
		{ 0x1f, 0x0002 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1632
		{ 0x00, 0x88d4 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1633
		{ 0x01, 0x82b1 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1634
		{ 0x03, 0x7002 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1635
		{ 0x08, 0x9e30 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1636
		{ 0x09, 0x01f0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1637
		{ 0x0a, 0x5500 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1638
		{ 0x0c, 0x00c8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1639
		{ 0x1f, 0x0003 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1640
		{ 0x12, 0xc096 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1641
		{ 0x16, 0x000a },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1642
		{ 0x1f, 0x0000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1643
		{ 0x1f, 0x0000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1644
		{ 0x09, 0x2000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1645
		{ 0x09, 0x0000 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1646
	};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1647
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1648
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1649
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1650
	mdio_patch(ioaddr, 0x14, 1 << 5);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1651
	mdio_patch(ioaddr, 0x0d, 1 << 5);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1652
	mdio_write(ioaddr, 0x1f, 0x0000);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1653
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1654
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1655
static void rtl8168c_2_hw_phy_config(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1656
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1657
	static const struct phy_reg phy_reg_init[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1658
		{ 0x1f, 0x0001 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1659
		{ 0x12, 0x2300 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1660
		{ 0x03, 0x802f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1661
		{ 0x02, 0x4f02 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1662
		{ 0x01, 0x0409 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1663
		{ 0x00, 0xf099 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1664
		{ 0x04, 0x9800 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1665
		{ 0x04, 0x9000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1666
		{ 0x1d, 0x3d98 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1667
		{ 0x1f, 0x0002 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1668
		{ 0x0c, 0x7eb8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1669
		{ 0x06, 0x0761 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1670
		{ 0x1f, 0x0003 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1671
		{ 0x16, 0x0f0a },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1672
		{ 0x1f, 0x0000 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1673
	};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1674
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1675
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1676
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1677
	mdio_patch(ioaddr, 0x16, 1 << 0);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1678
	mdio_patch(ioaddr, 0x14, 1 << 5);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1679
	mdio_patch(ioaddr, 0x0d, 1 << 5);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1680
	mdio_write(ioaddr, 0x1f, 0x0000);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1681
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1682
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1683
static void rtl8168c_3_hw_phy_config(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1684
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1685
	static const struct phy_reg phy_reg_init[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1686
		{ 0x1f, 0x0001 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1687
		{ 0x12, 0x2300 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1688
		{ 0x1d, 0x3d98 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1689
		{ 0x1f, 0x0002 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1690
		{ 0x0c, 0x7eb8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1691
		{ 0x06, 0x5461 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1692
		{ 0x1f, 0x0003 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1693
		{ 0x16, 0x0f0a },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1694
		{ 0x1f, 0x0000 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1695
	};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1696
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1697
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1698
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1699
	mdio_patch(ioaddr, 0x16, 1 << 0);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1700
	mdio_patch(ioaddr, 0x14, 1 << 5);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1701
	mdio_patch(ioaddr, 0x0d, 1 << 5);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1702
	mdio_write(ioaddr, 0x1f, 0x0000);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1703
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1704
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1705
static void rtl8168c_4_hw_phy_config(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1706
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1707
	rtl8168c_3_hw_phy_config(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1708
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1709
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1710
static void rtl8168d_1_hw_phy_config(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1711
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1712
	static const struct phy_reg phy_reg_init_0[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1713
		{ 0x1f, 0x0001 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1714
		{ 0x06, 0x4064 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1715
		{ 0x07, 0x2863 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1716
		{ 0x08, 0x059c },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1717
		{ 0x09, 0x26b4 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1718
		{ 0x0a, 0x6a19 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1719
		{ 0x0b, 0xdcc8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1720
		{ 0x10, 0xf06d },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1721
		{ 0x14, 0x7f68 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1722
		{ 0x18, 0x7fd9 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1723
		{ 0x1c, 0xf0ff },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1724
		{ 0x1d, 0x3d9c },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1725
		{ 0x1f, 0x0003 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1726
		{ 0x12, 0xf49f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1727
		{ 0x13, 0x070b },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1728
		{ 0x1a, 0x05ad },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1729
		{ 0x14, 0x94c0 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1730
	};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1731
	static const struct phy_reg phy_reg_init_1[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1732
		{ 0x1f, 0x0002 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1733
		{ 0x06, 0x5561 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1734
		{ 0x1f, 0x0005 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1735
		{ 0x05, 0x8332 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1736
		{ 0x06, 0x5561 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1737
	};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1738
	static const struct phy_reg phy_reg_init_2[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1739
		{ 0x1f, 0x0005 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1740
		{ 0x05, 0xffc2 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1741
		{ 0x1f, 0x0005 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1742
		{ 0x05, 0x8000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1743
		{ 0x06, 0xf8f9 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1744
		{ 0x06, 0xfaef },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1745
		{ 0x06, 0x59ee },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1746
		{ 0x06, 0xf8ea },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1747
		{ 0x06, 0x00ee },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1748
		{ 0x06, 0xf8eb },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1749
		{ 0x06, 0x00e0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1750
		{ 0x06, 0xf87c },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1751
		{ 0x06, 0xe1f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1752
		{ 0x06, 0x7d59 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1753
		{ 0x06, 0x0fef },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1754
		{ 0x06, 0x0139 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1755
		{ 0x06, 0x029e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1756
		{ 0x06, 0x06ef },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1757
		{ 0x06, 0x1039 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1758
		{ 0x06, 0x089f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1759
		{ 0x06, 0x2aee },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1760
		{ 0x06, 0xf8ea },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1761
		{ 0x06, 0x00ee },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1762
		{ 0x06, 0xf8eb },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1763
		{ 0x06, 0x01e0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1764
		{ 0x06, 0xf87c },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1765
		{ 0x06, 0xe1f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1766
		{ 0x06, 0x7d58 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1767
		{ 0x06, 0x409e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1768
		{ 0x06, 0x0f39 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1769
		{ 0x06, 0x46aa },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1770
		{ 0x06, 0x0bbf },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1771
		{ 0x06, 0x8290 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1772
		{ 0x06, 0xd682 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1773
		{ 0x06, 0x9802 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1774
		{ 0x06, 0x014f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1775
		{ 0x06, 0xae09 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1776
		{ 0x06, 0xbf82 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1777
		{ 0x06, 0x98d6 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1778
		{ 0x06, 0x82a0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1779
		{ 0x06, 0x0201 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1780
		{ 0x06, 0x4fef },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1781
		{ 0x06, 0x95fe },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1782
		{ 0x06, 0xfdfc },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1783
		{ 0x06, 0x05f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1784
		{ 0x06, 0xf9fa },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1785
		{ 0x06, 0xeef8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1786
		{ 0x06, 0xea00 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1787
		{ 0x06, 0xeef8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1788
		{ 0x06, 0xeb00 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1789
		{ 0x06, 0xe2f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1790
		{ 0x06, 0x7ce3 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1791
		{ 0x06, 0xf87d },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1792
		{ 0x06, 0xa511 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1793
		{ 0x06, 0x1112 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1794
		{ 0x06, 0xd240 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1795
		{ 0x06, 0xd644 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1796
		{ 0x06, 0x4402 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1797
		{ 0x06, 0x8217 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1798
		{ 0x06, 0xd2a0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1799
		{ 0x06, 0xd6aa },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1800
		{ 0x06, 0xaa02 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1801
		{ 0x06, 0x8217 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1802
		{ 0x06, 0xae0f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1803
		{ 0x06, 0xa544 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1804
		{ 0x06, 0x4402 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1805
		{ 0x06, 0xae4d },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1806
		{ 0x06, 0xa5aa },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1807
		{ 0x06, 0xaa02 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1808
		{ 0x06, 0xae47 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1809
		{ 0x06, 0xaf82 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1810
		{ 0x06, 0x13ee },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1811
		{ 0x06, 0x834e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1812
		{ 0x06, 0x00ee },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1813
		{ 0x06, 0x834d },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1814
		{ 0x06, 0x0fee },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1815
		{ 0x06, 0x834c },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1816
		{ 0x06, 0x0fee },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1817
		{ 0x06, 0x834f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1818
		{ 0x06, 0x00ee },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1819
		{ 0x06, 0x8351 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1820
		{ 0x06, 0x00ee },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1821
		{ 0x06, 0x834a },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1822
		{ 0x06, 0xffee },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1823
		{ 0x06, 0x834b },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1824
		{ 0x06, 0xffe0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1825
		{ 0x06, 0x8330 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1826
		{ 0x06, 0xe183 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1827
		{ 0x06, 0x3158 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1828
		{ 0x06, 0xfee4 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1829
		{ 0x06, 0xf88a },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1830
		{ 0x06, 0xe5f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1831
		{ 0x06, 0x8be0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1832
		{ 0x06, 0x8332 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1833
		{ 0x06, 0xe183 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1834
		{ 0x06, 0x3359 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1835
		{ 0x06, 0x0fe2 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1836
		{ 0x06, 0x834d },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1837
		{ 0x06, 0x0c24 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1838
		{ 0x06, 0x5af0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1839
		{ 0x06, 0x1e12 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1840
		{ 0x06, 0xe4f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1841
		{ 0x06, 0x8ce5 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1842
		{ 0x06, 0xf88d },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1843
		{ 0x06, 0xaf82 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1844
		{ 0x06, 0x13e0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1845
		{ 0x06, 0x834f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1846
		{ 0x06, 0x10e4 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1847
		{ 0x06, 0x834f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1848
		{ 0x06, 0xe083 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1849
		{ 0x06, 0x4e78 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1850
		{ 0x06, 0x009f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1851
		{ 0x06, 0x0ae0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1852
		{ 0x06, 0x834f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1853
		{ 0x06, 0xa010 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1854
		{ 0x06, 0xa5ee },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1855
		{ 0x06, 0x834e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1856
		{ 0x06, 0x01e0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1857
		{ 0x06, 0x834e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1858
		{ 0x06, 0x7805 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1859
		{ 0x06, 0x9e9a },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1860
		{ 0x06, 0xe083 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1861
		{ 0x06, 0x4e78 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1862
		{ 0x06, 0x049e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1863
		{ 0x06, 0x10e0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1864
		{ 0x06, 0x834e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1865
		{ 0x06, 0x7803 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1866
		{ 0x06, 0x9e0f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1867
		{ 0x06, 0xe083 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1868
		{ 0x06, 0x4e78 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1869
		{ 0x06, 0x019e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1870
		{ 0x06, 0x05ae },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1871
		{ 0x06, 0x0caf },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1872
		{ 0x06, 0x81f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1873
		{ 0x06, 0xaf81 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1874
		{ 0x06, 0xa3af },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1875
		{ 0x06, 0x81dc },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1876
		{ 0x06, 0xaf82 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1877
		{ 0x06, 0x13ee },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1878
		{ 0x06, 0x8348 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1879
		{ 0x06, 0x00ee },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1880
		{ 0x06, 0x8349 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1881
		{ 0x06, 0x00e0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1882
		{ 0x06, 0x8351 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1883
		{ 0x06, 0x10e4 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1884
		{ 0x06, 0x8351 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1885
		{ 0x06, 0x5801 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1886
		{ 0x06, 0x9fea },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1887
		{ 0x06, 0xd000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1888
		{ 0x06, 0xd180 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1889
		{ 0x06, 0x1f66 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1890
		{ 0x06, 0xe2f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1891
		{ 0x06, 0xeae3 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1892
		{ 0x06, 0xf8eb },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1893
		{ 0x06, 0x5af8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1894
		{ 0x06, 0x1e20 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1895
		{ 0x06, 0xe6f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1896
		{ 0x06, 0xeae5 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1897
		{ 0x06, 0xf8eb },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1898
		{ 0x06, 0xd302 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1899
		{ 0x06, 0xb3fe },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1900
		{ 0x06, 0xe2f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1901
		{ 0x06, 0x7cef },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1902
		{ 0x06, 0x325b },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1903
		{ 0x06, 0x80e3 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1904
		{ 0x06, 0xf87d },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1905
		{ 0x06, 0x9e03 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1906
		{ 0x06, 0x7dff },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1907
		{ 0x06, 0xff0d },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1908
		{ 0x06, 0x581c },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1909
		{ 0x06, 0x551a },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1910
		{ 0x06, 0x6511 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1911
		{ 0x06, 0xa190 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1912
		{ 0x06, 0xd3e2 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1913
		{ 0x06, 0x8348 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1914
		{ 0x06, 0xe383 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1915
		{ 0x06, 0x491b },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1916
		{ 0x06, 0x56ab },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1917
		{ 0x06, 0x08ef },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1918
		{ 0x06, 0x56e6 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1919
		{ 0x06, 0x8348 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1920
		{ 0x06, 0xe783 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1921
		{ 0x06, 0x4910 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1922
		{ 0x06, 0xd180 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1923
		{ 0x06, 0x1f66 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1924
		{ 0x06, 0xa004 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1925
		{ 0x06, 0xb9e2 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1926
		{ 0x06, 0x8348 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1927
		{ 0x06, 0xe383 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1928
		{ 0x06, 0x49ef },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1929
		{ 0x06, 0x65e2 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1930
		{ 0x06, 0x834a },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1931
		{ 0x06, 0xe383 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1932
		{ 0x06, 0x4b1b },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1933
		{ 0x06, 0x56aa },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1934
		{ 0x06, 0x0eef },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1935
		{ 0x06, 0x56e6 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1936
		{ 0x06, 0x834a },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1937
		{ 0x06, 0xe783 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1938
		{ 0x06, 0x4be2 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1939
		{ 0x06, 0x834d },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1940
		{ 0x06, 0xe683 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1941
		{ 0x06, 0x4ce0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1942
		{ 0x06, 0x834d },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1943
		{ 0x06, 0xa000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1944
		{ 0x06, 0x0caf },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1945
		{ 0x06, 0x81dc },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1946
		{ 0x06, 0xe083 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1947
		{ 0x06, 0x4d10 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1948
		{ 0x06, 0xe483 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1949
		{ 0x06, 0x4dae },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1950
		{ 0x06, 0x0480 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1951
		{ 0x06, 0xe483 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1952
		{ 0x06, 0x4de0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1953
		{ 0x06, 0x834e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1954
		{ 0x06, 0x7803 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1955
		{ 0x06, 0x9e0b },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1956
		{ 0x06, 0xe083 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1957
		{ 0x06, 0x4e78 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1958
		{ 0x06, 0x049e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1959
		{ 0x06, 0x04ee },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1960
		{ 0x06, 0x834e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1961
		{ 0x06, 0x02e0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1962
		{ 0x06, 0x8332 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1963
		{ 0x06, 0xe183 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1964
		{ 0x06, 0x3359 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1965
		{ 0x06, 0x0fe2 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1966
		{ 0x06, 0x834d },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1967
		{ 0x06, 0x0c24 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1968
		{ 0x06, 0x5af0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1969
		{ 0x06, 0x1e12 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1970
		{ 0x06, 0xe4f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1971
		{ 0x06, 0x8ce5 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1972
		{ 0x06, 0xf88d },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1973
		{ 0x06, 0xe083 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1974
		{ 0x06, 0x30e1 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1975
		{ 0x06, 0x8331 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1976
		{ 0x06, 0x6801 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1977
		{ 0x06, 0xe4f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1978
		{ 0x06, 0x8ae5 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1979
		{ 0x06, 0xf88b },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1980
		{ 0x06, 0xae37 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1981
		{ 0x06, 0xee83 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1982
		{ 0x06, 0x4e03 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1983
		{ 0x06, 0xe083 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1984
		{ 0x06, 0x4ce1 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1985
		{ 0x06, 0x834d },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1986
		{ 0x06, 0x1b01 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1987
		{ 0x06, 0x9e04 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1988
		{ 0x06, 0xaaa1 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1989
		{ 0x06, 0xaea8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1990
		{ 0x06, 0xee83 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1991
		{ 0x06, 0x4e04 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1992
		{ 0x06, 0xee83 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1993
		{ 0x06, 0x4f00 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1994
		{ 0x06, 0xaeab },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1995
		{ 0x06, 0xe083 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1996
		{ 0x06, 0x4f78 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1997
		{ 0x06, 0x039f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1998
		{ 0x06, 0x14ee },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  1999
		{ 0x06, 0x834e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2000
		{ 0x06, 0x05d2 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2001
		{ 0x06, 0x40d6 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2002
		{ 0x06, 0x5554 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2003
		{ 0x06, 0x0282 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2004
		{ 0x06, 0x17d2 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2005
		{ 0x06, 0xa0d6 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2006
		{ 0x06, 0xba00 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2007
		{ 0x06, 0x0282 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2008
		{ 0x06, 0x17fe },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2009
		{ 0x06, 0xfdfc },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2010
		{ 0x06, 0x05f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2011
		{ 0x06, 0xe0f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2012
		{ 0x06, 0x60e1 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2013
		{ 0x06, 0xf861 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2014
		{ 0x06, 0x6802 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2015
		{ 0x06, 0xe4f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2016
		{ 0x06, 0x60e5 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2017
		{ 0x06, 0xf861 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2018
		{ 0x06, 0xe0f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2019
		{ 0x06, 0x48e1 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2020
		{ 0x06, 0xf849 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2021
		{ 0x06, 0x580f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2022
		{ 0x06, 0x1e02 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2023
		{ 0x06, 0xe4f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2024
		{ 0x06, 0x48e5 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2025
		{ 0x06, 0xf849 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2026
		{ 0x06, 0xd000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2027
		{ 0x06, 0x0282 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2028
		{ 0x06, 0x5bbf },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2029
		{ 0x06, 0x8350 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2030
		{ 0x06, 0xef46 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2031
		{ 0x06, 0xdc19 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2032
		{ 0x06, 0xddd0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2033
		{ 0x06, 0x0102 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2034
		{ 0x06, 0x825b },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2035
		{ 0x06, 0x0282 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2036
		{ 0x06, 0x77e0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2037
		{ 0x06, 0xf860 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2038
		{ 0x06, 0xe1f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2039
		{ 0x06, 0x6158 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2040
		{ 0x06, 0xfde4 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2041
		{ 0x06, 0xf860 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2042
		{ 0x06, 0xe5f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2043
		{ 0x06, 0x61fc },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2044
		{ 0x06, 0x04f9 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2045
		{ 0x06, 0xfafb },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2046
		{ 0x06, 0xc6bf },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2047
		{ 0x06, 0xf840 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2048
		{ 0x06, 0xbe83 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2049
		{ 0x06, 0x50a0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2050
		{ 0x06, 0x0101 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2051
		{ 0x06, 0x071b },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2052
		{ 0x06, 0x89cf },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2053
		{ 0x06, 0xd208 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2054
		{ 0x06, 0xebdb },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2055
		{ 0x06, 0x19b2 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2056
		{ 0x06, 0xfbff },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2057
		{ 0x06, 0xfefd },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2058
		{ 0x06, 0x04f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2059
		{ 0x06, 0xe0f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2060
		{ 0x06, 0x48e1 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2061
		{ 0x06, 0xf849 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2062
		{ 0x06, 0x6808 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2063
		{ 0x06, 0xe4f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2064
		{ 0x06, 0x48e5 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2065
		{ 0x06, 0xf849 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2066
		{ 0x06, 0x58f7 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2067
		{ 0x06, 0xe4f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2068
		{ 0x06, 0x48e5 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2069
		{ 0x06, 0xf849 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2070
		{ 0x06, 0xfc04 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2071
		{ 0x06, 0x4d20 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2072
		{ 0x06, 0x0002 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2073
		{ 0x06, 0x4e22 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2074
		{ 0x06, 0x0002 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2075
		{ 0x06, 0x4ddf },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2076
		{ 0x06, 0xff01 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2077
		{ 0x06, 0x4edd },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2078
		{ 0x06, 0xff01 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2079
		{ 0x05, 0x83d4 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2080
		{ 0x06, 0x8000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2081
		{ 0x05, 0x83d8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2082
		{ 0x06, 0x8051 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2083
		{ 0x02, 0x6010 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2084
		{ 0x03, 0xdc00 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2085
		{ 0x05, 0xfff6 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2086
		{ 0x06, 0x00fc },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2087
		{ 0x1f, 0x0000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2088
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2089
		{ 0x1f, 0x0000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2090
		{ 0x0d, 0xf880 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2091
		{ 0x1f, 0x0000 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2092
	};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2093
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2094
	rtl_phy_write(ioaddr, phy_reg_init_0, ARRAY_SIZE(phy_reg_init_0));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2095
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2096
	mdio_write(ioaddr, 0x1f, 0x0002);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2097
	mdio_plus_minus(ioaddr, 0x0b, 0x0010, 0x00ef);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2098
	mdio_plus_minus(ioaddr, 0x0c, 0xa200, 0x5d00);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2099
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2100
	rtl_phy_write(ioaddr, phy_reg_init_1, ARRAY_SIZE(phy_reg_init_1));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2101
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2102
	if (rtl8168d_efuse_read(ioaddr, 0x01) == 0xb1) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2103
		static const struct phy_reg phy_reg_init[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2104
			{ 0x1f, 0x0002 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2105
			{ 0x05, 0x669a },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2106
			{ 0x1f, 0x0005 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2107
			{ 0x05, 0x8330 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2108
			{ 0x06, 0x669a },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2109
			{ 0x1f, 0x0002 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2110
		};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2111
		int val;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2112
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2113
		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2114
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2115
		val = mdio_read(ioaddr, 0x0d);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2116
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2117
		if ((val & 0x00ff) != 0x006c) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2118
			static const u32 set[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2119
				0x0065, 0x0066, 0x0067, 0x0068,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2120
				0x0069, 0x006a, 0x006b, 0x006c
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2121
			};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2122
			int i;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2123
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2124
			mdio_write(ioaddr, 0x1f, 0x0002);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2125
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2126
			val &= 0xff00;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2127
			for (i = 0; i < ARRAY_SIZE(set); i++)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2128
				mdio_write(ioaddr, 0x0d, val | set[i]);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2129
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2130
	} else {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2131
		static const struct phy_reg phy_reg_init[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2132
			{ 0x1f, 0x0002 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2133
			{ 0x05, 0x6662 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2134
			{ 0x1f, 0x0005 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2135
			{ 0x05, 0x8330 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2136
			{ 0x06, 0x6662 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2137
		};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2138
cceb9aacf4a6 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, ARRAY_SIZE(phy_reg_init));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2140
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2141
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2142
	mdio_write(ioaddr, 0x1f, 0x0002);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2143
	mdio_patch(ioaddr, 0x0d, 0x0300);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2144
	mdio_patch(ioaddr, 0x0f, 0x0010);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2145
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2146
	mdio_write(ioaddr, 0x1f, 0x0002);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2147
	mdio_plus_minus(ioaddr, 0x02, 0x0100, 0x0600);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2148
	mdio_plus_minus(ioaddr, 0x03, 0x0000, 0xe000);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2149
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2150
	rtl_phy_write(ioaddr, phy_reg_init_2, ARRAY_SIZE(phy_reg_init_2));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2151
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2152
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2153
static void rtl8168d_2_hw_phy_config(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2154
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2155
	static const struct phy_reg phy_reg_init_0[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2156
		{ 0x1f, 0x0001 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2157
		{ 0x06, 0x4064 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2158
		{ 0x07, 0x2863 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2159
		{ 0x08, 0x059c },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2160
		{ 0x09, 0x26b4 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2161
		{ 0x0a, 0x6a19 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2162
		{ 0x0b, 0xdcc8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2163
		{ 0x10, 0xf06d },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2164
		{ 0x14, 0x7f68 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2165
		{ 0x18, 0x7fd9 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2166
		{ 0x1c, 0xf0ff },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2167
		{ 0x1d, 0x3d9c },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2168
		{ 0x1f, 0x0003 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2169
		{ 0x12, 0xf49f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2170
		{ 0x13, 0x070b },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2171
		{ 0x1a, 0x05ad },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2172
		{ 0x14, 0x94c0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2173
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2174
		{ 0x1f, 0x0002 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2175
		{ 0x06, 0x5561 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2176
		{ 0x1f, 0x0005 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2177
		{ 0x05, 0x8332 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2178
		{ 0x06, 0x5561 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2179
	};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2180
	static const struct phy_reg phy_reg_init_1[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2181
		{ 0x1f, 0x0005 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2182
		{ 0x05, 0xffc2 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2183
		{ 0x1f, 0x0005 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2184
		{ 0x05, 0x8000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2185
		{ 0x06, 0xf8f9 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2186
		{ 0x06, 0xfaee },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2187
		{ 0x06, 0xf8ea },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2188
		{ 0x06, 0x00ee },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2189
		{ 0x06, 0xf8eb },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2190
		{ 0x06, 0x00e2 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2191
		{ 0x06, 0xf87c },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2192
		{ 0x06, 0xe3f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2193
		{ 0x06, 0x7da5 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2194
		{ 0x06, 0x1111 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2195
		{ 0x06, 0x12d2 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2196
		{ 0x06, 0x40d6 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2197
		{ 0x06, 0x4444 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2198
		{ 0x06, 0x0281 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2199
		{ 0x06, 0xc6d2 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2200
		{ 0x06, 0xa0d6 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2201
		{ 0x06, 0xaaaa },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2202
		{ 0x06, 0x0281 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2203
		{ 0x06, 0xc6ae },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2204
		{ 0x06, 0x0fa5 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2205
		{ 0x06, 0x4444 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2206
		{ 0x06, 0x02ae },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2207
		{ 0x06, 0x4da5 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2208
		{ 0x06, 0xaaaa },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2209
		{ 0x06, 0x02ae },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2210
		{ 0x06, 0x47af },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2211
		{ 0x06, 0x81c2 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2212
		{ 0x06, 0xee83 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2213
		{ 0x06, 0x4e00 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2214
		{ 0x06, 0xee83 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2215
		{ 0x06, 0x4d0f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2216
		{ 0x06, 0xee83 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2217
		{ 0x06, 0x4c0f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2218
		{ 0x06, 0xee83 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2219
		{ 0x06, 0x4f00 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2220
		{ 0x06, 0xee83 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2221
		{ 0x06, 0x5100 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2222
		{ 0x06, 0xee83 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2223
		{ 0x06, 0x4aff },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2224
		{ 0x06, 0xee83 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2225
		{ 0x06, 0x4bff },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2226
		{ 0x06, 0xe083 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2227
		{ 0x06, 0x30e1 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2228
		{ 0x06, 0x8331 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2229
		{ 0x06, 0x58fe },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2230
		{ 0x06, 0xe4f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2231
		{ 0x06, 0x8ae5 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2232
		{ 0x06, 0xf88b },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2233
		{ 0x06, 0xe083 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2234
		{ 0x06, 0x32e1 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2235
		{ 0x06, 0x8333 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2236
		{ 0x06, 0x590f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2237
		{ 0x06, 0xe283 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2238
		{ 0x06, 0x4d0c },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2239
		{ 0x06, 0x245a },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2240
		{ 0x06, 0xf01e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2241
		{ 0x06, 0x12e4 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2242
		{ 0x06, 0xf88c },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2243
		{ 0x06, 0xe5f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2244
		{ 0x06, 0x8daf },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2245
		{ 0x06, 0x81c2 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2246
		{ 0x06, 0xe083 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2247
		{ 0x06, 0x4f10 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2248
		{ 0x06, 0xe483 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2249
		{ 0x06, 0x4fe0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2250
		{ 0x06, 0x834e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2251
		{ 0x06, 0x7800 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2252
		{ 0x06, 0x9f0a },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2253
		{ 0x06, 0xe083 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2254
		{ 0x06, 0x4fa0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2255
		{ 0x06, 0x10a5 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2256
		{ 0x06, 0xee83 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2257
		{ 0x06, 0x4e01 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2258
		{ 0x06, 0xe083 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2259
		{ 0x06, 0x4e78 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2260
		{ 0x06, 0x059e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2261
		{ 0x06, 0x9ae0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2262
		{ 0x06, 0x834e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2263
		{ 0x06, 0x7804 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2264
		{ 0x06, 0x9e10 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2265
		{ 0x06, 0xe083 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2266
		{ 0x06, 0x4e78 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2267
		{ 0x06, 0x039e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2268
		{ 0x06, 0x0fe0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2269
		{ 0x06, 0x834e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2270
		{ 0x06, 0x7801 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2271
		{ 0x06, 0x9e05 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2272
		{ 0x06, 0xae0c },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2273
		{ 0x06, 0xaf81 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2274
		{ 0x06, 0xa7af },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2275
		{ 0x06, 0x8152 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2276
		{ 0x06, 0xaf81 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2277
		{ 0x06, 0x8baf },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2278
		{ 0x06, 0x81c2 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2279
		{ 0x06, 0xee83 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2280
		{ 0x06, 0x4800 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2281
		{ 0x06, 0xee83 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2282
		{ 0x06, 0x4900 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2283
		{ 0x06, 0xe083 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2284
		{ 0x06, 0x5110 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2285
		{ 0x06, 0xe483 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2286
		{ 0x06, 0x5158 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2287
		{ 0x06, 0x019f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2288
		{ 0x06, 0xead0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2289
		{ 0x06, 0x00d1 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2290
		{ 0x06, 0x801f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2291
		{ 0x06, 0x66e2 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2292
		{ 0x06, 0xf8ea },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2293
		{ 0x06, 0xe3f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2294
		{ 0x06, 0xeb5a },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2295
		{ 0x06, 0xf81e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2296
		{ 0x06, 0x20e6 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2297
		{ 0x06, 0xf8ea },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2298
		{ 0x06, 0xe5f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2299
		{ 0x06, 0xebd3 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2300
		{ 0x06, 0x02b3 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2301
		{ 0x06, 0xfee2 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2302
		{ 0x06, 0xf87c },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2303
		{ 0x06, 0xef32 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2304
		{ 0x06, 0x5b80 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2305
		{ 0x06, 0xe3f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2306
		{ 0x06, 0x7d9e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2307
		{ 0x06, 0x037d },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2308
		{ 0x06, 0xffff },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2309
		{ 0x06, 0x0d58 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2310
		{ 0x06, 0x1c55 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2311
		{ 0x06, 0x1a65 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2312
		{ 0x06, 0x11a1 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2313
		{ 0x06, 0x90d3 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2314
		{ 0x06, 0xe283 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2315
		{ 0x06, 0x48e3 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2316
		{ 0x06, 0x8349 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2317
		{ 0x06, 0x1b56 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2318
		{ 0x06, 0xab08 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2319
		{ 0x06, 0xef56 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2320
		{ 0x06, 0xe683 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2321
		{ 0x06, 0x48e7 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2322
		{ 0x06, 0x8349 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2323
		{ 0x06, 0x10d1 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2324
		{ 0x06, 0x801f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2325
		{ 0x06, 0x66a0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2326
		{ 0x06, 0x04b9 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2327
		{ 0x06, 0xe283 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2328
		{ 0x06, 0x48e3 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2329
		{ 0x06, 0x8349 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2330
		{ 0x06, 0xef65 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2331
		{ 0x06, 0xe283 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2332
		{ 0x06, 0x4ae3 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2333
		{ 0x06, 0x834b },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2334
		{ 0x06, 0x1b56 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2335
		{ 0x06, 0xaa0e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2336
		{ 0x06, 0xef56 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2337
		{ 0x06, 0xe683 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2338
		{ 0x06, 0x4ae7 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2339
		{ 0x06, 0x834b },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2340
		{ 0x06, 0xe283 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2341
		{ 0x06, 0x4de6 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2342
		{ 0x06, 0x834c },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2343
		{ 0x06, 0xe083 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2344
		{ 0x06, 0x4da0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2345
		{ 0x06, 0x000c },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2346
		{ 0x06, 0xaf81 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2347
		{ 0x06, 0x8be0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2348
		{ 0x06, 0x834d },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2349
		{ 0x06, 0x10e4 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2350
		{ 0x06, 0x834d },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2351
		{ 0x06, 0xae04 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2352
		{ 0x06, 0x80e4 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2353
		{ 0x06, 0x834d },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2354
		{ 0x06, 0xe083 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2355
		{ 0x06, 0x4e78 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2356
		{ 0x06, 0x039e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2357
		{ 0x06, 0x0be0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2358
		{ 0x06, 0x834e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2359
		{ 0x06, 0x7804 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2360
		{ 0x06, 0x9e04 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2361
		{ 0x06, 0xee83 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2362
		{ 0x06, 0x4e02 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2363
		{ 0x06, 0xe083 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2364
		{ 0x06, 0x32e1 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2365
		{ 0x06, 0x8333 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2366
		{ 0x06, 0x590f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2367
		{ 0x06, 0xe283 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2368
		{ 0x06, 0x4d0c },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2369
		{ 0x06, 0x245a },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2370
		{ 0x06, 0xf01e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2371
		{ 0x06, 0x12e4 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2372
		{ 0x06, 0xf88c },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2373
		{ 0x06, 0xe5f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2374
		{ 0x06, 0x8de0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2375
		{ 0x06, 0x8330 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2376
		{ 0x06, 0xe183 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2377
		{ 0x06, 0x3168 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2378
		{ 0x06, 0x01e4 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2379
		{ 0x06, 0xf88a },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2380
		{ 0x06, 0xe5f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2381
		{ 0x06, 0x8bae },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2382
		{ 0x06, 0x37ee },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2383
		{ 0x06, 0x834e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2384
		{ 0x06, 0x03e0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2385
		{ 0x06, 0x834c },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2386
		{ 0x06, 0xe183 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2387
		{ 0x06, 0x4d1b },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2388
		{ 0x06, 0x019e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2389
		{ 0x06, 0x04aa },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2390
		{ 0x06, 0xa1ae },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2391
		{ 0x06, 0xa8ee },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2392
		{ 0x06, 0x834e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2393
		{ 0x06, 0x04ee },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2394
		{ 0x06, 0x834f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2395
		{ 0x06, 0x00ae },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2396
		{ 0x06, 0xabe0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2397
		{ 0x06, 0x834f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2398
		{ 0x06, 0x7803 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2399
		{ 0x06, 0x9f14 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2400
		{ 0x06, 0xee83 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2401
		{ 0x06, 0x4e05 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2402
		{ 0x06, 0xd240 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2403
		{ 0x06, 0xd655 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2404
		{ 0x06, 0x5402 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2405
		{ 0x06, 0x81c6 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2406
		{ 0x06, 0xd2a0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2407
		{ 0x06, 0xd6ba },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2408
		{ 0x06, 0x0002 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2409
		{ 0x06, 0x81c6 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2410
		{ 0x06, 0xfefd },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2411
		{ 0x06, 0xfc05 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2412
		{ 0x06, 0xf8e0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2413
		{ 0x06, 0xf860 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2414
		{ 0x06, 0xe1f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2415
		{ 0x06, 0x6168 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2416
		{ 0x06, 0x02e4 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2417
		{ 0x06, 0xf860 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2418
		{ 0x06, 0xe5f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2419
		{ 0x06, 0x61e0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2420
		{ 0x06, 0xf848 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2421
		{ 0x06, 0xe1f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2422
		{ 0x06, 0x4958 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2423
		{ 0x06, 0x0f1e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2424
		{ 0x06, 0x02e4 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2425
		{ 0x06, 0xf848 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2426
		{ 0x06, 0xe5f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2427
		{ 0x06, 0x49d0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2428
		{ 0x06, 0x0002 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2429
		{ 0x06, 0x820a },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2430
		{ 0x06, 0xbf83 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2431
		{ 0x06, 0x50ef },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2432
		{ 0x06, 0x46dc },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2433
		{ 0x06, 0x19dd },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2434
		{ 0x06, 0xd001 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2435
		{ 0x06, 0x0282 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2436
		{ 0x06, 0x0a02 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2437
		{ 0x06, 0x8226 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2438
		{ 0x06, 0xe0f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2439
		{ 0x06, 0x60e1 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2440
		{ 0x06, 0xf861 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2441
		{ 0x06, 0x58fd },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2442
		{ 0x06, 0xe4f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2443
		{ 0x06, 0x60e5 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2444
		{ 0x06, 0xf861 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2445
		{ 0x06, 0xfc04 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2446
		{ 0x06, 0xf9fa },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2447
		{ 0x06, 0xfbc6 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2448
		{ 0x06, 0xbff8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2449
		{ 0x06, 0x40be },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2450
		{ 0x06, 0x8350 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2451
		{ 0x06, 0xa001 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2452
		{ 0x06, 0x0107 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2453
		{ 0x06, 0x1b89 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2454
		{ 0x06, 0xcfd2 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2455
		{ 0x06, 0x08eb },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2456
		{ 0x06, 0xdb19 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2457
		{ 0x06, 0xb2fb },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2458
		{ 0x06, 0xfffe },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2459
		{ 0x06, 0xfd04 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2460
		{ 0x06, 0xf8e0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2461
		{ 0x06, 0xf848 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2462
		{ 0x06, 0xe1f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2463
		{ 0x06, 0x4968 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2464
		{ 0x06, 0x08e4 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2465
		{ 0x06, 0xf848 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2466
		{ 0x06, 0xe5f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2467
		{ 0x06, 0x4958 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2468
		{ 0x06, 0xf7e4 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2469
		{ 0x06, 0xf848 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2470
		{ 0x06, 0xe5f8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2471
		{ 0x06, 0x49fc },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2472
		{ 0x06, 0x044d },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2473
		{ 0x06, 0x2000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2474
		{ 0x06, 0x024e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2475
		{ 0x06, 0x2200 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2476
		{ 0x06, 0x024d },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2477
		{ 0x06, 0xdfff },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2478
		{ 0x06, 0x014e },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2479
		{ 0x06, 0xddff },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2480
		{ 0x06, 0x0100 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2481
		{ 0x05, 0x83d8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2482
		{ 0x06, 0x8000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2483
		{ 0x03, 0xdc00 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2484
		{ 0x05, 0xfff6 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2485
		{ 0x06, 0x00fc },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2486
		{ 0x1f, 0x0000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2487
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2488
		{ 0x1f, 0x0000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2489
		{ 0x0d, 0xf880 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2490
		{ 0x1f, 0x0000 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2491
	};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2492
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2493
	rtl_phy_write(ioaddr, phy_reg_init_0, ARRAY_SIZE(phy_reg_init_0));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2494
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2495
	if (rtl8168d_efuse_read(ioaddr, 0x01) == 0xb1) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2496
		static const struct phy_reg phy_reg_init[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2497
			{ 0x1f, 0x0002 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2498
			{ 0x05, 0x669a },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2499
			{ 0x1f, 0x0005 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2500
			{ 0x05, 0x8330 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2501
			{ 0x06, 0x669a },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2502
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2503
			{ 0x1f, 0x0002 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2504
		};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2505
		int val;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2506
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2507
		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2508
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2509
		val = mdio_read(ioaddr, 0x0d);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2510
		if ((val & 0x00ff) != 0x006c) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2511
			u32 set[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2512
				0x0065, 0x0066, 0x0067, 0x0068,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2513
				0x0069, 0x006a, 0x006b, 0x006c
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2514
			};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2515
			int i;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2516
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2517
			mdio_write(ioaddr, 0x1f, 0x0002);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2518
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2519
			val &= 0xff00;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2520
			for (i = 0; i < ARRAY_SIZE(set); i++)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2521
				mdio_write(ioaddr, 0x0d, val | set[i]);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2522
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2523
	} else {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2524
		static const struct phy_reg phy_reg_init[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2525
			{ 0x1f, 0x0002 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2526
			{ 0x05, 0x2642 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2527
			{ 0x1f, 0x0005 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2528
			{ 0x05, 0x8330 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2529
			{ 0x06, 0x2642 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2530
		};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2531
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2532
		rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2533
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2534
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2535
	mdio_write(ioaddr, 0x1f, 0x0002);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2536
	mdio_plus_minus(ioaddr, 0x02, 0x0100, 0x0600);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2537
	mdio_plus_minus(ioaddr, 0x03, 0x0000, 0xe000);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2538
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2539
	mdio_write(ioaddr, 0x1f, 0x0001);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2540
	mdio_write(ioaddr, 0x17, 0x0cc0);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2541
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2542
	mdio_write(ioaddr, 0x1f, 0x0002);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2543
	mdio_patch(ioaddr, 0x0f, 0x0017);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2544
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2545
	rtl_phy_write(ioaddr, phy_reg_init_1, ARRAY_SIZE(phy_reg_init_1));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2546
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2547
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2548
static void rtl8168d_3_hw_phy_config(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2549
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2550
	static const struct phy_reg phy_reg_init[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2551
		{ 0x1f, 0x0002 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2552
		{ 0x10, 0x0008 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2553
		{ 0x0d, 0x006c },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2554
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2555
		{ 0x1f, 0x0000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2556
		{ 0x0d, 0xf880 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2557
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2558
		{ 0x1f, 0x0001 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2559
		{ 0x17, 0x0cc0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2560
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2561
		{ 0x1f, 0x0001 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2562
		{ 0x0b, 0xa4d8 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2563
		{ 0x09, 0x281c },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2564
		{ 0x07, 0x2883 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2565
		{ 0x0a, 0x6b35 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2566
		{ 0x1d, 0x3da4 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2567
		{ 0x1c, 0xeffd },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2568
		{ 0x14, 0x7f52 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2569
		{ 0x18, 0x7fc6 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2570
		{ 0x08, 0x0601 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2571
		{ 0x06, 0x4063 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2572
		{ 0x10, 0xf074 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2573
		{ 0x1f, 0x0003 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2574
		{ 0x13, 0x0789 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2575
		{ 0x12, 0xf4bd },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2576
		{ 0x1a, 0x04fd },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2577
		{ 0x14, 0x84b0 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2578
		{ 0x1f, 0x0000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2579
		{ 0x00, 0x9200 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2580
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2581
		{ 0x1f, 0x0005 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2582
		{ 0x01, 0x0340 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2583
		{ 0x1f, 0x0001 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2584
		{ 0x04, 0x4000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2585
		{ 0x03, 0x1d21 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2586
		{ 0x02, 0x0c32 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2587
		{ 0x01, 0x0200 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2588
		{ 0x00, 0x5554 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2589
		{ 0x04, 0x4800 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2590
		{ 0x04, 0x4000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2591
		{ 0x04, 0xf000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2592
		{ 0x03, 0xdf01 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2593
		{ 0x02, 0xdf20 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2594
		{ 0x01, 0x101a },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2595
		{ 0x00, 0xa0ff },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2596
		{ 0x04, 0xf800 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2597
		{ 0x04, 0xf000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2598
		{ 0x1f, 0x0000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2599
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2600
		{ 0x1f, 0x0007 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2601
		{ 0x1e, 0x0023 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2602
		{ 0x16, 0x0000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2603
		{ 0x1f, 0x0000 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2604
	};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2605
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2606
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2607
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2608
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2609
static void rtl8102e_hw_phy_config(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2610
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2611
	static const struct phy_reg phy_reg_init[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2612
		{ 0x1f, 0x0003 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2613
		{ 0x08, 0x441d },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2614
		{ 0x01, 0x9100 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2615
		{ 0x1f, 0x0000 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2616
	};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2617
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2618
	mdio_write(ioaddr, 0x1f, 0x0000);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2619
	mdio_patch(ioaddr, 0x11, 1 << 12);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2620
	mdio_patch(ioaddr, 0x19, 1 << 13);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2621
	mdio_patch(ioaddr, 0x10, 1 << 15);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2622
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2623
	rtl_phy_write(ioaddr, phy_reg_init, ARRAY_SIZE(phy_reg_init));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2624
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2625
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2626
static void rtl_hw_phy_config(struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2627
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2628
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2629
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2630
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2631
	rtl8169_print_mac_version(tp);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2632
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2633
	switch (tp->mac_version) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2634
	case RTL_GIGA_MAC_VER_01:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2635
		break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2636
	case RTL_GIGA_MAC_VER_02:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2637
	case RTL_GIGA_MAC_VER_03:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2638
		rtl8169s_hw_phy_config(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2639
		break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2640
	case RTL_GIGA_MAC_VER_04:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2641
		rtl8169sb_hw_phy_config(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2642
		break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2643
	case RTL_GIGA_MAC_VER_05:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2644
		rtl8169scd_hw_phy_config(tp, ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2645
		break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2646
	case RTL_GIGA_MAC_VER_06:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2647
		rtl8169sce_hw_phy_config(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2648
		break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2649
	case RTL_GIGA_MAC_VER_07:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2650
	case RTL_GIGA_MAC_VER_08:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2651
	case RTL_GIGA_MAC_VER_09:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2652
		rtl8102e_hw_phy_config(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2653
		break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2654
	case RTL_GIGA_MAC_VER_11:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2655
		rtl8168bb_hw_phy_config(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2656
		break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2657
	case RTL_GIGA_MAC_VER_12:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2658
		rtl8168bef_hw_phy_config(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2659
		break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2660
	case RTL_GIGA_MAC_VER_17:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2661
		rtl8168bef_hw_phy_config(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2662
		break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2663
	case RTL_GIGA_MAC_VER_18:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2664
		rtl8168cp_1_hw_phy_config(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2665
		break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2666
	case RTL_GIGA_MAC_VER_19:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2667
		rtl8168c_1_hw_phy_config(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2668
		break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2669
	case RTL_GIGA_MAC_VER_20:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2670
		rtl8168c_2_hw_phy_config(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2671
		break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2672
	case RTL_GIGA_MAC_VER_21:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2673
		rtl8168c_3_hw_phy_config(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2674
		break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2675
	case RTL_GIGA_MAC_VER_22:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2676
		rtl8168c_4_hw_phy_config(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2677
		break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2678
	case RTL_GIGA_MAC_VER_23:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2679
	case RTL_GIGA_MAC_VER_24:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2680
		rtl8168cp_2_hw_phy_config(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2681
		break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2682
	case RTL_GIGA_MAC_VER_25:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2683
		rtl8168d_1_hw_phy_config(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2684
		break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2685
	case RTL_GIGA_MAC_VER_26:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2686
		rtl8168d_2_hw_phy_config(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2687
		break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2688
	case RTL_GIGA_MAC_VER_27:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2689
		rtl8168d_3_hw_phy_config(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2690
		break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2691
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2692
	default:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2693
		break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2694
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2695
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2696
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2697
static void rtl8169_phy_timer(unsigned long __opaque)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2698
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2699
	struct net_device *dev = (struct net_device *)__opaque;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2700
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2701
	struct timer_list *timer = &tp->timer;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2702
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2703
	unsigned long timeout = RTL8169_PHY_TIMEOUT;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2704
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2705
	assert(tp->mac_version > RTL_GIGA_MAC_VER_01);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2706
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2707
	if (!(tp->phy_1000_ctrl_reg & ADVERTISE_1000FULL))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2708
		return;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2709
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2710
	if (!tp->ecdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2711
		spin_lock_irq(&tp->lock);
2589
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 2185
diff changeset
  2712
2053
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2713
	if (tp->phy_reset_pending(ioaddr)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2714
		/*
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2715
		 * A busy loop could burn quite a few cycles on nowadays CPU.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2716
		 * Let's delay the execution of the timer for a few ticks.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2717
		 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2718
		timeout = HZ/10;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2719
		goto out_mod_timer;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2720
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2721
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2722
	if (tp->link_ok(ioaddr))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2723
		goto out_unlock;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2724
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2725
	if (netif_msg_link(tp))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2726
		printk(KERN_WARNING "%s: PHY reset until link up\n", dev->name);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2727
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2728
	tp->phy_reset_enable(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2729
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2730
out_mod_timer:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2731
	if (!tp->ecdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2732
		mod_timer(timer, jiffies + timeout);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2733
out_unlock:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2734
	if (!tp->ecdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2735
		spin_unlock_irq(&tp->lock);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2736
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2737
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2738
static inline void rtl8169_delete_timer(struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2739
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2740
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2741
	struct timer_list *timer = &tp->timer;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2742
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2743
	if (tp->ecdev || tp->mac_version <= RTL_GIGA_MAC_VER_01)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2744
		return;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2745
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2746
	del_timer_sync(timer);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2747
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2748
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2749
static inline void rtl8169_request_timer(struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2750
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2751
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2752
	struct timer_list *timer = &tp->timer;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2753
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2754
	if (tp->ecdev || tp->mac_version <= RTL_GIGA_MAC_VER_01)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2755
		return;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2756
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2757
	mod_timer(timer, jiffies + RTL8169_PHY_TIMEOUT);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2758
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2759
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2760
#ifdef CONFIG_NET_POLL_CONTROLLER
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2761
/*
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2762
 * Polling 'interrupt' - used by things like netconsole to send skbs
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2763
 * without having to re-enable interrupts. It's not called while
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2764
 * the interrupt routine is executing.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2765
 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2766
static void rtl8169_netpoll(struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2767
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2768
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2769
	struct pci_dev *pdev = tp->pci_dev;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2770
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2771
	disable_irq(pdev->irq);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2772
	rtl8169_interrupt(pdev->irq, dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2773
	enable_irq(pdev->irq);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2774
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2775
#endif
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2776
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2777
static void rtl8169_release_board(struct pci_dev *pdev, struct net_device *dev,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2778
				  void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2779
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2780
	iounmap(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2781
	pci_release_regions(pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2782
	pci_disable_device(pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2783
	free_netdev(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2784
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2785
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2786
static void rtl8169_phy_reset(struct net_device *dev,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2787
			      struct rtl8169_private *tp)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2788
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2789
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2790
	unsigned int i;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2791
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2792
	tp->phy_reset_enable(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2793
	for (i = 0; i < 100; i++) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2794
		if (!tp->phy_reset_pending(ioaddr))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2795
			return;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2796
		msleep(1);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2797
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2798
	if (netif_msg_link(tp))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2799
		printk(KERN_ERR "%s: PHY reset failed.\n", dev->name);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2800
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2801
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2802
static void rtl8169_init_phy(struct net_device *dev, struct rtl8169_private *tp)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2803
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2804
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2805
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2806
	rtl_hw_phy_config(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2807
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2808
	if (tp->mac_version <= RTL_GIGA_MAC_VER_06) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2809
		dprintk("Set MAC Reg C+CR Offset 0x82h = 0x01h\n");
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2810
		RTL_W8(0x82, 0x01);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2811
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2812
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2813
	pci_write_config_byte(tp->pci_dev, PCI_LATENCY_TIMER, 0x40);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2814
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2815
	if (tp->mac_version <= RTL_GIGA_MAC_VER_06)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2816
		pci_write_config_byte(tp->pci_dev, PCI_CACHE_LINE_SIZE, 0x08);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2817
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2818
	if (tp->mac_version == RTL_GIGA_MAC_VER_02) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2819
		dprintk("Set MAC Reg C+CR Offset 0x82h = 0x01h\n");
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2820
		RTL_W8(0x82, 0x01);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2821
		dprintk("Set PHY Reg 0x0bh = 0x00h\n");
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2822
		mdio_write(ioaddr, 0x0b, 0x0000); //w 0x0b 15 0 0
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2823
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2824
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2825
	rtl8169_phy_reset(dev, tp);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2826
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2827
	/*
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2828
	 * rtl8169_set_speed_xmii takes good care of the Fast Ethernet
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2829
	 * only 8101. Don't panic.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2830
	 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2831
	rtl8169_set_speed(dev, AUTONEG_ENABLE, SPEED_1000, DUPLEX_FULL);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2832
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2833
	if ((RTL_R8(PHYstatus) & TBI_Enable) && netif_msg_link(tp))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2834
		printk(KERN_INFO PFX "%s: TBI auto-negotiating\n", dev->name);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2835
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2836
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2837
static void rtl_rar_set(struct rtl8169_private *tp, u8 *addr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2838
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2839
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2840
	u32 high;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2841
	u32 low;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2842
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2843
	low  = addr[0] | (addr[1] << 8) | (addr[2] << 16) | (addr[3] << 24);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2844
	high = addr[4] | (addr[5] << 8);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2845
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2846
	spin_lock_irq(&tp->lock);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2847
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2848
	RTL_W8(Cfg9346, Cfg9346_Unlock);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2849
	RTL_W32(MAC0, low);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2850
	RTL_W32(MAC4, high);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2851
	RTL_W8(Cfg9346, Cfg9346_Lock);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2852
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2853
	spin_unlock_irq(&tp->lock);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2854
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2855
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2856
static int rtl_set_mac_address(struct net_device *dev, void *p)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2857
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2858
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2859
	struct sockaddr *addr = p;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2860
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2861
	if (!is_valid_ether_addr(addr->sa_data))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2862
		return -EADDRNOTAVAIL;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2863
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2864
	memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2865
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2866
	rtl_rar_set(tp, dev->dev_addr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2867
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2868
	return 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2869
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2870
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2871
static int rtl8169_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2872
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2873
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2874
	struct mii_ioctl_data *data = if_mii(ifr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2875
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2876
	return netif_running(dev) ? tp->do_ioctl(tp, data, cmd) : -ENODEV;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2877
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2878
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2879
static int rtl_xmii_ioctl(struct rtl8169_private *tp, struct mii_ioctl_data *data, int cmd)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2880
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2881
	switch (cmd) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2882
	case SIOCGMIIPHY:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2883
		data->phy_id = 32; /* Internal PHY */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2884
		return 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2885
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2886
	case SIOCGMIIREG:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2887
		data->val_out = mdio_read(tp->mmio_addr, data->reg_num & 0x1f);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2888
		return 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2889
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2890
	case SIOCSMIIREG:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2891
		mdio_write(tp->mmio_addr, data->reg_num & 0x1f, data->val_in);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2892
		return 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2893
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2894
	return -EOPNOTSUPP;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2895
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2896
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2897
static int rtl_tbi_ioctl(struct rtl8169_private *tp, struct mii_ioctl_data *data, int cmd)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2898
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2899
	return -EOPNOTSUPP;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2900
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2901
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2902
static const struct rtl_cfg_info {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2903
	void (*hw_start)(struct net_device *);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2904
	unsigned int region;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2905
	unsigned int align;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2906
	u16 intr_event;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2907
	u16 napi_event;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2908
	unsigned features;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2909
	u8 default_ver;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2910
} rtl_cfg_infos [] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2911
	[RTL_CFG_0] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2912
		.hw_start	= rtl_hw_start_8169,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2913
		.region		= 1,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2914
		.align		= 0,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2915
		.intr_event	= SYSErr | LinkChg | RxOverflow |
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2916
				  RxFIFOOver | TxErr | TxOK | RxOK | RxErr,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2917
		.napi_event	= RxFIFOOver | TxErr | TxOK | RxOK | RxOverflow,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2918
		.features	= RTL_FEATURE_GMII,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2919
		.default_ver	= RTL_GIGA_MAC_VER_01,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2920
	},
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2921
	[RTL_CFG_1] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2922
		.hw_start	= rtl_hw_start_8168,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2923
		.region		= 2,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2924
		.align		= 8,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2925
		.intr_event	= SYSErr | LinkChg | RxOverflow |
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2926
				  TxErr | TxOK | RxOK | RxErr,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2927
		.napi_event	= TxErr | TxOK | RxOK | RxOverflow,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2928
		.features	= RTL_FEATURE_GMII | RTL_FEATURE_MSI,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2929
		.default_ver	= RTL_GIGA_MAC_VER_11,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2930
	},
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2931
	[RTL_CFG_2] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2932
		.hw_start	= rtl_hw_start_8101,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2933
		.region		= 2,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2934
		.align		= 8,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2935
		.intr_event	= SYSErr | LinkChg | RxOverflow | PCSTimeout |
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2936
				  RxFIFOOver | TxErr | TxOK | RxOK | RxErr,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2937
		.napi_event	= RxFIFOOver | TxErr | TxOK | RxOK | RxOverflow,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2938
		.features	= RTL_FEATURE_MSI,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2939
		.default_ver	= RTL_GIGA_MAC_VER_13,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2940
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2941
};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2942
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2943
/* Cfg9346_Unlock assumed. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2944
static unsigned rtl_try_msi(struct pci_dev *pdev, void __iomem *ioaddr,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2945
			    const struct rtl_cfg_info *cfg)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2946
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2947
	unsigned msi = 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2948
	u8 cfg2;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2949
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2950
	cfg2 = RTL_R8(Config2) & ~MSIEnable;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2951
	if (cfg->features & RTL_FEATURE_MSI) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2952
		if (pci_enable_msi(pdev)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2953
			dev_info(&pdev->dev, "no MSI. Back to INTx.\n");
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2954
		} else {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2955
			cfg2 |= MSIEnable;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2956
			msi = RTL_FEATURE_MSI;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2957
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2958
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2959
	RTL_W8(Config2, cfg2);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2960
	return msi;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2961
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2962
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2963
static void rtl_disable_msi(struct pci_dev *pdev, struct rtl8169_private *tp)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2964
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2965
	if (tp->features & RTL_FEATURE_MSI) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2966
		pci_disable_msi(pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2967
		tp->features &= ~RTL_FEATURE_MSI;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2968
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2969
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2970
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2971
static const struct net_device_ops rtl8169_netdev_ops = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2972
	.ndo_open		= rtl8169_open,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2973
	.ndo_stop		= rtl8169_close,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2974
	.ndo_get_stats		= rtl8169_get_stats,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2975
	.ndo_start_xmit		= rtl8169_start_xmit,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2976
	.ndo_tx_timeout		= rtl8169_tx_timeout,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2977
	.ndo_validate_addr	= eth_validate_addr,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2978
	.ndo_change_mtu		= rtl8169_change_mtu,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2979
	.ndo_set_mac_address	= rtl_set_mac_address,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2980
	.ndo_do_ioctl		= rtl8169_ioctl,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2981
	.ndo_set_multicast_list	= rtl_set_rx_mode,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2982
#ifdef CONFIG_R8169_VLAN
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2983
	.ndo_vlan_rx_register	= rtl8169_vlan_rx_register,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2984
#endif
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2985
#ifdef CONFIG_NET_POLL_CONTROLLER
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2986
	.ndo_poll_controller	= rtl8169_netpoll,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2987
#endif
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2988
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2989
};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2990
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2991
static int __devinit
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2992
rtl8169_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2993
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2994
	const struct rtl_cfg_info *cfg = rtl_cfg_infos + ent->driver_data;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2995
	const unsigned int region = cfg->region;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2996
	struct rtl8169_private *tp;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2997
	struct mii_if_info *mii;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2998
	struct net_device *dev;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  2999
	void __iomem *ioaddr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3000
	unsigned int i;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3001
	int rc;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3002
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3003
	if (netif_msg_drv(&debug)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3004
		printk(KERN_INFO "%s Gigabit Ethernet driver %s loaded\n",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3005
		       MODULENAME, RTL8169_VERSION);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3006
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3007
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3008
	dev = alloc_etherdev(sizeof (*tp));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3009
	if (!dev) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3010
		if (netif_msg_drv(&debug))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3011
			dev_err(&pdev->dev, "unable to alloc new ethernet\n");
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3012
		rc = -ENOMEM;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3013
		goto out;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3014
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3015
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3016
	SET_NETDEV_DEV(dev, &pdev->dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3017
	dev->netdev_ops = &rtl8169_netdev_ops;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3018
	tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3019
	tp->dev = dev;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3020
	tp->pci_dev = pdev;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3021
	tp->msg_enable = netif_msg_init(debug.msg_enable, R8169_MSG_DEFAULT);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3022
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3023
	mii = &tp->mii;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3024
	mii->dev = dev;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3025
	mii->mdio_read = rtl_mdio_read;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3026
	mii->mdio_write = rtl_mdio_write;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3027
	mii->phy_id_mask = 0x1f;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3028
	mii->reg_num_mask = 0x1f;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3029
	mii->supports_gmii = !!(cfg->features & RTL_FEATURE_GMII);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3030
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3031
	/* enable device (incl. PCI PM wakeup and hotplug setup) */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3032
	rc = pci_enable_device(pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3033
	if (rc < 0) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3034
		if (netif_msg_probe(tp))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3035
			dev_err(&pdev->dev, "enable failure\n");
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3036
		goto err_out_free_dev_1;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3037
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3038
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3039
	rc = pci_set_mwi(pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3040
	if (rc < 0)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3041
		goto err_out_disable_2;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3042
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3043
	/* make sure PCI base addr 1 is MMIO */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3044
	if (!(pci_resource_flags(pdev, region) & IORESOURCE_MEM)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3045
		if (netif_msg_probe(tp)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3046
			dev_err(&pdev->dev,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3047
				"region #%d not an MMIO resource, aborting\n",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3048
				region);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3049
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3050
		rc = -ENODEV;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3051
		goto err_out_mwi_3;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3052
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3053
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3054
	/* check for weird/broken PCI region reporting */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3055
	if (pci_resource_len(pdev, region) < R8169_REGS_SIZE) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3056
		if (netif_msg_probe(tp)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3057
			dev_err(&pdev->dev,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3058
				"Invalid PCI region size(s), aborting\n");
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3059
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3060
		rc = -ENODEV;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3061
		goto err_out_mwi_3;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3062
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3063
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3064
	rc = pci_request_regions(pdev, MODULENAME);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3065
	if (rc < 0) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3066
		if (netif_msg_probe(tp))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3067
			dev_err(&pdev->dev, "could not request regions.\n");
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3068
		goto err_out_mwi_3;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3069
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3070
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3071
	tp->cp_cmd = PCIMulRW | RxChkSum;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3072
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3073
	if ((sizeof(dma_addr_t) > 4) &&
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3074
	    !pci_set_dma_mask(pdev, DMA_BIT_MASK(64)) && use_dac) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3075
		tp->cp_cmd |= PCIDAC;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3076
		dev->features |= NETIF_F_HIGHDMA;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3077
	} else {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3078
		rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3079
		if (rc < 0) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3080
			if (netif_msg_probe(tp)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3081
				dev_err(&pdev->dev,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3082
					"DMA configuration failed.\n");
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3083
			}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3084
			goto err_out_free_res_4;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3085
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3086
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3087
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3088
	/* ioremap MMIO region */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3089
	ioaddr = ioremap(pci_resource_start(pdev, region), R8169_REGS_SIZE);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3090
	if (!ioaddr) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3091
		if (netif_msg_probe(tp))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3092
			dev_err(&pdev->dev, "cannot remap MMIO, aborting\n");
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3093
		rc = -EIO;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3094
		goto err_out_free_res_4;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3095
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3096
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3097
	tp->pcie_cap = pci_find_capability(pdev, PCI_CAP_ID_EXP);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3098
	if (!tp->pcie_cap && netif_msg_probe(tp))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3099
		dev_info(&pdev->dev, "no PCI Express capability\n");
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3100
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3101
	RTL_W16(IntrMask, 0x0000);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3102
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3103
	/* Soft reset the chip. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3104
	RTL_W8(ChipCmd, CmdReset);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3105
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3106
	/* Check that the chip has finished the reset. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3107
	for (i = 0; i < 100; i++) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3108
		if ((RTL_R8(ChipCmd) & CmdReset) == 0)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3109
			break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3110
		msleep_interruptible(1);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3111
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3112
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3113
	RTL_W16(IntrStatus, 0xffff);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3114
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3115
	pci_set_master(pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3116
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3117
	/* Identify chip attached to board */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3118
	rtl8169_get_mac_version(tp, ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3119
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3120
	/* Use appropriate default if unknown */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3121
	if (tp->mac_version == RTL_GIGA_MAC_NONE) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3122
		if (netif_msg_probe(tp)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3123
			dev_notice(&pdev->dev,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3124
				   "unknown MAC, using family default\n");
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3125
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3126
		tp->mac_version = cfg->default_ver;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3127
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3128
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3129
	rtl8169_print_mac_version(tp);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3130
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3131
	for (i = 0; i < ARRAY_SIZE(rtl_chip_info); i++) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3132
		if (tp->mac_version == rtl_chip_info[i].mac_version)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3133
			break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3134
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3135
	if (i == ARRAY_SIZE(rtl_chip_info)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3136
		dev_err(&pdev->dev,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3137
			"driver bug, MAC version not found in rtl_chip_info\n");
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3138
		goto err_out_msi_5;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3139
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3140
	tp->chipset = i;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3141
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3142
	RTL_W8(Cfg9346, Cfg9346_Unlock);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3143
	RTL_W8(Config1, RTL_R8(Config1) | PMEnable);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3144
	RTL_W8(Config5, RTL_R8(Config5) & PMEStatus);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3145
	if ((RTL_R8(Config3) & (LinkUp | MagicPacket)) != 0)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3146
		tp->features |= RTL_FEATURE_WOL;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3147
	if ((RTL_R8(Config5) & (UWF | BWF | MWF)) != 0)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3148
		tp->features |= RTL_FEATURE_WOL;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3149
	tp->features |= rtl_try_msi(pdev, ioaddr, cfg);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3150
	RTL_W8(Cfg9346, Cfg9346_Lock);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3151
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3152
	if ((tp->mac_version <= RTL_GIGA_MAC_VER_06) &&
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3153
	    (RTL_R8(PHYstatus) & TBI_Enable)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3154
		tp->set_speed = rtl8169_set_speed_tbi;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3155
		tp->get_settings = rtl8169_gset_tbi;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3156
		tp->phy_reset_enable = rtl8169_tbi_reset_enable;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3157
		tp->phy_reset_pending = rtl8169_tbi_reset_pending;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3158
		tp->link_ok = rtl8169_tbi_link_ok;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3159
		tp->do_ioctl = rtl_tbi_ioctl;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3160
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3161
		tp->phy_1000_ctrl_reg = ADVERTISE_1000FULL; /* Implied by TBI */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3162
	} else {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3163
		tp->set_speed = rtl8169_set_speed_xmii;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3164
		tp->get_settings = rtl8169_gset_xmii;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3165
		tp->phy_reset_enable = rtl8169_xmii_reset_enable;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3166
		tp->phy_reset_pending = rtl8169_xmii_reset_pending;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3167
		tp->link_ok = rtl8169_xmii_link_ok;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3168
		tp->do_ioctl = rtl_xmii_ioctl;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3169
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3170
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3171
	spin_lock_init(&tp->lock);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3172
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3173
	tp->mmio_addr = ioaddr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3174
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3175
	/* Get MAC address */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3176
	for (i = 0; i < MAC_ADDR_LEN; i++)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3177
		dev->dev_addr[i] = RTL_R8(MAC0 + i);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3178
	memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3179
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3180
	SET_ETHTOOL_OPS(dev, &rtl8169_ethtool_ops);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3181
	dev->watchdog_timeo = RTL8169_TX_TIMEOUT;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3182
	dev->irq = pdev->irq;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3183
	dev->base_addr = (unsigned long) ioaddr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3184
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3185
	netif_napi_add(dev, &tp->napi, rtl8169_poll, R8169_NAPI_WEIGHT);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3186
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3187
#ifdef CONFIG_R8169_VLAN
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3188
	dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3189
#endif
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3190
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3191
	tp->intr_mask = 0xffff;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3192
	tp->align = cfg->align;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3193
	tp->hw_start = cfg->hw_start;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3194
	tp->intr_event = cfg->intr_event;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3195
	tp->napi_event = cfg->napi_event;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3196
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3197
	init_timer(&tp->timer);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3198
	tp->timer.data = (unsigned long) dev;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3199
	tp->timer.function = rtl8169_phy_timer;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3200
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3201
	// offer device to EtherCAT master module
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3202
	tp->ecdev = ecdev_offer(dev, ec_poll, THIS_MODULE);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3203
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3204
	if (!tp->ecdev) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3205
		rc = register_netdev(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3206
		if (rc < 0)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3207
			goto err_out_msi_5;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3208
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3209
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3210
	pci_set_drvdata(pdev, dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3211
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3212
	if (netif_msg_probe(tp)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3213
		u32 xid = RTL_R32(TxConfig) & 0x9cf0f8ff;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3214
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3215
		printk(KERN_INFO "%s: %s at 0x%lx, "
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3216
		       "%2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x, "
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3217
		       "XID %08x IRQ %d\n",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3218
		       dev->name,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3219
		       rtl_chip_info[tp->chipset].name,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3220
		       dev->base_addr,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3221
		       dev->dev_addr[0], dev->dev_addr[1],
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3222
		       dev->dev_addr[2], dev->dev_addr[3],
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3223
		       dev->dev_addr[4], dev->dev_addr[5], xid, dev->irq);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3224
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3225
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3226
	rtl8169_init_phy(dev, tp);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3227
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3228
	/*
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3229
	 * Pretend we are using VLANs; This bypasses a nasty bug where
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3230
	 * Interrupts stop flowing on high load on 8110SCd controllers.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3231
	 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3232
	if (tp->mac_version == RTL_GIGA_MAC_VER_05)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3233
		RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) | RxVlan);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3234
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3235
	device_set_wakeup_enable(&pdev->dev, tp->features & RTL_FEATURE_WOL);
2185
bc08b092238d Minor changes.
Florian Pose <fp@igh-essen.com>
parents: 2053
diff changeset
  3236
2589
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 2185
diff changeset
  3237
	if (tp->ecdev) {
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 2185
diff changeset
  3238
		rc = ecdev_open(tp->ecdev);
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 2185
diff changeset
  3239
		if (rc) {
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 2185
diff changeset
  3240
			ecdev_withdraw(tp->ecdev);
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 2185
diff changeset
  3241
			goto err_out_msi_5;
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 2185
diff changeset
  3242
		}
2053
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3243
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3244
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3245
out:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3246
	return rc;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3247
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3248
err_out_msi_5:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3249
	rtl_disable_msi(pdev, tp);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3250
	iounmap(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3251
err_out_free_res_4:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3252
	pci_release_regions(pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3253
err_out_mwi_3:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3254
	pci_clear_mwi(pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3255
err_out_disable_2:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3256
	pci_disable_device(pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3257
err_out_free_dev_1:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3258
	free_netdev(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3259
	goto out;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3260
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3261
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3262
static void __devexit rtl8169_remove_one(struct pci_dev *pdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3263
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3264
	struct net_device *dev = pci_get_drvdata(pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3265
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3266
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3267
	flush_scheduled_work();
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3268
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3269
	if (tp->ecdev) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3270
		ecdev_close(tp->ecdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3271
		ecdev_withdraw(tp->ecdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3272
	} else {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3273
		unregister_netdev(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3274
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3275
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3276
	/* restore original MAC address */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3277
	rtl_rar_set(tp, dev->perm_addr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3278
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3279
	rtl_disable_msi(pdev, tp);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3280
	rtl8169_release_board(pdev, dev, tp->mmio_addr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3281
	pci_set_drvdata(pdev, NULL);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3282
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3283
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3284
static void rtl8169_set_rxbufsize(struct rtl8169_private *tp,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3285
				  unsigned int mtu)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3286
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3287
	unsigned int max_frame = mtu + VLAN_ETH_HLEN + ETH_FCS_LEN;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3288
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3289
	if (max_frame != 16383)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3290
		printk(KERN_WARNING "WARNING! Changing of MTU on this NIC"
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3291
			"May lead to frame reception errors!\n");
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3292
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3293
	tp->rx_buf_sz = (max_frame > RX_BUF_SIZE) ? max_frame : RX_BUF_SIZE;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3294
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3295
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3296
static int rtl8169_open(struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3297
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3298
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3299
	struct pci_dev *pdev = tp->pci_dev;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3300
	int retval = -ENOMEM;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3301
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3302
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3303
	/*
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3304
	 * Note that we use a magic value here, its wierd I know
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3305
	 * its done because, some subset of rtl8169 hardware suffers from
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3306
	 * a problem in which frames received that are longer than
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3307
	 * the size set in RxMaxSize register return garbage sizes
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3308
	 * when received.  To avoid this we need to turn off filtering,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3309
	 * which is done by setting a value of 16383 in the RxMaxSize register
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3310
	 * and allocating 16k frames to handle the largest possible rx value
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3311
	 * thats what the magic math below does.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3312
	 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3313
	rtl8169_set_rxbufsize(tp, 16383 - VLAN_ETH_HLEN - ETH_FCS_LEN);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3314
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3315
	/*
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3316
	 * Rx and Tx desscriptors needs 256 bytes alignment.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3317
	 * pci_alloc_consistent provides more.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3318
	 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3319
	tp->TxDescArray = pci_alloc_consistent(pdev, R8169_TX_RING_BYTES,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3320
					       &tp->TxPhyAddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3321
	if (!tp->TxDescArray)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3322
		goto out;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3323
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3324
	tp->RxDescArray = pci_alloc_consistent(pdev, R8169_RX_RING_BYTES,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3325
					       &tp->RxPhyAddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3326
	if (!tp->RxDescArray)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3327
		goto err_free_tx_0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3328
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3329
	retval = rtl8169_init_ring(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3330
	if (retval < 0)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3331
		goto err_free_rx_1;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3332
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3333
	INIT_DELAYED_WORK(&tp->task, NULL);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3334
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3335
	smp_mb();
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3336
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3337
	if (!tp->ecdev) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3338
		retval = request_irq(dev->irq, rtl8169_interrupt,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3339
				(tp->features & RTL_FEATURE_MSI) ? 0 : IRQF_SHARED,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3340
				dev->name, dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3341
		if (retval < 0)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3342
			goto err_release_ring_2;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3343
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3344
		napi_enable(&tp->napi);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3345
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3346
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3347
	rtl_hw_start(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3348
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3349
	rtl8169_request_timer(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3350
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3351
	rtl8169_check_link_status(dev, tp, tp->mmio_addr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3352
out:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3353
	return retval;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3354
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3355
err_release_ring_2:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3356
	rtl8169_rx_clear(tp);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3357
err_free_rx_1:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3358
	pci_free_consistent(pdev, R8169_RX_RING_BYTES, tp->RxDescArray,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3359
			    tp->RxPhyAddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3360
err_free_tx_0:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3361
	pci_free_consistent(pdev, R8169_TX_RING_BYTES, tp->TxDescArray,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3362
			    tp->TxPhyAddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3363
	goto out;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3364
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3365
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3366
static void rtl8169_hw_reset(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3367
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3368
	/* Disable interrupts */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3369
	rtl8169_irq_mask_and_ack(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3370
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3371
	/* Reset the chipset */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3372
	RTL_W8(ChipCmd, CmdReset);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3373
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3374
	/* PCI commit */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3375
	RTL_R8(ChipCmd);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3376
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3377
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3378
static void rtl_set_rx_tx_config_registers(struct rtl8169_private *tp)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3379
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3380
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3381
	u32 cfg = rtl8169_rx_config;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3382
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3383
	cfg |= (RTL_R32(RxConfig) & rtl_chip_info[tp->chipset].RxConfigMask);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3384
	RTL_W32(RxConfig, cfg);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3385
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3386
	/* Set DMA burst size and Interframe Gap Time */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3387
	RTL_W32(TxConfig, (TX_DMA_BURST << TxDMAShift) |
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3388
		(InterFrameGap << TxInterFrameGapShift));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3389
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3390
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3391
static void rtl_hw_start(struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3392
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3393
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3394
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3395
	unsigned int i;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3396
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3397
	/* Soft reset the chip. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3398
	RTL_W8(ChipCmd, CmdReset);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3399
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3400
	/* Check that the chip has finished the reset. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3401
	for (i = 0; i < 100; i++) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3402
		if ((RTL_R8(ChipCmd) & CmdReset) == 0)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3403
			break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3404
		msleep_interruptible(1);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3405
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3406
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3407
	tp->hw_start(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3408
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3409
	if (!tp->ecdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3410
		netif_start_queue(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3411
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3412
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3413
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3414
static void rtl_set_rx_tx_desc_registers(struct rtl8169_private *tp,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3415
					 void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3416
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3417
	/*
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3418
	 * Magic spell: some iop3xx ARM board needs the TxDescAddrHigh
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3419
	 * register to be written before TxDescAddrLow to work.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3420
	 * Switching from MMIO to I/O access fixes the issue as well.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3421
	 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3422
	RTL_W32(TxDescStartAddrHigh, ((u64) tp->TxPhyAddr) >> 32);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3423
	RTL_W32(TxDescStartAddrLow, ((u64) tp->TxPhyAddr) & DMA_BIT_MASK(32));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3424
	RTL_W32(RxDescAddrHigh, ((u64) tp->RxPhyAddr) >> 32);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3425
	RTL_W32(RxDescAddrLow, ((u64) tp->RxPhyAddr) & DMA_BIT_MASK(32));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3426
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3427
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3428
static u16 rtl_rw_cpluscmd(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3429
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3430
	u16 cmd;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3431
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3432
	cmd = RTL_R16(CPlusCmd);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3433
	RTL_W16(CPlusCmd, cmd);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3434
	return cmd;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3435
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3436
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3437
static void rtl_set_rx_max_size(void __iomem *ioaddr, unsigned int rx_buf_sz)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3438
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3439
	/* Low hurts. Let's disable the filtering. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3440
	RTL_W16(RxMaxSize, rx_buf_sz + 1);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3441
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3442
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3443
static void rtl8169_set_magic_reg(void __iomem *ioaddr, unsigned mac_version)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3444
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3445
	static const struct {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3446
		u32 mac_version;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3447
		u32 clk;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3448
		u32 val;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3449
	} cfg2_info [] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3450
		{ RTL_GIGA_MAC_VER_05, PCI_Clock_33MHz, 0x000fff00 }, // 8110SCd
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3451
		{ RTL_GIGA_MAC_VER_05, PCI_Clock_66MHz, 0x000fffff },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3452
		{ RTL_GIGA_MAC_VER_06, PCI_Clock_33MHz, 0x00ffff00 }, // 8110SCe
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3453
		{ RTL_GIGA_MAC_VER_06, PCI_Clock_66MHz, 0x00ffffff }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3454
	}, *p = cfg2_info;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3455
	unsigned int i;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3456
	u32 clk;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3457
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3458
	clk = RTL_R8(Config2) & PCI_Clock_66MHz;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3459
	for (i = 0; i < ARRAY_SIZE(cfg2_info); i++, p++) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3460
		if ((p->mac_version == mac_version) && (p->clk == clk)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3461
			RTL_W32(0x7c, p->val);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3462
			break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3463
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3464
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3465
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3466
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3467
static void rtl_hw_start_8169(struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3468
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3469
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3470
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3471
	struct pci_dev *pdev = tp->pci_dev;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3472
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3473
	if (tp->mac_version == RTL_GIGA_MAC_VER_05) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3474
		RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) | PCIMulRW);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3475
		pci_write_config_byte(pdev, PCI_CACHE_LINE_SIZE, 0x08);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3476
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3477
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3478
	RTL_W8(Cfg9346, Cfg9346_Unlock);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3479
	if ((tp->mac_version == RTL_GIGA_MAC_VER_01) ||
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3480
	    (tp->mac_version == RTL_GIGA_MAC_VER_02) ||
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3481
	    (tp->mac_version == RTL_GIGA_MAC_VER_03) ||
cceb9aacf4a6 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_04))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3483
		RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3484
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3485
	RTL_W8(EarlyTxThres, EarlyTxThld);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3486
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3487
	rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3488
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3489
	if ((tp->mac_version == RTL_GIGA_MAC_VER_01) ||
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3490
	    (tp->mac_version == RTL_GIGA_MAC_VER_02) ||
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3491
	    (tp->mac_version == RTL_GIGA_MAC_VER_03) ||
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3492
	    (tp->mac_version == RTL_GIGA_MAC_VER_04))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3493
		rtl_set_rx_tx_config_registers(tp);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3494
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3495
	tp->cp_cmd |= rtl_rw_cpluscmd(ioaddr) | PCIMulRW;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3496
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3497
	if ((tp->mac_version == RTL_GIGA_MAC_VER_02) ||
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3498
	    (tp->mac_version == RTL_GIGA_MAC_VER_03)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3499
		dprintk("Set MAC Reg C+CR Offset 0xE0. "
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3500
			"Bit-3 and bit-14 MUST be 1\n");
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3501
		tp->cp_cmd |= (1 << 14);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3502
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3503
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3504
	RTL_W16(CPlusCmd, tp->cp_cmd);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3505
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3506
	rtl8169_set_magic_reg(ioaddr, tp->mac_version);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3507
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3508
	/*
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3509
	 * Undocumented corner. Supposedly:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3510
	 * (TxTimer << 12) | (TxPackets << 8) | (RxTimer << 4) | RxPackets
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3511
	 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3512
	RTL_W16(IntrMitigate, 0x0000);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3513
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3514
	rtl_set_rx_tx_desc_registers(tp, ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3515
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3516
	if ((tp->mac_version != RTL_GIGA_MAC_VER_01) &&
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3517
	    (tp->mac_version != RTL_GIGA_MAC_VER_02) &&
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3518
	    (tp->mac_version != RTL_GIGA_MAC_VER_03) &&
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3519
	    (tp->mac_version != RTL_GIGA_MAC_VER_04)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3520
		RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3521
		rtl_set_rx_tx_config_registers(tp);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3522
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3523
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3524
	RTL_W8(Cfg9346, Cfg9346_Lock);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3525
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3526
	/* Initially a 10 us delay. Turned it into a PCI commit. - FR */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3527
	RTL_R8(IntrMask);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3528
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3529
	RTL_W32(RxMissed, 0);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3530
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3531
	rtl_set_rx_mode(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3532
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3533
	/* no early-rx interrupts */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3534
	RTL_W16(MultiIntr, RTL_R16(MultiIntr) & 0xF000);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3535
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3536
	/* Enable all known interrupts by setting the interrupt mask. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3537
	if (!tp->ecdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3538
		RTL_W16(IntrMask, tp->intr_event);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3539
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3540
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3541
static void rtl_tx_performance_tweak(struct pci_dev *pdev, u16 force)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3542
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3543
	struct net_device *dev = pci_get_drvdata(pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3544
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3545
	int cap = tp->pcie_cap;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3546
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3547
	if (cap) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3548
		u16 ctl;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3549
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3550
		pci_read_config_word(pdev, cap + PCI_EXP_DEVCTL, &ctl);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3551
		ctl = (ctl & ~PCI_EXP_DEVCTL_READRQ) | force;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3552
		pci_write_config_word(pdev, cap + PCI_EXP_DEVCTL, ctl);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3553
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3554
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3555
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3556
static void rtl_csi_access_enable(void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3557
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3558
	u32 csi;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3559
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3560
	csi = rtl_csi_read(ioaddr, 0x070c) & 0x00ffffff;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3561
	rtl_csi_write(ioaddr, 0x070c, csi | 0x27000000);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3562
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3563
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3564
struct ephy_info {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3565
	unsigned int offset;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3566
	u16 mask;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3567
	u16 bits;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3568
};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3569
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3570
static void rtl_ephy_init(void __iomem *ioaddr, const struct ephy_info *e, int len)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3571
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3572
	u16 w;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3573
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3574
	while (len-- > 0) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3575
		w = (rtl_ephy_read(ioaddr, e->offset) & ~e->mask) | e->bits;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3576
		rtl_ephy_write(ioaddr, e->offset, w);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3577
		e++;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3578
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3579
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3580
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3581
static void rtl_disable_clock_request(struct pci_dev *pdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3582
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3583
	struct net_device *dev = pci_get_drvdata(pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3584
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3585
	int cap = tp->pcie_cap;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3586
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3587
	if (cap) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3588
		u16 ctl;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3589
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3590
		pci_read_config_word(pdev, cap + PCI_EXP_LNKCTL, &ctl);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3591
		ctl &= ~PCI_EXP_LNKCTL_CLKREQ_EN;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3592
		pci_write_config_word(pdev, cap + PCI_EXP_LNKCTL, ctl);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3593
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3594
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3595
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3596
#define R8168_CPCMD_QUIRK_MASK (\
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3597
	EnableBist | \
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3598
	Mac_dbgo_oe | \
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3599
	Force_half_dup | \
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3600
	Force_rxflow_en | \
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3601
	Force_txflow_en | \
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3602
	Cxpl_dbg_sel | \
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3603
	ASF | \
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3604
	PktCntrDisable | \
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3605
	Mac_dbgo_sel)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3606
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3607
static void rtl_hw_start_8168bb(void __iomem *ioaddr, struct pci_dev *pdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3608
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3609
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3610
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3611
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3612
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3613
	rtl_tx_performance_tweak(pdev,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3614
		(0x5 << MAX_READ_REQUEST_SHIFT) | PCI_EXP_DEVCTL_NOSNOOP_EN);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3615
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3616
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3617
static void rtl_hw_start_8168bef(void __iomem *ioaddr, struct pci_dev *pdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3618
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3619
	rtl_hw_start_8168bb(ioaddr, pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3620
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3621
	RTL_W8(EarlyTxThres, EarlyTxThld);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3622
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3623
	RTL_W8(Config4, RTL_R8(Config4) & ~(1 << 0));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3624
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3625
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3626
static void __rtl_hw_start_8168cp(void __iomem *ioaddr, struct pci_dev *pdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3627
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3628
	RTL_W8(Config1, RTL_R8(Config1) | Speed_down);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3629
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3630
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3631
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3632
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3633
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3634
	rtl_disable_clock_request(pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3635
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3636
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3637
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3638
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3639
static void rtl_hw_start_8168cp_1(void __iomem *ioaddr, struct pci_dev *pdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3640
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3641
	static const struct ephy_info e_info_8168cp[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3642
		{ 0x01, 0,	0x0001 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3643
		{ 0x02, 0x0800,	0x1000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3644
		{ 0x03, 0,	0x0042 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3645
		{ 0x06, 0x0080,	0x0000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3646
		{ 0x07, 0,	0x2000 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3647
	};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3648
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3649
	rtl_csi_access_enable(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3650
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3651
	rtl_ephy_init(ioaddr, e_info_8168cp, ARRAY_SIZE(e_info_8168cp));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3652
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3653
	__rtl_hw_start_8168cp(ioaddr, pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3654
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3655
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3656
static void rtl_hw_start_8168cp_2(void __iomem *ioaddr, struct pci_dev *pdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3657
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3658
	rtl_csi_access_enable(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3659
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3660
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3661
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3662
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3663
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3664
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3665
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3666
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3667
static void rtl_hw_start_8168cp_3(void __iomem *ioaddr, struct pci_dev *pdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3668
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3669
	rtl_csi_access_enable(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3670
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3671
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3672
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3673
	/* Magic. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3674
	RTL_W8(DBG_REG, 0x20);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3675
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3676
	RTL_W8(EarlyTxThres, EarlyTxThld);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3677
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3678
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3679
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3680
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3681
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3682
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3683
static void rtl_hw_start_8168c_1(void __iomem *ioaddr, struct pci_dev *pdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3684
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3685
	static const struct ephy_info e_info_8168c_1[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3686
		{ 0x02, 0x0800,	0x1000 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3687
		{ 0x03, 0,	0x0002 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3688
		{ 0x06, 0x0080,	0x0000 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3689
	};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3690
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3691
	rtl_csi_access_enable(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3692
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3693
	RTL_W8(DBG_REG, 0x06 | FIX_NAK_1 | FIX_NAK_2);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3694
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3695
	rtl_ephy_init(ioaddr, e_info_8168c_1, ARRAY_SIZE(e_info_8168c_1));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3696
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3697
	__rtl_hw_start_8168cp(ioaddr, pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3698
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3699
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3700
static void rtl_hw_start_8168c_2(void __iomem *ioaddr, struct pci_dev *pdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3701
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3702
	static const struct ephy_info e_info_8168c_2[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3703
		{ 0x01, 0,	0x0001 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3704
		{ 0x03, 0x0400,	0x0220 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3705
	};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3706
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3707
	rtl_csi_access_enable(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3708
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3709
	rtl_ephy_init(ioaddr, e_info_8168c_2, ARRAY_SIZE(e_info_8168c_2));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3710
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3711
	__rtl_hw_start_8168cp(ioaddr, pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3712
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3713
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3714
static void rtl_hw_start_8168c_3(void __iomem *ioaddr, struct pci_dev *pdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3715
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3716
	rtl_hw_start_8168c_2(ioaddr, pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3717
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3718
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3719
static void rtl_hw_start_8168c_4(void __iomem *ioaddr, struct pci_dev *pdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3720
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3721
	rtl_csi_access_enable(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3722
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3723
	__rtl_hw_start_8168cp(ioaddr, pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3724
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3725
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3726
static void rtl_hw_start_8168d(void __iomem *ioaddr, struct pci_dev *pdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3727
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3728
	rtl_csi_access_enable(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3729
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3730
	rtl_disable_clock_request(pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3731
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3732
	RTL_W8(EarlyTxThres, EarlyTxThld);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3733
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3734
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3735
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3736
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R8168_CPCMD_QUIRK_MASK);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3737
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3738
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3739
static void rtl_hw_start_8168(struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3740
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3741
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3742
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3743
	struct pci_dev *pdev = tp->pci_dev;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3744
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3745
	RTL_W8(Cfg9346, Cfg9346_Unlock);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3746
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3747
	RTL_W8(EarlyTxThres, EarlyTxThld);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3748
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3749
	rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3750
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3751
	tp->cp_cmd |= RTL_R16(CPlusCmd) | PktCntrDisable | INTT_1;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3752
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3753
	RTL_W16(CPlusCmd, tp->cp_cmd);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3754
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3755
	RTL_W16(IntrMitigate, 0x5151);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3756
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3757
	/* Work around for RxFIFO overflow. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3758
	if (tp->mac_version == RTL_GIGA_MAC_VER_11) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3759
		tp->intr_event |= RxFIFOOver | PCSTimeout;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3760
		tp->intr_event &= ~RxOverflow;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3761
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3762
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3763
	rtl_set_rx_tx_desc_registers(tp, ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3764
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3765
	rtl_set_rx_mode(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3766
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3767
	RTL_W32(TxConfig, (TX_DMA_BURST << TxDMAShift) |
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3768
		(InterFrameGap << TxInterFrameGapShift));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3769
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3770
	RTL_R8(IntrMask);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3771
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3772
	switch (tp->mac_version) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3773
	case RTL_GIGA_MAC_VER_11:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3774
		rtl_hw_start_8168bb(ioaddr, pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3775
	break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3776
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3777
	case RTL_GIGA_MAC_VER_12:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3778
	case RTL_GIGA_MAC_VER_17:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3779
		rtl_hw_start_8168bef(ioaddr, pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3780
	break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3781
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3782
	case RTL_GIGA_MAC_VER_18:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3783
		rtl_hw_start_8168cp_1(ioaddr, pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3784
	break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3785
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3786
	case RTL_GIGA_MAC_VER_19:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3787
		rtl_hw_start_8168c_1(ioaddr, pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3788
	break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3789
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3790
	case RTL_GIGA_MAC_VER_20:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3791
		rtl_hw_start_8168c_2(ioaddr, pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3792
	break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3793
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3794
	case RTL_GIGA_MAC_VER_21:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3795
		rtl_hw_start_8168c_3(ioaddr, pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3796
	break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3797
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3798
	case RTL_GIGA_MAC_VER_22:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3799
		rtl_hw_start_8168c_4(ioaddr, pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3800
	break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3801
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3802
	case RTL_GIGA_MAC_VER_23:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3803
		rtl_hw_start_8168cp_2(ioaddr, pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3804
	break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3805
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3806
	case RTL_GIGA_MAC_VER_24:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3807
		rtl_hw_start_8168cp_3(ioaddr, pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3808
	break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3809
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3810
	case RTL_GIGA_MAC_VER_25:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3811
	case RTL_GIGA_MAC_VER_26:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3812
	case RTL_GIGA_MAC_VER_27:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3813
		rtl_hw_start_8168d(ioaddr, pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3814
	break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3815
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3816
	default:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3817
		printk(KERN_ERR PFX "%s: unknown chipset (mac_version = %d).\n",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3818
			dev->name, tp->mac_version);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3819
	break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3820
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3821
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3822
	RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3823
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3824
	RTL_W8(Cfg9346, Cfg9346_Lock);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3825
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3826
	RTL_W16(MultiIntr, RTL_R16(MultiIntr) & 0xF000);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3827
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3828
	if (!tp->ecdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3829
		RTL_W16(IntrMask, tp->intr_event);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3830
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3831
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3832
#define R810X_CPCMD_QUIRK_MASK (\
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3833
	EnableBist | \
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3834
	Mac_dbgo_oe | \
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3835
	Force_half_dup | \
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3836
	Force_rxflow_en | \
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3837
	Force_txflow_en | \
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3838
	Cxpl_dbg_sel | \
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3839
	ASF | \
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3840
	PktCntrDisable | \
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3841
	PCIDAC | \
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3842
	PCIMulRW)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3843
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3844
static void rtl_hw_start_8102e_1(void __iomem *ioaddr, struct pci_dev *pdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3845
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3846
	static const struct ephy_info e_info_8102e_1[] = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3847
		{ 0x01,	0, 0x6e65 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3848
		{ 0x02,	0, 0x091f },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3849
		{ 0x03,	0, 0xc2f9 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3850
		{ 0x06,	0, 0xafb5 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3851
		{ 0x07,	0, 0x0e00 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3852
		{ 0x19,	0, 0xec80 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3853
		{ 0x01,	0, 0x2e65 },
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3854
		{ 0x01,	0, 0x6e65 }
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3855
	};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3856
	u8 cfg1;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3857
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3858
	rtl_csi_access_enable(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3859
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3860
	RTL_W8(DBG_REG, FIX_NAK_1);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3861
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3862
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3863
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3864
	RTL_W8(Config1,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3865
	       LEDS1 | LEDS0 | Speed_down | MEMMAP | IOMAP | VPD | PMEnable);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3866
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3867
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3868
	cfg1 = RTL_R8(Config1);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3869
	if ((cfg1 & LEDS0) && (cfg1 & LEDS1))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3870
		RTL_W8(Config1, cfg1 & ~LEDS0);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3871
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3872
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R810X_CPCMD_QUIRK_MASK);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3873
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3874
	rtl_ephy_init(ioaddr, e_info_8102e_1, ARRAY_SIZE(e_info_8102e_1));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3875
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3876
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3877
static void rtl_hw_start_8102e_2(void __iomem *ioaddr, struct pci_dev *pdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3878
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3879
	rtl_csi_access_enable(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3880
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3881
	rtl_tx_performance_tweak(pdev, 0x5 << MAX_READ_REQUEST_SHIFT);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3882
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3883
	RTL_W8(Config1, MEMMAP | IOMAP | VPD | PMEnable);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3884
	RTL_W8(Config3, RTL_R8(Config3) & ~Beacon_en);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3885
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3886
	RTL_W16(CPlusCmd, RTL_R16(CPlusCmd) & ~R810X_CPCMD_QUIRK_MASK);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3887
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3888
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3889
static void rtl_hw_start_8102e_3(void __iomem *ioaddr, struct pci_dev *pdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3890
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3891
	rtl_hw_start_8102e_2(ioaddr, pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3892
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3893
	rtl_ephy_write(ioaddr, 0x03, 0xc2f9);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3894
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3895
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3896
static void rtl_hw_start_8101(struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3897
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3898
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3899
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3900
	struct pci_dev *pdev = tp->pci_dev;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3901
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3902
	if ((tp->mac_version == RTL_GIGA_MAC_VER_13) ||
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3903
	    (tp->mac_version == RTL_GIGA_MAC_VER_16)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3904
		int cap = tp->pcie_cap;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3905
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3906
		if (cap) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3907
			pci_write_config_word(pdev, cap + PCI_EXP_DEVCTL,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3908
					      PCI_EXP_DEVCTL_NOSNOOP_EN);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3909
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3910
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3911
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3912
	switch (tp->mac_version) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3913
	case RTL_GIGA_MAC_VER_07:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3914
		rtl_hw_start_8102e_1(ioaddr, pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3915
		break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3916
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3917
	case RTL_GIGA_MAC_VER_08:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3918
		rtl_hw_start_8102e_3(ioaddr, pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3919
		break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3920
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3921
	case RTL_GIGA_MAC_VER_09:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3922
		rtl_hw_start_8102e_2(ioaddr, pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3923
		break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3924
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3925
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3926
	RTL_W8(Cfg9346, Cfg9346_Unlock);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3927
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3928
	RTL_W8(EarlyTxThres, EarlyTxThld);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3929
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3930
	rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3931
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3932
	tp->cp_cmd |= rtl_rw_cpluscmd(ioaddr) | PCIMulRW;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3933
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3934
	RTL_W16(CPlusCmd, tp->cp_cmd);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3935
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3936
	RTL_W16(IntrMitigate, 0x0000);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3937
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3938
	rtl_set_rx_tx_desc_registers(tp, ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3939
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3940
	RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3941
	rtl_set_rx_tx_config_registers(tp);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3942
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3943
	RTL_W8(Cfg9346, Cfg9346_Lock);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3944
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3945
	RTL_R8(IntrMask);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3946
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3947
	rtl_set_rx_mode(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3948
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3949
	RTL_W8(ChipCmd, CmdTxEnb | CmdRxEnb);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3950
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3951
	RTL_W16(MultiIntr, RTL_R16(MultiIntr) & 0xf000);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3952
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3953
	if (!tp->ecdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3954
		RTL_W16(IntrMask, tp->intr_event);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3955
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3956
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3957
static int rtl8169_change_mtu(struct net_device *dev, int new_mtu)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3958
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3959
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3960
	int ret = 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3961
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3962
	if (new_mtu < ETH_ZLEN || new_mtu > SafeMtu)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3963
		return -EINVAL;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3964
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3965
	dev->mtu = new_mtu;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3966
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3967
	if (!netif_running(dev))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3968
		goto out;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3969
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3970
	rtl8169_down(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3971
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3972
	rtl8169_set_rxbufsize(tp, dev->mtu);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3973
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3974
	ret = rtl8169_init_ring(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3975
	if (ret < 0)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3976
		goto out;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3977
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3978
	napi_enable(&tp->napi);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3979
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3980
	rtl_hw_start(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3981
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3982
	rtl8169_request_timer(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3983
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3984
out:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3985
	return ret;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3986
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3987
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3988
static inline void rtl8169_make_unusable_by_asic(struct RxDesc *desc)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3989
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3990
	desc->addr = cpu_to_le64(0x0badbadbadbadbadull);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3991
	desc->opts1 &= ~cpu_to_le32(DescOwn | RsvdMask);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3992
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3993
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3994
static void rtl8169_free_rx_skb(struct rtl8169_private *tp,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3995
				struct sk_buff **sk_buff, struct RxDesc *desc)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3996
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3997
	struct pci_dev *pdev = tp->pci_dev;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3998
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  3999
	pci_unmap_single(pdev, le64_to_cpu(desc->addr), tp->rx_buf_sz,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4000
			 PCI_DMA_FROMDEVICE);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4001
	dev_kfree_skb(*sk_buff);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4002
	*sk_buff = NULL;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4003
	rtl8169_make_unusable_by_asic(desc);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4004
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4005
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4006
static inline void rtl8169_mark_to_asic(struct RxDesc *desc, u32 rx_buf_sz)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4007
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4008
	u32 eor = le32_to_cpu(desc->opts1) & RingEnd;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4009
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4010
	desc->opts1 = cpu_to_le32(DescOwn | eor | rx_buf_sz);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4011
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4012
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4013
static inline void rtl8169_map_to_asic(struct RxDesc *desc, dma_addr_t mapping,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4014
				       u32 rx_buf_sz)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4015
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4016
	desc->addr = cpu_to_le64(mapping);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4017
	wmb();
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4018
	rtl8169_mark_to_asic(desc, rx_buf_sz);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4019
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4020
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4021
static struct sk_buff *rtl8169_alloc_rx_skb(struct pci_dev *pdev,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4022
					    struct net_device *dev,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4023
					    struct RxDesc *desc, int rx_buf_sz,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4024
					    unsigned int align)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4025
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4026
	struct sk_buff *skb;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4027
	dma_addr_t mapping;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4028
	unsigned int pad;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4029
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4030
	pad = align ? align : NET_IP_ALIGN;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4031
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4032
	skb = netdev_alloc_skb(dev, rx_buf_sz + pad);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4033
	if (!skb)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4034
		goto err_out;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4035
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4036
	skb_reserve(skb, align ? ((pad - 1) & (unsigned long)skb->data) : pad);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4037
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4038
	mapping = pci_map_single(pdev, skb->data, rx_buf_sz,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4039
				 PCI_DMA_FROMDEVICE);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4040
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4041
	rtl8169_map_to_asic(desc, mapping, rx_buf_sz);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4042
out:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4043
	return skb;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4044
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4045
err_out:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4046
	rtl8169_make_unusable_by_asic(desc);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4047
	goto out;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4048
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4049
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4050
static void rtl8169_rx_clear(struct rtl8169_private *tp)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4051
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4052
	unsigned int i;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4053
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4054
	for (i = 0; i < NUM_RX_DESC; i++) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4055
		if (tp->Rx_skbuff[i]) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4056
			rtl8169_free_rx_skb(tp, tp->Rx_skbuff + i,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4057
					    tp->RxDescArray + i);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4058
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4059
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4060
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4061
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4062
static u32 rtl8169_rx_fill(struct rtl8169_private *tp, struct net_device *dev,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4063
			   u32 start, u32 end)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4064
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4065
	u32 cur;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4066
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4067
	for (cur = start; end - cur != 0; cur++) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4068
		struct sk_buff *skb;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4069
		unsigned int i = cur % NUM_RX_DESC;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4070
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4071
		WARN_ON((s32)(end - cur) < 0);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4072
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4073
		if (tp->Rx_skbuff[i])
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4074
			continue;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4075
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4076
		skb = rtl8169_alloc_rx_skb(tp->pci_dev, dev,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4077
					   tp->RxDescArray + i,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4078
					   tp->rx_buf_sz, tp->align);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4079
		if (!skb)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4080
			break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4081
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4082
		tp->Rx_skbuff[i] = skb;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4083
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4084
	return cur - start;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4085
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4086
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4087
static inline void rtl8169_mark_as_last_descriptor(struct RxDesc *desc)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4088
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4089
	desc->opts1 |= cpu_to_le32(RingEnd);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4090
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4091
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4092
static void rtl8169_init_ring_indexes(struct rtl8169_private *tp)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4093
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4094
	tp->dirty_tx = tp->dirty_rx = tp->cur_tx = tp->cur_rx = 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4095
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4096
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4097
static int rtl8169_init_ring(struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4098
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4099
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4100
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4101
	rtl8169_init_ring_indexes(tp);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4102
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4103
	memset(tp->tx_skb, 0x0, NUM_TX_DESC * sizeof(struct ring_info));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4104
	memset(tp->Rx_skbuff, 0x0, NUM_RX_DESC * sizeof(struct sk_buff *));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4105
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4106
	if (rtl8169_rx_fill(tp, dev, 0, NUM_RX_DESC) != NUM_RX_DESC)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4107
		goto err_out;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4108
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4109
	rtl8169_mark_as_last_descriptor(tp->RxDescArray + NUM_RX_DESC - 1);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4110
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4111
	return 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4112
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4113
err_out:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4114
	rtl8169_rx_clear(tp);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4115
	return -ENOMEM;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4116
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4117
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4118
static void rtl8169_unmap_tx_skb(struct pci_dev *pdev, struct ring_info *tx_skb,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4119
				 struct TxDesc *desc)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4120
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4121
	unsigned int len = tx_skb->len;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4122
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4123
	pci_unmap_single(pdev, le64_to_cpu(desc->addr), len, PCI_DMA_TODEVICE);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4124
	desc->opts1 = 0x00;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4125
	desc->opts2 = 0x00;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4126
	desc->addr = 0x00;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4127
	tx_skb->len = 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4128
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4129
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4130
static void rtl8169_tx_clear(struct rtl8169_private *tp)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4131
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4132
	unsigned int i;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4133
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4134
	for (i = tp->dirty_tx; i < tp->dirty_tx + NUM_TX_DESC; i++) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4135
		unsigned int entry = i % NUM_TX_DESC;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4136
		struct ring_info *tx_skb = tp->tx_skb + entry;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4137
		unsigned int len = tx_skb->len;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4138
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4139
		if (len) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4140
			struct sk_buff *skb = tx_skb->skb;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4141
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4142
			rtl8169_unmap_tx_skb(tp->pci_dev, tx_skb,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4143
					     tp->TxDescArray + entry);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4144
			if (skb) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4145
				if (!tp->ecdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4146
					dev_kfree_skb(skb);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4147
				tx_skb->skb = NULL;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4148
			}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4149
			tp->dev->stats.tx_dropped++;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4150
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4151
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4152
	tp->cur_tx = tp->dirty_tx = 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4153
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4154
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4155
static void rtl8169_schedule_work(struct net_device *dev, work_func_t task)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4156
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4157
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4158
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4159
	PREPARE_DELAYED_WORK(&tp->task, task);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4160
	schedule_delayed_work(&tp->task, 4);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4161
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4162
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4163
static void rtl8169_wait_for_quiescence(struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4164
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4165
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4166
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4167
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4168
	synchronize_irq(dev->irq);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4169
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4170
	/* Wait for any pending NAPI task to complete */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4171
	napi_disable(&tp->napi);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4172
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4173
	rtl8169_irq_mask_and_ack(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4174
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4175
	tp->intr_mask = 0xffff;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4176
	RTL_W16(IntrMask, tp->intr_event);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4177
	napi_enable(&tp->napi);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4178
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4179
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4180
static void rtl8169_reinit_task(struct work_struct *work)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4181
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4182
	struct rtl8169_private *tp =
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4183
		container_of(work, struct rtl8169_private, task.work);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4184
	struct net_device *dev = tp->dev;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4185
	int ret;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4186
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4187
	rtnl_lock();
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4188
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4189
	if (!netif_running(dev))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4190
		goto out_unlock;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4191
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4192
	rtl8169_wait_for_quiescence(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4193
	rtl8169_close(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4194
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4195
	ret = rtl8169_open(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4196
	if (unlikely(ret < 0)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4197
		if (net_ratelimit() && netif_msg_drv(tp)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4198
			printk(KERN_ERR PFX "%s: reinit failure (status = %d)."
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4199
			       " Rescheduling.\n", dev->name, ret);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4200
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4201
		rtl8169_schedule_work(dev, rtl8169_reinit_task);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4202
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4203
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4204
out_unlock:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4205
	rtnl_unlock();
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4206
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4207
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4208
static void rtl8169_reset_task(struct work_struct *work)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4209
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4210
	struct rtl8169_private *tp =
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4211
		container_of(work, struct rtl8169_private, task.work);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4212
	struct net_device *dev = tp->dev;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4213
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4214
	rtnl_lock();
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4215
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4216
	if (!netif_running(dev))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4217
		goto out_unlock;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4218
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4219
	rtl8169_wait_for_quiescence(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4220
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4221
	rtl8169_rx_interrupt(dev, tp, tp->mmio_addr, ~(u32)0);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4222
	rtl8169_tx_clear(tp);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4223
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4224
	if (tp->dirty_rx == tp->cur_rx) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4225
		rtl8169_init_ring_indexes(tp);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4226
		rtl_hw_start(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4227
		netif_wake_queue(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4228
		rtl8169_check_link_status(dev, tp, tp->mmio_addr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4229
	} else {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4230
		if (net_ratelimit() && netif_msg_intr(tp)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4231
			printk(KERN_EMERG PFX "%s: Rx buffers shortage\n",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4232
			       dev->name);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4233
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4234
		rtl8169_schedule_work(dev, rtl8169_reset_task);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4235
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4236
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4237
out_unlock:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4238
	rtnl_unlock();
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4239
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4240
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4241
static void rtl8169_tx_timeout(struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4242
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4243
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4244
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4245
	if (tp->ecdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4246
		return;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4247
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4248
	rtl8169_hw_reset(tp->mmio_addr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4249
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4250
	/* Let's wait a bit while any (async) irq lands on */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4251
	rtl8169_schedule_work(dev, rtl8169_reset_task);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4252
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4253
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4254
static int rtl8169_xmit_frags(struct rtl8169_private *tp, struct sk_buff *skb,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4255
			      u32 opts1)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4256
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4257
	struct skb_shared_info *info = skb_shinfo(skb);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4258
	unsigned int cur_frag, entry;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4259
	struct TxDesc * uninitialized_var(txd);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4260
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4261
	entry = tp->cur_tx;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4262
	for (cur_frag = 0; cur_frag < info->nr_frags; cur_frag++) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4263
		skb_frag_t *frag = info->frags + cur_frag;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4264
		dma_addr_t mapping;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4265
		u32 status, len;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4266
		void *addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4267
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4268
		entry = (entry + 1) % NUM_TX_DESC;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4269
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4270
		txd = tp->TxDescArray + entry;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4271
		len = frag->size;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4272
		addr = ((void *) page_address(frag->page)) + frag->page_offset;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4273
		mapping = pci_map_single(tp->pci_dev, addr, len, PCI_DMA_TODEVICE);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4274
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4275
		/* anti gcc 2.95.3 bugware (sic) */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4276
		status = opts1 | len | (RingEnd * !((entry + 1) % NUM_TX_DESC));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4277
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4278
		txd->opts1 = cpu_to_le32(status);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4279
		txd->addr = cpu_to_le64(mapping);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4280
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4281
		tp->tx_skb[entry].len = len;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4282
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4283
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4284
	if (cur_frag) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4285
		tp->tx_skb[entry].skb = skb;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4286
		txd->opts1 |= cpu_to_le32(LastFrag);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4287
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4288
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4289
	return cur_frag;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4290
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4291
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4292
static inline u32 rtl8169_tso_csum(struct sk_buff *skb, struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4293
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4294
	if (dev->features & NETIF_F_TSO) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4295
		u32 mss = skb_shinfo(skb)->gso_size;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4296
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4297
		if (mss)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4298
			return LargeSend | ((mss & MSSMask) << MSSShift);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4299
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4300
	if (skb->ip_summed == CHECKSUM_PARTIAL) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4301
		const struct iphdr *ip = ip_hdr(skb);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4302
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4303
		if (ip->protocol == IPPROTO_TCP)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4304
			return IPCS | TCPCS;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4305
		else if (ip->protocol == IPPROTO_UDP)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4306
			return IPCS | UDPCS;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4307
		WARN_ON(1);	/* we need a WARN() */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4308
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4309
	return 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4310
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4311
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4312
static netdev_tx_t rtl8169_start_xmit(struct sk_buff *skb,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4313
				      struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4314
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4315
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4316
	unsigned int frags, entry = tp->cur_tx % NUM_TX_DESC;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4317
	struct TxDesc *txd = tp->TxDescArray + entry;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4318
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4319
	dma_addr_t mapping;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4320
	u32 status, len;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4321
	u32 opts1;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4322
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4323
	if (unlikely(TX_BUFFS_AVAIL(tp) < skb_shinfo(skb)->nr_frags)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4324
		if (netif_msg_drv(tp)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4325
			printk(KERN_ERR
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4326
			       "%s: BUG! Tx Ring full when queue awake!\n",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4327
			       dev->name);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4328
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4329
		goto err_stop;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4330
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4331
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4332
	if (unlikely(le32_to_cpu(txd->opts1) & DescOwn))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4333
		goto err_stop;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4334
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4335
	opts1 = DescOwn | rtl8169_tso_csum(skb, dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4336
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4337
	frags = rtl8169_xmit_frags(tp, skb, opts1);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4338
	if (frags) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4339
		len = skb_headlen(skb);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4340
		opts1 |= FirstFrag;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4341
	} else {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4342
		len = skb->len;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4343
		opts1 |= FirstFrag | LastFrag;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4344
		tp->tx_skb[entry].skb = skb;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4345
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4346
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4347
	mapping = pci_map_single(tp->pci_dev, skb->data, len, PCI_DMA_TODEVICE);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4348
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4349
	tp->tx_skb[entry].len = len;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4350
	txd->addr = cpu_to_le64(mapping);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4351
	txd->opts2 = cpu_to_le32(rtl8169_tx_vlan_tag(tp, skb));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4352
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4353
	wmb();
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4354
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4355
	/* anti gcc 2.95.3 bugware (sic) */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4356
	status = opts1 | len | (RingEnd * !((entry + 1) % NUM_TX_DESC));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4357
	txd->opts1 = cpu_to_le32(status);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4358
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4359
	tp->cur_tx += frags + 1;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4360
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4361
	smp_wmb();
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4362
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4363
	RTL_W8(TxPoll, NPQ);	/* set polling bit */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4364
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4365
	if (!tp->ecdev) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4366
		if (TX_BUFFS_AVAIL(tp) < MAX_SKB_FRAGS) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4367
			netif_stop_queue(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4368
			smp_rmb();
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4369
			if (TX_BUFFS_AVAIL(tp) >= MAX_SKB_FRAGS)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4370
				netif_wake_queue(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4371
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4372
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4373
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4374
	return NETDEV_TX_OK;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4375
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4376
err_stop:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4377
	if (!tp->ecdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4378
		netif_stop_queue(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4379
	dev->stats.tx_dropped++;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4380
	return NETDEV_TX_BUSY;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4381
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4382
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4383
static void rtl8169_pcierr_interrupt(struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4384
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4385
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4386
	struct pci_dev *pdev = tp->pci_dev;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4387
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4388
	u16 pci_status, pci_cmd;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4389
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4390
	pci_read_config_word(pdev, PCI_COMMAND, &pci_cmd);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4391
	pci_read_config_word(pdev, PCI_STATUS, &pci_status);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4392
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4393
	if (netif_msg_intr(tp)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4394
		printk(KERN_ERR
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4395
		       "%s: PCI error (cmd = 0x%04x, status = 0x%04x).\n",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4396
		       dev->name, pci_cmd, pci_status);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4397
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4398
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4399
	/*
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4400
	 * The recovery sequence below admits a very elaborated explanation:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4401
	 * - it seems to work;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4402
	 * - I did not see what else could be done;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4403
	 * - it makes iop3xx happy.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4404
	 *
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4405
	 * Feel free to adjust to your needs.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4406
	 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4407
	if (pdev->broken_parity_status)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4408
		pci_cmd &= ~PCI_COMMAND_PARITY;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4409
	else
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4410
		pci_cmd |= PCI_COMMAND_SERR | PCI_COMMAND_PARITY;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4411
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4412
	pci_write_config_word(pdev, PCI_COMMAND, pci_cmd);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4413
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4414
	pci_write_config_word(pdev, PCI_STATUS,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4415
		pci_status & (PCI_STATUS_DETECTED_PARITY |
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4416
		PCI_STATUS_SIG_SYSTEM_ERROR | PCI_STATUS_REC_MASTER_ABORT |
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4417
		PCI_STATUS_REC_TARGET_ABORT | PCI_STATUS_SIG_TARGET_ABORT));
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4418
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4419
	/* The infamous DAC f*ckup only happens at boot time */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4420
	if ((tp->cp_cmd & PCIDAC) && !tp->dirty_rx && !tp->cur_rx) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4421
		if (netif_msg_intr(tp))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4422
			printk(KERN_INFO "%s: disabling PCI DAC.\n", dev->name);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4423
		tp->cp_cmd &= ~PCIDAC;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4424
		RTL_W16(CPlusCmd, tp->cp_cmd);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4425
		dev->features &= ~NETIF_F_HIGHDMA;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4426
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4427
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4428
	rtl8169_hw_reset(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4429
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4430
	rtl8169_schedule_work(dev, rtl8169_reinit_task);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4431
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4432
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4433
static void rtl8169_tx_interrupt(struct net_device *dev,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4434
				 struct rtl8169_private *tp,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4435
				 void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4436
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4437
	unsigned int dirty_tx, tx_left;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4438
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4439
	dirty_tx = tp->dirty_tx;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4440
	smp_rmb();
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4441
	tx_left = tp->cur_tx - dirty_tx;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4442
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4443
	while (tx_left > 0) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4444
		unsigned int entry = dirty_tx % NUM_TX_DESC;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4445
		struct ring_info *tx_skb = tp->tx_skb + entry;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4446
		u32 len = tx_skb->len;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4447
		u32 status;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4448
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4449
		rmb();
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4450
		status = le32_to_cpu(tp->TxDescArray[entry].opts1);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4451
		if (status & DescOwn)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4452
			break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4453
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4454
		dev->stats.tx_bytes += len;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4455
		dev->stats.tx_packets++;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4456
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4457
		rtl8169_unmap_tx_skb(tp->pci_dev, tx_skb, tp->TxDescArray + entry);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4458
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4459
		if (status & LastFrag) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4460
			if (!tp->ecdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4461
				dev_kfree_skb(tx_skb->skb);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4462
			tx_skb->skb = NULL;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4463
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4464
		dirty_tx++;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4465
		tx_left--;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4466
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4467
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4468
	if (tp->dirty_tx != dirty_tx) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4469
		tp->dirty_tx = dirty_tx;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4470
		smp_wmb();
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4471
		if (!tp->ecdev && netif_queue_stopped(dev) &&
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4472
		    (TX_BUFFS_AVAIL(tp) >= MAX_SKB_FRAGS)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4473
			netif_wake_queue(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4474
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4475
		/*
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4476
		 * 8168 hack: TxPoll requests are lost when the Tx packets are
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4477
		 * too close. Let's kick an extra TxPoll request when a burst
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4478
		 * of start_xmit activity is detected (if it is not detected,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4479
		 * it is slow enough). -- FR
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4480
		 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4481
		smp_rmb();
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4482
		if (tp->cur_tx != dirty_tx)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4483
			RTL_W8(TxPoll, NPQ);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4484
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4485
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4486
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4487
static inline int rtl8169_fragmented_frame(u32 status)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4488
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4489
	return (status & (FirstFrag | LastFrag)) != (FirstFrag | LastFrag);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4490
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4491
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4492
static inline void rtl8169_rx_csum(struct sk_buff *skb, struct RxDesc *desc)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4493
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4494
	u32 opts1 = le32_to_cpu(desc->opts1);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4495
	u32 status = opts1 & RxProtoMask;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4496
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4497
	if (((status == RxProtoTCP) && !(opts1 & TCPFail)) ||
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4498
	    ((status == RxProtoUDP) && !(opts1 & UDPFail)) ||
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4499
	    ((status == RxProtoIP) && !(opts1 & IPFail)))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4500
		skb->ip_summed = CHECKSUM_UNNECESSARY;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4501
	else
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4502
		skb->ip_summed = CHECKSUM_NONE;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4503
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4504
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4505
static inline bool rtl8169_try_rx_copy(struct sk_buff **sk_buff,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4506
				       struct rtl8169_private *tp, int pkt_size,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4507
				       dma_addr_t addr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4508
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4509
	struct sk_buff *skb;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4510
	bool done = false;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4511
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4512
	if (pkt_size >= rx_copybreak)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4513
		goto out;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4514
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4515
	skb = netdev_alloc_skb_ip_align(tp->dev, pkt_size);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4516
	if (!skb)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4517
		goto out;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4518
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4519
	pci_dma_sync_single_for_cpu(tp->pci_dev, addr, pkt_size,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4520
				    PCI_DMA_FROMDEVICE);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4521
	skb_copy_from_linear_data(*sk_buff, skb->data, pkt_size);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4522
	*sk_buff = skb;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4523
	done = true;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4524
out:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4525
	return done;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4526
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4527
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4528
static int rtl8169_rx_interrupt(struct net_device *dev,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4529
				struct rtl8169_private *tp,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4530
				void __iomem *ioaddr, u32 budget)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4531
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4532
	unsigned int cur_rx, rx_left;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4533
	unsigned int delta, count;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4534
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4535
	cur_rx = tp->cur_rx;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4536
	rx_left = NUM_RX_DESC + tp->dirty_rx - cur_rx;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4537
	rx_left = min(rx_left, budget);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4538
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4539
	for (; rx_left > 0; rx_left--, cur_rx++) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4540
		unsigned int entry = cur_rx % NUM_RX_DESC;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4541
		struct RxDesc *desc = tp->RxDescArray + entry;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4542
		u32 status;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4543
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4544
		rmb();
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4545
		status = le32_to_cpu(desc->opts1);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4546
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4547
		if (status & DescOwn)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4548
			break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4549
		if (unlikely(status & RxRES)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4550
			if (netif_msg_rx_err(tp)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4551
				printk(KERN_INFO
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4552
				       "%s: Rx ERROR. status = %08x\n",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4553
				       dev->name, status);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4554
			}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4555
			dev->stats.rx_errors++;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4556
			if (status & (RxRWT | RxRUNT))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4557
				dev->stats.rx_length_errors++;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4558
			if (status & RxCRC)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4559
				dev->stats.rx_crc_errors++;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4560
			if (status & RxFOVF) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4561
				if (!tp->ecdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4562
					rtl8169_schedule_work(dev, rtl8169_reset_task);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4563
				dev->stats.rx_fifo_errors++;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4564
			}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4565
			rtl8169_mark_to_asic(desc, tp->rx_buf_sz);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4566
		} else {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4567
			struct sk_buff *skb = tp->Rx_skbuff[entry];
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4568
			dma_addr_t addr = le64_to_cpu(desc->addr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4569
			int pkt_size = (status & 0x00001FFF) - 4;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4570
			struct pci_dev *pdev = tp->pci_dev;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4571
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4572
			/*
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4573
			 * The driver does not support incoming fragmented
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4574
			 * frames. They are seen as a symptom of over-mtu
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4575
			 * sized frames.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4576
			 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4577
			if (unlikely(rtl8169_fragmented_frame(status))) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4578
				dev->stats.rx_dropped++;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4579
				dev->stats.rx_length_errors++;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4580
				rtl8169_mark_to_asic(desc, tp->rx_buf_sz);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4581
				continue;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4582
			}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4583
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4584
			rtl8169_rx_csum(skb, desc);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4585
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4586
			if (tp->ecdev) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4587
				pci_dma_sync_single_for_cpu(pdev, addr, pkt_size,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4588
						PCI_DMA_FROMDEVICE);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4589
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4590
				ecdev_receive(tp->ecdev, skb->data, pkt_size);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4591
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4592
				pci_dma_sync_single_for_device(pdev, addr,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4593
					pkt_size, PCI_DMA_FROMDEVICE);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4594
				rtl8169_mark_to_asic(desc, tp->rx_buf_sz);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4595
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4596
				// No need to detect link status as
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4597
				// long as frames are received: Reset watchdog.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4598
				tp->ec_watchdog_jiffies = jiffies;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4599
			} else {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4600
				if (rtl8169_try_rx_copy(&skb, tp, pkt_size, addr)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4601
					pci_dma_sync_single_for_device(pdev, addr,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4602
						pkt_size, PCI_DMA_FROMDEVICE);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4603
					rtl8169_mark_to_asic(desc, tp->rx_buf_sz);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4604
				} else {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4605
					pci_unmap_single(pdev, addr, tp->rx_buf_sz,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4606
							 PCI_DMA_FROMDEVICE);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4607
					tp->Rx_skbuff[entry] = NULL;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4608
				}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4609
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4610
				skb_put(skb, pkt_size);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4611
				skb->protocol = eth_type_trans(skb, dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4612
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4613
				if (rtl8169_rx_vlan_skb(tp, desc, skb) < 0)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4614
					netif_receive_skb(skb);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4615
			}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4616
			dev->stats.rx_bytes += pkt_size;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4617
			dev->stats.rx_packets++;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4618
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4619
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4620
		/* Work around for AMD plateform. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4621
		if ((desc->opts2 & cpu_to_le32(0xfffe000)) &&
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4622
		    (tp->mac_version == RTL_GIGA_MAC_VER_05)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4623
			desc->opts2 = 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4624
			cur_rx++;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4625
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4626
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4627
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4628
	count = cur_rx - tp->cur_rx;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4629
	tp->cur_rx = cur_rx;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4630
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4631
	if (tp->ecdev) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4632
		/* descriptors are cleaned up immediately. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4633
		tp->dirty_rx = tp->cur_rx;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4634
	} else {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4635
		delta = rtl8169_rx_fill(tp, dev, tp->dirty_rx, tp->cur_rx);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4636
		if (!delta && count && netif_msg_intr(tp))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4637
			printk(KERN_INFO "%s: no Rx buffer allocated\n", dev->name);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4638
		tp->dirty_rx += delta;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4639
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4640
		/*
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4641
		 * FIXME: until there is periodic timer to try and refill the ring,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4642
		 * a temporary shortage may definitely kill the Rx process.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4643
		 * - disable the asic to try and avoid an overflow and kick it again
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4644
		 *   after refill ?
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4645
		 * - how do others driver handle this condition (Uh oh...).
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4646
		 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4647
		if ((tp->dirty_rx + NUM_RX_DESC == tp->cur_rx) && netif_msg_intr(tp))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4648
			printk(KERN_EMERG "%s: Rx buffers exhausted\n", dev->name);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4649
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4650
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4651
	return count;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4652
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4653
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4654
static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4655
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4656
	struct net_device *dev = dev_instance;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4657
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4658
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4659
	int handled = 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4660
	int status;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4661
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4662
	/* loop handling interrupts until we have no new ones or
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4663
	 * we hit a invalid/hotplug case.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4664
	 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4665
	status = RTL_R16(IntrStatus);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4666
	while (status && status != 0xffff) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4667
		handled = 1;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4668
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4669
		/* Handle all of the error cases first. These will reset
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4670
		 * the chip, so just exit the loop.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4671
		 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4672
		if (unlikely(!tp->ecdev && !netif_running(dev))) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4673
			rtl8169_asic_down(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4674
			break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4675
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4676
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4677
		/* Work around for rx fifo overflow */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4678
		if (unlikely(status & RxFIFOOver) &&
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4679
		(tp->mac_version == RTL_GIGA_MAC_VER_11)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4680
			netif_stop_queue(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4681
			rtl8169_tx_timeout(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4682
			break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4683
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4684
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4685
		if (unlikely(status & SYSErr)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4686
			rtl8169_pcierr_interrupt(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4687
			break;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4688
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4689
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4690
		if (status & LinkChg)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4691
			rtl8169_check_link_status(dev, tp, ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4692
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4693
		/* We need to see the lastest version of tp->intr_mask to
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4694
		 * avoid ignoring an MSI interrupt and having to wait for
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4695
		 * another event which may never come.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4696
		 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4697
		smp_rmb();
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4698
		if (status & tp->intr_mask & tp->napi_event) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4699
			RTL_W16(IntrMask, tp->intr_event & ~tp->napi_event);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4700
			tp->intr_mask = ~tp->napi_event;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4701
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4702
			if (likely(napi_schedule_prep(&tp->napi)))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4703
				__napi_schedule(&tp->napi);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4704
			else if (netif_msg_intr(tp)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4705
				printk(KERN_INFO "%s: interrupt %04x in poll\n",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4706
				dev->name, status);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4707
			}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4708
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4709
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4710
		/* We only get a new MSI interrupt when all active irq
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4711
		 * sources on the chip have been acknowledged. So, ack
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4712
		 * everything we've seen and check if new sources have become
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4713
		 * active to avoid blocking all interrupts from the chip.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4714
		 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4715
		RTL_W16(IntrStatus,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4716
			(status & RxFIFOOver) ? (status | RxOverflow) : status);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4717
		status = RTL_R16(IntrStatus);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4718
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4719
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4720
	return IRQ_RETVAL(handled);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4721
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4722
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4723
static void ec_poll(struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4724
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4725
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4726
	struct pci_dev *pdev = tp->pci_dev;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4727
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4728
	rtl8169_interrupt(pdev->irq, dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4729
	rtl8169_rx_interrupt(dev, tp, tp->mmio_addr, 100); // FIXME
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4730
	rtl8169_tx_interrupt(dev, tp, tp->mmio_addr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4731
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4732
    if (jiffies - tp->ec_watchdog_jiffies >= 2 * HZ) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4733
		rtl8169_phy_timer((unsigned long) dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4734
		tp->ec_watchdog_jiffies = jiffies;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4735
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4736
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4737
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4738
static int rtl8169_poll(struct napi_struct *napi, int budget)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4739
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4740
	struct rtl8169_private *tp = container_of(napi, struct rtl8169_private, napi);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4741
	struct net_device *dev = tp->dev;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4742
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4743
	int work_done;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4744
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4745
	work_done = rtl8169_rx_interrupt(dev, tp, ioaddr, (u32) budget);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4746
	rtl8169_tx_interrupt(dev, tp, ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4747
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4748
	if (work_done < budget) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4749
		napi_complete(napi);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4750
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4751
		/* We need for force the visibility of tp->intr_mask
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4752
		 * for other CPUs, as we can loose an MSI interrupt
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4753
		 * and potentially wait for a retransmit timeout if we don't.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4754
		 * The posted write to IntrMask is safe, as it will
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4755
		 * eventually make it to the chip and we won't loose anything
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4756
		 * until it does.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4757
		 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4758
		tp->intr_mask = 0xffff;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4759
		smp_wmb();
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4760
		RTL_W16(IntrMask, tp->intr_event);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4761
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4762
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4763
	return work_done;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4764
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4765
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4766
static void rtl8169_rx_missed(struct net_device *dev, void __iomem *ioaddr)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4767
{
cceb9aacf4a6 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);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4769
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4770
	if (tp->mac_version > RTL_GIGA_MAC_VER_06)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4771
		return;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4772
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4773
	dev->stats.rx_missed_errors += (RTL_R32(RxMissed) & 0xffffff);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4774
	RTL_W32(RxMissed, 0);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4775
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4776
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4777
static void rtl8169_down(struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4778
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4779
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4780
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4781
	unsigned int intrmask;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4782
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4783
	rtl8169_delete_timer(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4784
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4785
	if (!tp->ecdev) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4786
		netif_stop_queue(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4787
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4788
		napi_disable(&tp->napi);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4789
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4790
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4791
core_down:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4792
	if (!tp->ecdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4793
		spin_lock_irq(&tp->lock);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4794
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4795
	rtl8169_asic_down(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4796
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4797
	rtl8169_rx_missed(dev, ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4798
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4799
	if (!tp->ecdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4800
		spin_unlock_irq(&tp->lock);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4801
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4802
	if (!tp->ecdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4803
		synchronize_irq(dev->irq);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4804
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4805
	/* Give a racing hard_start_xmit a few cycles to complete. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4806
	synchronize_sched();  /* FIXME: should this be synchronize_irq()? */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4807
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4808
	/*
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4809
	 * And now for the 50k$ question: are IRQ disabled or not ?
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4810
	 *
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4811
	 * Two paths lead here:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4812
	 * 1) dev->close
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4813
	 *    -> netif_running() is available to sync the current code and the
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4814
	 *       IRQ handler. See rtl8169_interrupt for details.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4815
	 * 2) dev->change_mtu
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4816
	 *    -> rtl8169_poll can not be issued again and re-enable the
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4817
	 *       interruptions. Let's simply issue the IRQ down sequence again.
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4818
	 *
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4819
	 * No loop if hotpluged or major error (0xffff).
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4820
	 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4821
	intrmask = RTL_R16(IntrMask);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4822
	if (intrmask && (intrmask != 0xffff))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4823
		goto core_down;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4824
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4825
	rtl8169_tx_clear(tp);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4826
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4827
	rtl8169_rx_clear(tp);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4828
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4829
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4830
static int rtl8169_close(struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4831
{
cceb9aacf4a6 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);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4833
	struct pci_dev *pdev = tp->pci_dev;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4834
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4835
	/* update counters before going down */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4836
	rtl8169_update_counters(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4837
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4838
	rtl8169_down(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4839
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4840
	if (!tp->ecdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4841
		free_irq(dev->irq, dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4842
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4843
	pci_free_consistent(pdev, R8169_RX_RING_BYTES, tp->RxDescArray,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4844
			    tp->RxPhyAddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4845
	pci_free_consistent(pdev, R8169_TX_RING_BYTES, tp->TxDescArray,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4846
			    tp->TxPhyAddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4847
	tp->TxDescArray = NULL;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4848
	tp->RxDescArray = NULL;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4849
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4850
	return 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4851
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4852
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4853
static void rtl_set_rx_mode(struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4854
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4855
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4856
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4857
	unsigned long flags;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4858
	u32 mc_filter[2];	/* Multicast hash filter */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4859
	int rx_mode;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4860
	u32 tmp = 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4861
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4862
	if (dev->flags & IFF_PROMISC) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4863
		/* Unconditionally log net taps. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4864
		if (netif_msg_link(tp)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4865
			printk(KERN_NOTICE "%s: Promiscuous mode enabled.\n",
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4866
			       dev->name);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4867
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4868
		rx_mode =
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4869
		    AcceptBroadcast | AcceptMulticast | AcceptMyPhys |
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4870
		    AcceptAllPhys;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4871
		mc_filter[1] = mc_filter[0] = 0xffffffff;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4872
	} else if ((dev->mc_count > multicast_filter_limit) ||
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4873
		   (dev->flags & IFF_ALLMULTI)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4874
		/* Too many to filter perfectly -- accept all multicasts. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4875
		rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4876
		mc_filter[1] = mc_filter[0] = 0xffffffff;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4877
	} else {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4878
		struct dev_mc_list *mclist;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4879
		unsigned int i;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4880
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4881
		rx_mode = AcceptBroadcast | AcceptMyPhys;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4882
		mc_filter[1] = mc_filter[0] = 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4883
		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4884
		     i++, mclist = mclist->next) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4885
			int bit_nr = ether_crc(ETH_ALEN, mclist->dmi_addr) >> 26;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4886
			mc_filter[bit_nr >> 5] |= 1 << (bit_nr & 31);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4887
			rx_mode |= AcceptMulticast;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4888
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4889
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4890
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4891
	spin_lock_irqsave(&tp->lock, flags);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4892
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4893
	tmp = rtl8169_rx_config | rx_mode |
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4894
	      (RTL_R32(RxConfig) & rtl_chip_info[tp->chipset].RxConfigMask);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4895
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4896
	if (tp->mac_version > RTL_GIGA_MAC_VER_06) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4897
		u32 data = mc_filter[0];
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4898
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4899
		mc_filter[0] = swab32(mc_filter[1]);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4900
		mc_filter[1] = swab32(data);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4901
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4902
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4903
	RTL_W32(MAR0 + 0, mc_filter[0]);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4904
	RTL_W32(MAR0 + 4, mc_filter[1]);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4905
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4906
	RTL_W32(RxConfig, tmp);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4907
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4908
	spin_unlock_irqrestore(&tp->lock, flags);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4909
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4910
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4911
/**
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4912
 *  rtl8169_get_stats - Get rtl8169 read/write statistics
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4913
 *  @dev: The Ethernet Device to get statistics for
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4914
 *
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4915
 *  Get TX/RX statistics for rtl8169
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4916
 */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4917
static struct net_device_stats *rtl8169_get_stats(struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4918
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4919
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4920
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4921
	unsigned long flags;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4922
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4923
	if (netif_running(dev)) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4924
		spin_lock_irqsave(&tp->lock, flags);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4925
		rtl8169_rx_missed(dev, ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4926
		spin_unlock_irqrestore(&tp->lock, flags);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4927
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4928
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4929
	return &dev->stats;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4930
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4931
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4932
static void rtl8169_net_suspend(struct net_device *dev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4933
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4934
	if (!netif_running(dev))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4935
		return;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4936
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4937
	netif_device_detach(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4938
	netif_stop_queue(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4939
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4940
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4941
#ifdef CONFIG_PM
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4942
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4943
static int rtl8169_suspend(struct device *device)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4944
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4945
	struct pci_dev *pdev = to_pci_dev(device);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4946
	struct net_device *dev = pci_get_drvdata(pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4947
	struct rtl8169_private *tp = netdev_priv(dev);
2589
2b9c78543663 Reverted default branch to stable-1.5.
Florian Pose <fp@igh-essen.com>
parents: 2185
diff changeset
  4948
2053
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4949
	if (tp->ecdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4950
 		return -EBUSY;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4951
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4952
	rtl8169_net_suspend(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4953
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4954
	return 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4955
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4956
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4957
static int rtl8169_resume(struct device *device)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4958
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4959
	struct pci_dev *pdev = to_pci_dev(device);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4960
	struct net_device *dev = pci_get_drvdata(pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4961
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4962
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4963
	if (tp->ecdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4964
		return -EBUSY;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4965
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4966
	if (!netif_running(dev))
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4967
		goto out;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4968
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4969
	netif_device_attach(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4970
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4971
	rtl8169_schedule_work(dev, rtl8169_reset_task);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4972
out:
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4973
	return 0;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4974
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4975
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4976
static const struct dev_pm_ops rtl8169_pm_ops = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4977
	.suspend = rtl8169_suspend,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4978
	.resume = rtl8169_resume,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4979
	.freeze = rtl8169_suspend,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4980
	.thaw = rtl8169_resume,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4981
	.poweroff = rtl8169_suspend,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4982
	.restore = rtl8169_resume,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4983
};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4984
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4985
#define RTL8169_PM_OPS	(&rtl8169_pm_ops)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4986
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4987
#else /* !CONFIG_PM */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4988
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4989
#define RTL8169_PM_OPS	NULL
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4990
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4991
#endif /* !CONFIG_PM */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4992
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4993
static void rtl_shutdown(struct pci_dev *pdev)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4994
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4995
	struct net_device *dev = pci_get_drvdata(pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4996
	struct rtl8169_private *tp = netdev_priv(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4997
	void __iomem *ioaddr = tp->mmio_addr;
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4998
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  4999
	rtl8169_net_suspend(dev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5000
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5001
	/* restore original MAC address */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5002
	rtl_rar_set(tp, dev->perm_addr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5003
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5004
	spin_lock_irq(&tp->lock);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5005
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5006
	rtl8169_asic_down(ioaddr);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5007
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5008
	spin_unlock_irq(&tp->lock);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5009
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5010
	if (system_state == SYSTEM_POWER_OFF) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5011
		/* WoL fails with some 8168 when the receiver is disabled. */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5012
		if (tp->features & RTL_FEATURE_WOL) {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5013
			pci_clear_master(pdev);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5014
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5015
			RTL_W8(ChipCmd, CmdRxEnb);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5016
			/* PCI commit */
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5017
			RTL_R8(ChipCmd);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5018
		}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5019
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5020
		pci_wake_from_d3(pdev, true);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5021
		pci_set_power_state(pdev, PCI_D3hot);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5022
	}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5023
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5024
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5025
static struct pci_driver rtl8169_pci_driver = {
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5026
	.name		= MODULENAME,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5027
	.id_table	= rtl8169_pci_tbl,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5028
	.probe		= rtl8169_init_one,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5029
	.remove		= __devexit_p(rtl8169_remove_one),
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5030
	.shutdown	= rtl_shutdown,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5031
	.driver.pm	= RTL8169_PM_OPS,
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5032
};
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5033
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5034
static int __init rtl8169_init_module(void)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5035
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5036
	return pci_register_driver(&rtl8169_pci_driver);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5037
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5038
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5039
static void __exit rtl8169_cleanup_module(void)
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5040
{
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5041
	pci_unregister_driver(&rtl8169_pci_driver);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5042
}
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5043
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5044
module_init(rtl8169_init_module);
cceb9aacf4a6 Add drivers for kernel 2.6.33
Andreas Stewering-Bone <ab@igh-essen.com>
parents:
diff changeset
  5045
module_exit(rtl8169_cleanup_module);