Re: [PATCH 2.6.20] r8169.c: support RTL8169SC/8110SC
Edward Hsu wrote: This patch is for /driver/net/r8169.c to support RTL8169SC/8110SC, which is a new Realtek Gigabit PCI Ethernet Controller. RTL8110SC's PCI DID is 0x8167, while RTL8110S and RTL8110SB share 0x8169. Signed-off-by: Edward Hsu <[EMAIL PROTECTED]> -- --- ./drivers/net/r8169_n.c 2007-02-09 01:12:43.0 +0800 +++ ./drivers/net/r8169.c 2007-02-05 02:44:54.0 +0800 @@ -1,29 +1,4 @@ /* - -# -# Copyright(c) 1999 - 2007 Realtek Semiconductor Corp. All rights reserved. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free Unfortunately this patch has been created backwards: diff -u file.new file.old when it should be created from diff -u ./drivers/net/r8169.c.old \ ./drivers/net/r8169.c Additionally, your patch was word-wrapped by your email program, which prevents software from importing the patch into a kernel source tree. enum RTL8169_registers { - MAC0 = 0x00, /* Ethernet hardware address. */ - MAC4 = 0x04, - MAR0 = 0x08, /* Multicast filter. */ + MAC0 = 0, /* Ethernet hardware address. */ + MAR0 = 8, /* Multicast filter. */ CounterAddrLow = 0x10, CounterAddrHigh = 0x14, TxDescStartAddrLow = 0x20, Let's keep the existing style of code. The other MAC registers are listed in the "0xnn" hexidecimal style. @@ -282,7 +260,6 @@ enum RTL8169_registers { TBI_ANAR = 0x68, TBI_LPAR = 0x6A, PHYstatus = 0x6C, - Offset_7Ch = 0x7C, RxMaxSize = 0xDA, CPlusCmd = 0xE0, IntrMitigate = 0xE2, Is there a better name for this register? :) @@ -476,24 +456,14 @@ struct rtl8169_private { void (*phy_reset_enable)(void __iomem *); unsigned int (*phy_reset_pending)(void __iomem *); unsigned int (*link_ok)(void __iomem *); -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20) - struct work_struct task; -#else struct delayed_work task; -#endif unsigned wol_enabled : 1; }; MODULE_AUTHOR("Realtek and the Linux r8169 crew "); MODULE_DESCRIPTION("RealTek RTL-8169 Gigabit Ethernet driver"); - -module_param_array(speed, int, _speed, 0); -MODULE_PARM_DESC(speed, "force phy operation. Deprecated by ethtool (8)."); -module_param_array(duplex, int, _duplex, 0); -MODULE_PARM_DESC(duplex, "force phy operation. Deprecated by ethtool (8)."); -module_param_array(autoneg, int, _autoneg, 0); -MODULE_PARM_DESC(autoneg, "force phy operation. Deprecated by ethtool (8)."); - +module_param_array(media, int, _media, 0); +MODULE_PARM_DESC(media, "force phy operation. Deprecated by ethtool (8)."); module_param(rx_copybreak, int, 0); MODULE_PARM_DESC(rx_copybreak, "Copy breakpoint for copy-only-tiny-frames"); module_param(use_dac, int, 0); @@ -505,11 +475,7 @@ MODULE_VERSION(RTL8169_VERSION); static int rtl8169_open(struct net_device *dev); static int rtl8169_start_xmit(struct sk_buff *skb, struct net_device *dev); -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19) -static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance, struct pt_regs *regs); -#else static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance); -#endif static int rtl8169_init_ring(struct net_device *dev); static void rtl8169_hw_start(struct net_device *dev); static int rtl8169_close(struct net_device *dev); While we understand that RealTek may need to support multiple kernel versions, drivers in the official kernel.org kernel typically do not contain compatibility code for older kernel versions. + if ((tp->mac_version == RTL_GIGA_MAC_VER_11) || + (tp->mac_version == RTL_GIGA_MAC_VER_12) || + (tp->mac_version == RTL_GIGA_MAC_VER_13) || + (tp->mac_version == RTL_GIGA_MAC_VER_14) || + (tp->mac_version == RTL_GIGA_MAC_VER_15)) { + mc_filter[0] = 0x; + mc_filter[1] = 0x; + } Can you help us understand this code change? This change appears to disable multicast on these MAC versions. Jeff - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH 2.6.20] r8169.c: support RTL8169SC/8110SC
This patch is for /driver/net/r8169.c to support RTL8169SC/8110SC, which is a new Realtek Gigabit PCI Ethernet Controller. RTL8110SC's PCI DID is 0x8167, while RTL8110S and RTL8110SB share 0x8169. Signed-off-by: Edward Hsu <[EMAIL PROTECTED]> -- --- ./drivers/net/r8169_n.c 2007-02-09 01:12:43.0 +0800 +++ ./drivers/net/r8169.c 2007-02-05 02:44:54.0 +0800 @@ -1,29 +1,4 @@ /* - -# -# Copyright(c) 1999 - 2007 Realtek Semiconductor Corp. All rights reserved. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; either version 2 of the License, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -# more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# The full GNU General Public License is included in this distribution in the -# file called LICENSE. -# - -*/ - -/* = r8169.c: A RealTek RTL-8169 Gigabit Ethernet driver for Linux kernel 2.4.x. @@ -76,7 +51,6 @@ VERSION 2.2LK <2005/01/25> */ #include -#include #include #include #include @@ -95,15 +69,13 @@ VERSION 2.2LK <2005/01/25> #include #include -#define NODE_ADDRESS_SIZE 6 - #ifdef CONFIG_R8169_NAPI #define NAPI_SUFFIX "-NAPI" #else #define NAPI_SUFFIX "" #endif -#define RTL8169_VERSION "6.001.00" NAPI_SUFFIX +#define RTL8169_VERSION "2.2LK" NAPI_SUFFIX #define MODULENAME "r8169" #define PFX MODULENAME ": " @@ -137,12 +109,8 @@ VERSION 2.2LK <2005/01/25> /* media options */ #define MAX_UNITS 8 -static int speed[MAX_UNITS] = { -1, -1, -1, -1, -1, -1, -1, -1 }; -static int num_speed = 0; -static int duplex[MAX_UNITS] = { -1, -1, -1, -1, -1, -1, -1, -1 }; -static int num_duplex = 0; -static int autoneg[MAX_UNITS] = { -1, -1, -1, -1, -1, -1, -1, -1 }; -static int num_autoneg = 0; +static int media[MAX_UNITS] = { -1, -1, -1, -1, -1, -1, -1, -1 }; +static int num_media = 0; /* Maximum events (Rx packets, etc.) to handle at each interrupt. */ static const int max_interrupt_work = 20; @@ -155,8 +123,8 @@ static const int multicast_filter_limit #define MAC_ADDR_LEN 6 #define RX_FIFO_THRESH 7 /* 7 means NO threshold, Rx buffer level before first PCI xfer. */ -#define RX_DMA_BURST 7 /* Maximum PCI burst, '7' is unlimited */ -#define TX_DMA_BURST 7 /* Maximum PCI burst, '7' is unlimited */ +#define RX_DMA_BURST 6 /* Maximum PCI burst, '6' is 1024 */ +#define TX_DMA_BURST 6 /* Maximum PCI burst, '6' is 1024 */ #define EarlyTxThld 0x3F /* 0x3F means NO early transmit */ #define RxPacketMaxSize 0x3FE8 /* 16K - 1 - ETH_HLEN - VLAN - CRC... */ #define SafeMtu 0x1c20 /* ... actually life sucks beyond ~7k */ @@ -182,12 +150,16 @@ static const int multicast_filter_limit #define RTL_R32(reg) ((unsigned long) readl (ioaddr + (reg))) enum mac_version { - RTL_GIGA_MAC_VER_8169 = 0x00, - RTL_GIGA_MAC_VER_8169S = 0x01, - RTL_GIGA_MAC_VER_8110S = 0x02, - RTL_GIGA_MAC_VER_8169SB = 0x04, - RTL_GIGA_MAC_VER_8110SCd = 0x05, - RTL_GIGA_MAC_VER_8110SCe = 0x06, + RTL_GIGA_MAC_VER_01 = 0x00, + RTL_GIGA_MAC_VER_02 = 0x01, + RTL_GIGA_MAC_VER_03 = 0x02, + RTL_GIGA_MAC_VER_04 = 0x03, + RTL_GIGA_MAC_VER_05 = 0x04, + RTL_GIGA_MAC_VER_11 = 0x0b, + RTL_GIGA_MAC_VER_12 = 0x0c, + RTL_GIGA_MAC_VER_13 = 0x0d, + RTL_GIGA_MAC_VER_14 = 0x0e, + RTL_GIGA_MAC_VER_15 = 0x0f }; enum phy_version { @@ -207,12 +179,16 @@ static const struct { u8 mac_version; u32 RxConfigMask; /* Clears the bits supported by this chip */ } rtl_chip_info[] = { - _R("RTL8169", RTL_GIGA_MAC_VER_8169, 0xff7e1880), - _R("RTL8169S/8110S", RTL_GIGA_MAC_VER_8169S, 0xff7e1880), - _R("RTL8169S/8110S", RTL_GIGA_MAC_VER_8110S, 0xff7e1880), - _R("RTL8169SB/8110SB", RTL_GIGA_MAC_VER_8169SB, 0xff7e1880), - _R("RTL8169SC/8110SC", RTL_GIGA_MAC_VER_8110SCd, 0xff7e1880), - _R("RTL8169SC/8110SC", RTL_GIGA_MAC_VER_8110SCe, 0xff7e1880), + _R("RTL8169", RTL_GIGA_MAC_VER_01, 0xff7e1880), + _R("RTL8169s/8110s", RTL_GIGA_MAC_VER_02, 0xff7e1880), + _R("RTL8169s/8110s", RTL_GIGA_MAC_VER_03, 0xff7e1880), + _R("RTL8169sb/8110sb", RTL_GIGA_MAC_VER_04, 0xff7e1880), + _R("RTL8169sc/8110sc", RTL_GIGA_MAC_VER_05, 0xff7e1880), + _R("RTL8168b/8111b", RTL_GIGA_MAC_VER_11, 0xff7e1880), // PCI-E +
[PATCH 2.6.20] r8169.c: support RTL8169SC/8110SC
This patch is for /driver/net/r8169.c to support RTL8169SC/8110SC, which is a new Realtek Gigabit PCI Ethernet Controller. RTL8110SC's PCI DID is 0x8167, while RTL8110S and RTL8110SB share 0x8169. Signed-off-by: Edward Hsu [EMAIL PROTECTED] -- --- ./drivers/net/r8169_n.c 2007-02-09 01:12:43.0 +0800 +++ ./drivers/net/r8169.c 2007-02-05 02:44:54.0 +0800 @@ -1,29 +1,4 @@ /* - -# -# Copyright(c) 1999 - 2007 Realtek Semiconductor Corp. All rights reserved. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free -# Software Foundation; either version 2 of the License, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, but WITHOUT -# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for -# more details. -# -# You should have received a copy of the GNU General Public License along with -# this program; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. -# -# The full GNU General Public License is included in this distribution in the -# file called LICENSE. -# - -*/ - -/* = r8169.c: A RealTek RTL-8169 Gigabit Ethernet driver for Linux kernel 2.4.x. @@ -76,7 +51,6 @@ VERSION 2.2LK 2005/01/25 */ #include linux/module.h -#include linux/version.h #include linux/moduleparam.h #include linux/pci.h #include linux/netdevice.h @@ -95,15 +69,13 @@ VERSION 2.2LK 2005/01/25 #include asm/io.h #include asm/irq.h -#define NODE_ADDRESS_SIZE 6 - #ifdef CONFIG_R8169_NAPI #define NAPI_SUFFIX -NAPI #else #define NAPI_SUFFIX #endif -#define RTL8169_VERSION 6.001.00 NAPI_SUFFIX +#define RTL8169_VERSION 2.2LK NAPI_SUFFIX #define MODULENAME r8169 #define PFX MODULENAME : @@ -137,12 +109,8 @@ VERSION 2.2LK 2005/01/25 /* media options */ #define MAX_UNITS 8 -static int speed[MAX_UNITS] = { -1, -1, -1, -1, -1, -1, -1, -1 }; -static int num_speed = 0; -static int duplex[MAX_UNITS] = { -1, -1, -1, -1, -1, -1, -1, -1 }; -static int num_duplex = 0; -static int autoneg[MAX_UNITS] = { -1, -1, -1, -1, -1, -1, -1, -1 }; -static int num_autoneg = 0; +static int media[MAX_UNITS] = { -1, -1, -1, -1, -1, -1, -1, -1 }; +static int num_media = 0; /* Maximum events (Rx packets, etc.) to handle at each interrupt. */ static const int max_interrupt_work = 20; @@ -155,8 +123,8 @@ static const int multicast_filter_limit #define MAC_ADDR_LEN 6 #define RX_FIFO_THRESH 7 /* 7 means NO threshold, Rx buffer level before first PCI xfer. */ -#define RX_DMA_BURST 7 /* Maximum PCI burst, '7' is unlimited */ -#define TX_DMA_BURST 7 /* Maximum PCI burst, '7' is unlimited */ +#define RX_DMA_BURST 6 /* Maximum PCI burst, '6' is 1024 */ +#define TX_DMA_BURST 6 /* Maximum PCI burst, '6' is 1024 */ #define EarlyTxThld 0x3F /* 0x3F means NO early transmit */ #define RxPacketMaxSize 0x3FE8 /* 16K - 1 - ETH_HLEN - VLAN - CRC... */ #define SafeMtu 0x1c20 /* ... actually life sucks beyond ~7k */ @@ -182,12 +150,16 @@ static const int multicast_filter_limit #define RTL_R32(reg) ((unsigned long) readl (ioaddr + (reg))) enum mac_version { - RTL_GIGA_MAC_VER_8169 = 0x00, - RTL_GIGA_MAC_VER_8169S = 0x01, - RTL_GIGA_MAC_VER_8110S = 0x02, - RTL_GIGA_MAC_VER_8169SB = 0x04, - RTL_GIGA_MAC_VER_8110SCd = 0x05, - RTL_GIGA_MAC_VER_8110SCe = 0x06, + RTL_GIGA_MAC_VER_01 = 0x00, + RTL_GIGA_MAC_VER_02 = 0x01, + RTL_GIGA_MAC_VER_03 = 0x02, + RTL_GIGA_MAC_VER_04 = 0x03, + RTL_GIGA_MAC_VER_05 = 0x04, + RTL_GIGA_MAC_VER_11 = 0x0b, + RTL_GIGA_MAC_VER_12 = 0x0c, + RTL_GIGA_MAC_VER_13 = 0x0d, + RTL_GIGA_MAC_VER_14 = 0x0e, + RTL_GIGA_MAC_VER_15 = 0x0f }; enum phy_version { @@ -207,12 +179,16 @@ static const struct { u8 mac_version; u32 RxConfigMask; /* Clears the bits supported by this chip */ } rtl_chip_info[] = { - _R(RTL8169, RTL_GIGA_MAC_VER_8169, 0xff7e1880), - _R(RTL8169S/8110S, RTL_GIGA_MAC_VER_8169S, 0xff7e1880), - _R(RTL8169S/8110S, RTL_GIGA_MAC_VER_8110S, 0xff7e1880), - _R(RTL8169SB/8110SB, RTL_GIGA_MAC_VER_8169SB, 0xff7e1880), - _R(RTL8169SC/8110SC, RTL_GIGA_MAC_VER_8110SCd, 0xff7e1880), - _R(RTL8169SC/8110SC, RTL_GIGA_MAC_VER_8110SCe, 0xff7e1880), + _R(RTL8169, RTL_GIGA_MAC_VER_01, 0xff7e1880), + _R(RTL8169s/8110s, RTL_GIGA_MAC_VER_02, 0xff7e1880), + _R(RTL8169s/8110s, RTL_GIGA_MAC_VER_03, 0xff7e1880), + _R(RTL8169sb/8110sb, RTL_GIGA_MAC_VER_04, 0xff7e1880), + _R(RTL8169sc/8110sc, RTL_GIGA_MAC_VER_05, 0xff7e1880), + _R(RTL8168b/8111b,
Re: [PATCH 2.6.20] r8169.c: support RTL8169SC/8110SC
Edward Hsu wrote: This patch is for /driver/net/r8169.c to support RTL8169SC/8110SC, which is a new Realtek Gigabit PCI Ethernet Controller. RTL8110SC's PCI DID is 0x8167, while RTL8110S and RTL8110SB share 0x8169. Signed-off-by: Edward Hsu [EMAIL PROTECTED] -- --- ./drivers/net/r8169_n.c 2007-02-09 01:12:43.0 +0800 +++ ./drivers/net/r8169.c 2007-02-05 02:44:54.0 +0800 @@ -1,29 +1,4 @@ /* - -# -# Copyright(c) 1999 - 2007 Realtek Semiconductor Corp. All rights reserved. -# -# This program is free software; you can redistribute it and/or modify it -# under the terms of the GNU General Public License as published by the Free Unfortunately this patch has been created backwards: diff -u file.new file.old when it should be created from diff -u ./drivers/net/r8169.c.old \ ./drivers/net/r8169.c Additionally, your patch was word-wrapped by your email program, which prevents software from importing the patch into a kernel source tree. enum RTL8169_registers { - MAC0 = 0x00, /* Ethernet hardware address. */ - MAC4 = 0x04, - MAR0 = 0x08, /* Multicast filter. */ + MAC0 = 0, /* Ethernet hardware address. */ + MAR0 = 8, /* Multicast filter. */ CounterAddrLow = 0x10, CounterAddrHigh = 0x14, TxDescStartAddrLow = 0x20, Let's keep the existing style of code. The other MAC registers are listed in the 0xnn hexidecimal style. @@ -282,7 +260,6 @@ enum RTL8169_registers { TBI_ANAR = 0x68, TBI_LPAR = 0x6A, PHYstatus = 0x6C, - Offset_7Ch = 0x7C, RxMaxSize = 0xDA, CPlusCmd = 0xE0, IntrMitigate = 0xE2, Is there a better name for this register? :) @@ -476,24 +456,14 @@ struct rtl8169_private { void (*phy_reset_enable)(void __iomem *); unsigned int (*phy_reset_pending)(void __iomem *); unsigned int (*link_ok)(void __iomem *); -#if LINUX_VERSION_CODE KERNEL_VERSION(2,6,20) - struct work_struct task; -#else struct delayed_work task; -#endif unsigned wol_enabled : 1; }; MODULE_AUTHOR(Realtek and the Linux r8169 crew netdev@vger.kernel.org); MODULE_DESCRIPTION(RealTek RTL-8169 Gigabit Ethernet driver); - -module_param_array(speed, int, num_speed, 0); -MODULE_PARM_DESC(speed, force phy operation. Deprecated by ethtool (8).); -module_param_array(duplex, int, num_duplex, 0); -MODULE_PARM_DESC(duplex, force phy operation. Deprecated by ethtool (8).); -module_param_array(autoneg, int, num_autoneg, 0); -MODULE_PARM_DESC(autoneg, force phy operation. Deprecated by ethtool (8).); - +module_param_array(media, int, num_media, 0); +MODULE_PARM_DESC(media, force phy operation. Deprecated by ethtool (8).); module_param(rx_copybreak, int, 0); MODULE_PARM_DESC(rx_copybreak, Copy breakpoint for copy-only-tiny-frames); module_param(use_dac, int, 0); @@ -505,11 +475,7 @@ MODULE_VERSION(RTL8169_VERSION); static int rtl8169_open(struct net_device *dev); static int rtl8169_start_xmit(struct sk_buff *skb, struct net_device *dev); -#if LINUX_VERSION_CODE KERNEL_VERSION(2,6,19) -static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance, struct pt_regs *regs); -#else static irqreturn_t rtl8169_interrupt(int irq, void *dev_instance); -#endif static int rtl8169_init_ring(struct net_device *dev); static void rtl8169_hw_start(struct net_device *dev); static int rtl8169_close(struct net_device *dev); While we understand that RealTek may need to support multiple kernel versions, drivers in the official kernel.org kernel typically do not contain compatibility code for older kernel versions. + if ((tp-mac_version == RTL_GIGA_MAC_VER_11) || + (tp-mac_version == RTL_GIGA_MAC_VER_12) || + (tp-mac_version == RTL_GIGA_MAC_VER_13) || + (tp-mac_version == RTL_GIGA_MAC_VER_14) || + (tp-mac_version == RTL_GIGA_MAC_VER_15)) { + mc_filter[0] = 0x; + mc_filter[1] = 0x; + } Can you help us understand this code change? This change appears to disable multicast on these MAC versions. Jeff - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/