patch-2.4.0-test9 linux/drivers/net/eql.c
Next file: linux/drivers/net/gmac.c
Previous file: linux/drivers/net/epic100.c
Back to the patch index
Back to the overall index
- Lines: 284
- Date:
Fri Sep 22 14:21:16 2000
- Orig file:
v2.4.0-test8/linux/drivers/net/eql.c
- Orig date:
Mon Mar 13 09:50:16 2000
diff -u --recursive --new-file v2.4.0-test8/linux/drivers/net/eql.c linux/drivers/net/eql.c
@@ -113,32 +113,18 @@
*/
#include <linux/module.h>
-
#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/types.h>
-#include <linux/fcntl.h>
-#include <linux/interrupt.h>
-#include <linux/ptrace.h>
-#include <linux/ioport.h>
-#include <linux/in.h>
-#include <linux/malloc.h>
-#include <linux/string.h>
-#include <asm/system.h>
-#include <asm/bitops.h>
-#include <asm/io.h>
-#include <asm/dma.h>
-#include <asm/uaccess.h>
-#include <linux/errno.h>
#include <linux/init.h>
-
+#include <linux/timer.h>
#include <linux/netdevice.h>
+
#include <linux/if.h>
#include <linux/if_arp.h>
-#include <linux/timer.h>
-
#include <linux/if_eql.h>
+#include <asm/uaccess.h>
+
+
#ifndef EQL_DEBUG
/* #undef EQL_DEBUG -* print nothing at all, not even a boot-banner */
/* #define EQL_DEBUG 1 -* print only the boot-banner */
@@ -150,7 +136,7 @@
#endif
static unsigned int eql_debug = EQL_DEBUG;
-int eql_init(struct net_device *dev); /* */
+static int eql_init(struct net_device *dev); /* */
static int eql_open(struct net_device *dev); /* */
static int eql_close(struct net_device *dev); /* */
static int eql_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd); /* */
@@ -209,7 +195,7 @@
---------------------------------------------------------
*/
-int __init eql_init(struct net_device *dev)
+static int __init eql_init(struct net_device *dev)
{
static unsigned version_printed = 0;
/* static unsigned num_masters = 0; */
@@ -273,6 +259,8 @@
equalizer_t *eql = (equalizer_t *) dev->priv;
slave_queue_t *new_queue;
+ MOD_INC_USE_COUNT;
+
#ifdef EQL_DEBUG
if (eql_debug >= 5)
printk ("%s: open\n", dev->name);
@@ -294,10 +282,10 @@
eql->timer_on = 1;
add_timer (&eql->timer);
- MOD_INC_USE_COUNT;
return 0;
}
- return 1;
+ MOD_DEC_USE_COUNT;
+ return -ENOMEM;
}
@@ -409,16 +397,14 @@
struct net_device *master_dev;
struct net_device *slave_dev;
slaving_request_t srq;
- int err;
- err = copy_from_user(&srq, srqp, sizeof (slaving_request_t));
- if (err)
+ if (copy_from_user(&srq, srqp, sizeof (slaving_request_t)))
{
#ifdef EQL_DEBUG
if (eql_debug >= 20)
printk ("EQL enslave: error detected by copy_from_user\n");
#endif
- return err;
+ return -EFAULT;
}
#ifdef EQL_DEBUG
@@ -470,11 +456,9 @@
struct net_device *master_dev;
struct net_device *slave_dev;
slaving_request_t srq;
- int err;
- err = copy_from_user(&srq, srqp, sizeof (slaving_request_t));
- if (err)
- return err;
+ if (copy_from_user(&srq, srqp, sizeof (slaving_request_t)))
+ return -EFAULT;
#ifdef EQL_DEBUG
if (eql_debug >= 20)
@@ -500,11 +484,9 @@
equalizer_t *eql;
struct net_device *slave_dev;
slave_config_t sc;
- int err;
- err = copy_from_user (&sc, scp, sizeof (slave_config_t));
- if (err)
- return err;
+ if (copy_from_user (&sc, scp, sizeof (slave_config_t)))
+ return -EFAULT;
#ifdef EQL_DEBUG
if (eql_debug >= 20)
@@ -519,10 +501,8 @@
if (slave != 0)
{
sc.priority = slave->priority;
- err = verify_area(VERIFY_WRITE, (void *)scp, sizeof (slave_config_t));
- if (err)
- return err;
- copy_to_user (scp, &sc, sizeof (slave_config_t));
+ if (copy_to_user (scp, &sc, sizeof (slave_config_t)))
+ return -EFAULT;
return 0;
}
}
@@ -536,11 +516,9 @@
equalizer_t *eql;
struct net_device *slave_dev;
slave_config_t sc;
- int err;
- err = copy_from_user (&sc, scp, sizeof (slave_config_t));
- if (err)
- return err;
+ if (copy_from_user (&sc, scp, sizeof (slave_config_t)))
+ return -EFAULT;
#ifdef EQL_DEBUG
if (eql_debug >= 20)
@@ -578,13 +556,11 @@
if ( eql_is_master (dev) )
{
- int err;
eql = (equalizer_t *) dev->priv;
mc.max_slaves = eql->max_slaves;
mc.min_slaves = eql->min_slaves;
- err = copy_to_user (mcp, &mc, sizeof (master_config_t));
- if (err)
- return err;
+ if (copy_to_user (mcp, &mc, sizeof (master_config_t)))
+ return -EFAULT;
return 0;
}
return -EINVAL;
@@ -595,11 +571,9 @@
{
equalizer_t *eql;
master_config_t mc;
- int err;
- err = copy_from_user (&mc, mcp, sizeof (master_config_t));
- if (err)
- return err;
+ if (copy_from_user (&mc, mcp, sizeof (master_config_t)))
+ return -EFAULT;
#if EQL_DEBUG
if (eql_debug >= 20)
printk ("%s: set master config\n", dev->name);
@@ -646,11 +620,8 @@
slave = (slave_t *) kmalloc (sizeof (slave_t), GFP_KERNEL);
if (slave)
- {
memset(slave, 0, sizeof (slave_t));
- return slave;
- }
- return 0;
+ return slave;
}
@@ -702,31 +673,32 @@
slave_t *tail_slave;
queue = (slave_queue_t *) kmalloc (sizeof (slave_queue_t), GFP_KERNEL);
- if (queue == NULL)
- return 0;
- memset (queue, 0, sizeof (slave_queue_t));
+ if (!queue)
+ goto err_out;
+
head_slave = eql_new_slave ();
+ if (!head_slave)
+ goto err_out_queue;
+
tail_slave = eql_new_slave ();
+ if (!tail_slave)
+ goto err_out_hs;
- if ( head_slave != 0 &&
- tail_slave != 0 )
- {
- head_slave->next = tail_slave;
- tail_slave->next = 0;
- queue->head = head_slave;
- queue->num_slaves = 0;
- queue->master_dev = dev;
- }
- else
- {
- if (head_slave)
- kfree(head_slave);
- if (tail_slave)
- kfree(tail_slave);
- kfree (queue);
- return 0;
- }
+ memset (queue, 0, sizeof (slave_queue_t));
+
+ head_slave->next = tail_slave;
+ tail_slave->next = 0;
+ queue->head = head_slave;
+ queue->num_slaves = 0;
+ queue->master_dev = dev;
return queue;
+
+err_out_hs:
+ kfree (head_slave);
+err_out_queue:
+ kfree (queue);
+err_out:
+ return NULL;
}
@@ -1013,13 +985,13 @@
}
}
-#ifdef MODULE
static struct net_device dev_eql =
{
- "eql", 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL, eql_init
+ name: "eql",
+ init: eql_init,
};
-int init_module(void)
+static int __init eql_init_module(void)
{
if (register_netdev(&dev_eql) != 0) {
printk("eql: register_netdev() returned non-zero.\n");
@@ -1028,13 +1000,15 @@
return 0;
}
-void cleanup_module(void)
+static void __exit eql_cleanup_module(void)
{
kfree(((equalizer_t *)dev_eql.priv)->stats );
kfree(dev_eql.priv);
unregister_netdev(&dev_eql);
}
-#endif /* MODULE */
+
+module_init(eql_init_module);
+module_exit(eql_cleanup_module);
/*
* Local Variables:
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)