diff options
Diffstat (limited to 'drivers/net/de600.c')
-rw-r--r-- | drivers/net/de600.c | 35 |
1 files changed, 20 insertions, 15 deletions
diff --git a/drivers/net/de600.c b/drivers/net/de600.c index a8867c2d9..1c56ea203 100644 --- a/drivers/net/de600.c +++ b/drivers/net/de600.c @@ -90,13 +90,18 @@ static char *version = #endif unsigned int de600_debug = DE600_DEBUG; -#include <linux/config.h> +#ifdef MODULE +#include <linux/module.h> +#include <linux/version.h> +#endif + #include <linux/kernel.h> #include <linux/sched.h> #include <linux/types.h> #include <linux/fcntl.h> #include <linux/string.h> #include <linux/interrupt.h> +#include <linux/ioport.h> #include <asm/io.h> #include <linux/in.h> #include <linux/ptrace.h> @@ -108,14 +113,9 @@ unsigned int de600_debug = DE600_DEBUG; #include <linux/etherdevice.h> #include <linux/skbuff.h> -#ifdef MODULE -#include <linux/module.h> -#include "../../tools/version.h" -#endif - #ifdef FAKE_SMALL_MAX static unsigned long de600_rspace(struct sock *sk); -#include "../../net/inet/sock.h" +#include <net/sock.h> #endif #define netstats enet_statistics @@ -250,7 +250,7 @@ static struct netstats *get_stats(struct device *dev); static int de600_start_xmit(struct sk_buff *skb, struct device *dev); /* Dispatch from interrupts. */ -static void de600_interrupt(int reg_ptr); +static void de600_interrupt(int irq, struct pt_regs *regs); static int de600_tx_intr(struct device *dev, int irq_status); static void de600_rx_intr(struct device *dev); @@ -262,7 +262,6 @@ static int adapter_init(struct device *dev); /* * D-Link driver variables: */ -extern struct device *irq2dev_map[16]; static volatile int rx_page = 0; #define TX_PAGES 2 @@ -496,9 +495,8 @@ de600_start_xmit(struct sk_buff *skb, struct device *dev) * Handle the network interface interrupts. */ static void -de600_interrupt(int reg_ptr) +de600_interrupt(int irq, struct pt_regs * regs) { - int irq = pt_regs2irq(reg_ptr); struct device *dev = irq2dev_map[irq]; byte irq_status; int retrig = 0; @@ -631,6 +629,7 @@ de600_rx_intr(struct device *dev) ((struct netstats *)(dev->priv))->rx_packets++; /* count all receives */ + skb->protocol=eth_type_trans(skb,dev); if (dev_rint((unsigned char *)skb, size, IN_SKBUFF, dev)) printk("%s: receive buffers full.\n", dev->name); /* @@ -688,6 +687,14 @@ de600_probe(struct device *dev) return ENODEV; } +#if 0 /* Not yet */ + if (check_region(DE600_IO, 3)) { + printk(", port 0x%x busy\n", DE600_IO); + return EBUSY; + } +#endif + request_region(DE600_IO, 3, "de600"); + printk(", Ethernet Address: %02X", dev->dev_addr[0]); for (i = 1; i < ETH_ALEN; i++) printk(":%02X",dev->dev_addr[i]); @@ -836,9 +843,7 @@ init_module(void) void cleanup_module(void) { - if (MOD_IN_USE) - printk("de600: device busy, remove delayed\n"); - else - unregister_netdev(&de600_dev); + unregister_netdev(&de600_dev); + release_region(DE600_IO, 3); } #endif /* MODULE */ |