summaryrefslogtreecommitdiffstats
path: root/drivers/net/de600.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/de600.c')
-rw-r--r--drivers/net/de600.c35
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 */