alloc_ei_netdev() function for 8390 devices
Subsystems (2)
PATCH 1/2 alloc_ei_netdev() function for 8390 devices
I've just checked this into my 2.4 and 2.5 net-driver queues.
Most 8390-based (ne2000) drivers use a helper lib, drivers/net/8390.c. This lib has been taking care of the chore of allocating and managing dev->priv, which is a common struct ei_device shared across all 8390 drivers.
For such drivers, I've created alloc_ei_netdev(), which is intended to replace
dev = alloc_etherdev(...); if (!dev) ... ... if (ethdev_init(dev)) /* 8390-specific */ ... ...
with
dev = alloc_ei_netdev(); if (!dev) ... ...
The patch below is the API change I checked in. The patch that follows in the next email is an example conversion -- drivers/net/ne2k-pci.c.
Jeff
# This is a BitKeeper generated patch for the following project:
# Project Name: Linux kernel tree
# This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas:
# ChangeSet 1.1119 -> 1.1120 # drivers/net/8390.c 1.8 -> 1.9 # drivers/net/8390.h 1.6 -> 1.7
#
# The following is the BitKeeper ChangeSet Log
# --------------------------------------------
# 03/09/01 [email protected] 1.1120
# [netdrvr 8390] new function alloc_ei_netdev()
#
# (preferred over alloc_etherdev + 8390-specific ethdev_init) # --------------------------------------------
#
drivers/net/8390.c +30 -4
@@ -1000,6 +1000,11 @@spin_unlock_irqrestore (&ei_local->page_lock, flags); } +static inline void ei_device_init (struct ei_device *ei_local) +{ +spin_lock_init (&ei_local->page_lock); +} +/** * ethdev_init - init rest of 8390 device struct * @dev: network device structure to init
@@ -1015,14 +1020,11 @@if (dev->priv ==NULL ) { -struct ei_device *ei_local; - dev->priv =kmalloc (sizeof (struct ei_device ),GFP_KERNEL );if (dev->priv ==NULL )return -ENOMEM ;memset (dev->priv,0 ,sizeof (struct ei_device )); - ei_local = (struct ei_device *)dev->priv; -spin_lock_init (&ei_local->page_lock); +ei_device_init (dev->priv); } dev->hard_start_xmit = &ei_start_xmit;
@@ -1033,6 +1035,29 @@return 0 ; } + +/* wrapper to make alloc_netdev happy; probably should just cast... */ +static void __ethdev_init (struct net_device *dev) +{ +ethdev_init (dev); +} + +/** +* alloc_ei_netdev - alloc_etherdev counterpart for 8390 +* +* Allocate 8390-specific net_device. +*/ +struct net_device *alloc_ei_netdev (void ) +{ +struct net_device *dev; + + dev =alloc_netdev (sizeof (struct ei_device ),"eth%d" , __ethdev_init); +if (dev) +ei_device_init (dev->priv); + +return dev; +} +
@@ -1136,6 +1161,7 @@EXPORT_SYMBOL (ei_tx_timeout);EXPORT_SYMBOL (ethdev_init);EXPORT_SYMBOL (NS8390_init); +EXPORT_SYMBOL (alloc_ei_netdev);#if defined(MODULE )
drivers/net/8390.h +1 -0
@@ -50,6 +50,7 @@extern int ei_open (struct net_device *dev);extern int ei_close (struct net_device *dev);extern void ei_interrupt (int irq,void *dev_id,struct pt_regs *regs); +extern struct net_device *alloc_ei_netdev (void );/* Most of these entries should be in 'struct net_device' (or most of the things in there should be here!) */