aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDeepak Saxena <dsaxena@plexity.net>2006-01-14 16:21:18 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-01-14 21:27:13 -0500
commit9c878967d32a10cb604718f7608efa0ea3d8b596 (patch)
tree08fc64f4390b6d0f9cad984193e54eca99cd2b00
parenta07f0dbec01fda6d88f5089e21454b8df53d36fc (diff)
[PATCH] cs89x0: add ixdp2351 support
This patch adds support for the Intel IXDP2351 to the CS89x0 driver. Signed-off-by: Deepak Saxena <dsaxena@plexity.net> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--drivers/net/Kconfig2
-rw-r--r--drivers/net/cs89x0.c29
2 files changed, 25 insertions, 6 deletions
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
index 5c15f3e9ea07..171999e67eec 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -1387,7 +1387,7 @@ config FORCEDETH
1387 1387
1388config CS89x0 1388config CS89x0
1389 tristate "CS89x0 support" 1389 tristate "CS89x0 support"
1390 depends on NET_PCI && (ISA || ARCH_IXDP2X01 || ARCH_PNX010X) 1390 depends on NET_PCI && (ISA || MACH_IXDP2351 || ARCH_IXDP2X01 || ARCH_PNX010X)
1391 ---help--- 1391 ---help---
1392 Support for CS89x0 chipset based Ethernet cards. If you have a 1392 Support for CS89x0 chipset based Ethernet cards. If you have a
1393 network (Ethernet) card of this type, say Y and read the 1393 network (Ethernet) card of this type, say Y and read the
diff --git a/drivers/net/cs89x0.c b/drivers/net/cs89x0.c
index 2687b3e0994d..fab6586d87e9 100644
--- a/drivers/net/cs89x0.c
+++ b/drivers/net/cs89x0.c
@@ -90,6 +90,9 @@
90 Dmitry Pervushin : dpervushin@ru.mvista.com 90 Dmitry Pervushin : dpervushin@ru.mvista.com
91 : PNX010X platform support 91 : PNX010X platform support
92 92
93 Deepak Saxena : dsaxena@plexity.net
94 : Intel IXDP2351 platform support
95
93*/ 96*/
94 97
95/* Always include 'config.h' first in case the user wants to turn on 98/* Always include 'config.h' first in case the user wants to turn on
@@ -174,6 +177,10 @@ static unsigned int cs8900_irq_map[] = {12,0,0,0};
174static unsigned int netcard_portlist[] __initdata = 177static unsigned int netcard_portlist[] __initdata =
175 { 0x0300, 0}; 178 { 0x0300, 0};
176static unsigned int cs8900_irq_map[] = {1,0,0,0}; 179static unsigned int cs8900_irq_map[] = {1,0,0,0};
180#elif defined(CONFIG_MACH_IXDP2351)
181static unsigned int netcard_portlist[] __initdata = {IXDP2351_VIRT_CS8900_BASE, 0};
182static unsigned int cs8900_irq_map[] = {IRQ_IXDP2351_CS8900, 0, 0, 0};
183#include <asm/irq.h>
177#elif defined(CONFIG_ARCH_IXDP2X01) 184#elif defined(CONFIG_ARCH_IXDP2X01)
178#include <asm/irq.h> 185#include <asm/irq.h>
179static unsigned int netcard_portlist[] __initdata = {IXDP2X01_CS8900_VIRT_BASE, 0}; 186static unsigned int netcard_portlist[] __initdata = {IXDP2X01_CS8900_VIRT_BASE, 0};
@@ -341,7 +348,19 @@ out:
341} 348}
342#endif 349#endif
343 350
344#if defined(CONFIG_ARCH_IXDP2X01) 351#if defined(CONFIG_MACH_IXDP2351)
352static u16
353readword(unsigned long base_addr, int portno)
354{
355 return __raw_readw(base_addr + (portno << 1));
356}
357
358static void
359writeword(unsigned long base_addr, int portno, u16 value)
360{
361 __raw_writew(value, base_addr + (portno << 1));
362}
363#elif defined(CONFIG_ARCH_IXDP2X01)
345static u16 364static u16
346readword(unsigned long base_addr, int portno) 365readword(unsigned long base_addr, int portno)
347{ 366{
@@ -781,7 +800,7 @@ cs89x0_probe1(struct net_device *dev, int ioaddr, int modular)
781 } else { 800 } else {
782 i = lp->isa_config & INT_NO_MASK; 801 i = lp->isa_config & INT_NO_MASK;
783 if (lp->chip_type == CS8900) { 802 if (lp->chip_type == CS8900) {
784#if defined(CONFIG_ARCH_IXDP2X01) || defined(CONFIG_ARCH_PNX010X) 803#if defined(CONFIG_MACH_IXDP2351) || defined(CONFIG_ARCH_IXDP2X01) || defined(CONFIG_ARCH_PNX010X)
785 i = cs8900_irq_map[0]; 804 i = cs8900_irq_map[0];
786#else 805#else
787 /* Translate the IRQ using the IRQ mapping table. */ 806 /* Translate the IRQ using the IRQ mapping table. */
@@ -1013,7 +1032,7 @@ skip_this_frame:
1013 1032
1014void __init reset_chip(struct net_device *dev) 1033void __init reset_chip(struct net_device *dev)
1015{ 1034{
1016#ifndef CONFIG_ARCH_IXDP2X01 1035#if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01)
1017 struct net_local *lp = netdev_priv(dev); 1036 struct net_local *lp = netdev_priv(dev);
1018 int ioaddr = dev->base_addr; 1037 int ioaddr = dev->base_addr;
1019#endif 1038#endif
@@ -1024,7 +1043,7 @@ void __init reset_chip(struct net_device *dev)
1024 /* wait 30 ms */ 1043 /* wait 30 ms */
1025 msleep(30); 1044 msleep(30);
1026 1045
1027#ifndef CONFIG_ARCH_IXDP2X01 1046#if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01)
1028 if (lp->chip_type != CS8900) { 1047 if (lp->chip_type != CS8900) {
1029 /* Hardware problem requires PNP registers to be reconfigured after a reset */ 1048 /* Hardware problem requires PNP registers to be reconfigured after a reset */
1030 writeword(ioaddr, ADD_PORT, PP_CS8920_ISAINT); 1049 writeword(ioaddr, ADD_PORT, PP_CS8920_ISAINT);
@@ -1288,7 +1307,7 @@ net_open(struct net_device *dev)
1288 else 1307 else
1289#endif 1308#endif
1290 { 1309 {
1291#if !defined(CONFIG_ARCH_IXDP2X01) && !defined(CONFIG_ARCH_PNX010X) 1310#if !defined(CONFIG_MACH_IXDP2351) && !defined(CONFIG_ARCH_IXDP2X01) && !defined(CONFIG_ARCH_PNX010X)
1292 if (((1 << dev->irq) & lp->irq_map) == 0) { 1311 if (((1 << dev->irq) & lp->irq_map) == 0) {
1293 printk(KERN_ERR "%s: IRQ %d is not in our map of allowable IRQs, which is %x\n", 1312 printk(KERN_ERR "%s: IRQ %d is not in our map of allowable IRQs, which is %x\n",
1294 dev->name, dev->irq, lp->irq_map); 1313 dev->name, dev->irq, lp->irq_map);