linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* PATCH: linux-2.4.9/drivers/atm to new module_{init,exit} + some pci_device_id tables
@ 2001-08-20 14:58 Adam J. Richter
  2001-08-21  1:21 ` [Linux-ATM-General] " John Fraizer
  0 siblings, 1 reply; 3+ messages in thread
From: Adam J. Richter @ 2001-08-20 14:58 UTC (permalink / raw)
  To: linux-atm-general; +Cc: linux-kernel

	The following patch moves linux-2.4.9/drivers/atm
to the relatively new module_{init,exit} interface, simplifying
the code and removing the reference to the ATM drivers from
linux/drivers/genhd.c (this is partly motivated by my effort to get
rid of genhd.c).  The changes also include some pci_device_id tables,
which enable automatic loading of the modules via pcimodules (or
a similar program).  These changes are also all steps toward porting
the atm drivers to the new PCI interface.  In the case zatm.c, I
have actually ported it to the new PCI interface, although it
shares the stock zatm driver's deficiency of not supporting
module removal.

	Note that this change deletes linux-2.4.9/drivers/atmdev_init.c,
since the conversion to module_{init,exit} completely obseletes that file.

	If these changes look OK, I would like to get them
into the stock kernel.  If there is a maintainer on linux-atm-general
who shepherds these patches to Alan and Linus, and if these changes
are good, please let me know if you are going to "officially" send them
to Alan and Linus or if you want me to do so or if there is some other
procedure that I should follow.

-- 
Adam J. Richter     __     ______________   4880 Stevens Creek Blvd, Suite 104
adam@yggdrasil.com     \ /                  San Jose, California 95129-1034
+1 408 261-6630         | g g d r a s i l   United States of America
fax +1 408 261-6631      "Free Software For The Rest Of Us."

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Linux-ATM-General] PATCH: linux-2.4.9/drivers/atm to new module_{init,exit} + some pci_device_id tables
  2001-08-20 14:58 PATCH: linux-2.4.9/drivers/atm to new module_{init,exit} + some pci_device_id tables Adam J. Richter
@ 2001-08-21  1:21 ` John Fraizer
  0 siblings, 0 replies; 3+ messages in thread
From: John Fraizer @ 2001-08-21  1:21 UTC (permalink / raw)
  To: Adam J. Richter; +Cc: linux-atm-general, linux-kernel


Just a quick question.  Please be gentl.  I'm not a kernel hack.  I just
want to make sure that it will still be possible to build a monolythic
kernel with ATM support.  If not, that is a BAD thing.  



On Mon, 20 Aug 2001, Adam J. Richter wrote:

> 	The following patch moves linux-2.4.9/drivers/atm
> to the relatively new module_{init,exit} interface, simplifying
> the code and removing the reference to the ATM drivers from
> linux/drivers/genhd.c (this is partly motivated by my effort to get
> rid of genhd.c).  The changes also include some pci_device_id tables,
> which enable automatic loading of the modules via pcimodules (or
> a similar program).  These changes are also all steps toward porting
> the atm drivers to the new PCI interface.  In the case zatm.c, I
> have actually ported it to the new PCI interface, although it
> shares the stock zatm driver's deficiency of not supporting
> module removal.
> 
> 	Note that this change deletes linux-2.4.9/drivers/atmdev_init.c,
> since the conversion to module_{init,exit} completely obseletes that file.
> 
> 	If these changes look OK, I would like to get them
> into the stock kernel.  If there is a maintainer on linux-atm-general
> who shepherds these patches to Alan and Linus, and if these changes
> are good, please let me know if you are going to "officially" send them
> to Alan and Linus or if you want me to do so or if there is some other
> procedure that I should follow.
> 
> -- 
> Adam J. Richter     __     ______________   4880 Stevens Creek Blvd, Suite 104
> adam@yggdrasil.com     \ /                  San Jose, California 95129-1034
> +1 408 261-6630         | g g d r a s i l   United States of America
> fax +1 408 261-6631      "Free Software For The Rest Of Us."
> 
> _______________________________________________
> Linux-atm-general mailing list
> Linux-atm-general@lists.sourceforge.net
> http://lists.sourceforge.net/lists/listinfo/linux-atm-general
> 


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: PATCH: linux-2.4.9/drivers/atm to new module_{init,exit} + some pci_device_id tables
@ 2001-08-20 22:15 Adam J. Richter
  0 siblings, 0 replies; 3+ messages in thread
From: Adam J. Richter @ 2001-08-20 22:15 UTC (permalink / raw)
  To: romieu, mitch; +Cc: linux-kernel

[-- Attachment #1: Type: text/plain, Size: 358 bytes --]

>Where's the patch ?

	Oops.  Sorry about that.  Here is the patch.

-- 
Adam J. Richter     __     ______________   4880 Stevens Creek Blvd, Suite 104
adam@yggdrasil.com     \ /                  San Jose, California 95129-1034
+1 408 261-6630         | g g d r a s i l   United States of America
fax +1 408 261-6631      "Free Software For The Rest Of Us."

[-- Attachment #2: atm.diffs --]
[-- Type: text/plain, Size: 16297 bytes --]

--- linux-2.4.9/drivers/block/genhd.c	Thu Jul 19 17:48:15 2001
+++ linux/drivers/block/genhd.c	Mon Aug 20 07:38:50 2001
@@ -27,7 +27,6 @@
 extern int net_dev_init(void);
 extern void console_map_init(void);
 extern int soc_probe(void);
-extern int atmdev_init(void);
 extern int i2o_init(void);
 extern int cpqarray_init(void);
 
@@ -53,9 +52,6 @@
 #endif
 #ifdef CONFIG_NET
 	net_dev_init();
-#endif
-#ifdef CONFIG_ATM
-	(void) atmdev_init();
 #endif
 #ifdef CONFIG_VT
 	console_map_init();
diff -r -u linux-2.4.9/drivers/atm/Makefile linux/drivers/atm/Makefile
--- linux-2.4.9/drivers/atm/Makefile	Mon Mar 26 15:36:30 2001
+++ linux/drivers/atm/Makefile	Mon Aug 20 04:54:23 2001
@@ -7,7 +7,7 @@
 
 export-objs := uPD98402.o suni.o idt77105.o
 
-obj-y := atmdev_init.o
+obj-y :=
 
 obj-$(CONFIG_ATM_ENI) += eni.o suni.o
 obj-$(CONFIG_ATM_ZATM) += zatm.o uPD98402.o
diff -r -u linux-2.4.9/drivers/atm/ambassador.c linux/drivers/atm/ambassador.c
--- linux-2.4.9/drivers/atm/ambassador.c	Wed Jun 27 16:18:13 2001
+++ linux/drivers/atm/ambassador.c	Mon Aug 20 04:54:23 2001
@@ -795,8 +795,7 @@
   return;
 }
 
-#ifdef MODULE
-static void drain_rx_pools (amb_dev * dev) {
+static void __exit drain_rx_pools (amb_dev * dev) {
   unsigned char pool;
   
   PRINTD (DBG_FLOW|DBG_POOL, "drain_rx_pools %p", dev);
@@ -806,7 +805,6 @@
   
   return;
 }
-#endif
 
 static inline void fill_rx_pool (amb_dev * dev, unsigned char pool, int priority) {
   rx_in rx;
@@ -2581,6 +2579,18 @@
 /********** module stuff **********/
 
 #ifdef MODULE
+static struct pci_device_id ambassador_pci_tbl[] __initdata = {
+	{
+	  vendor: PCI_VENDOR_ID_MADGE,
+	  device: PCI_DEVICE_ID_MADGE_AMBASSADOR,
+	  subvendor: PCI_ANY_ID,
+	  subdevice: PCI_ANY_ID,
+	},
+	{ }			/* Terminating entry */
+};
+MODULE_DEVICE_TABLE(pci, ambassador_pci_tbl);
+#endif
+
 EXPORT_NO_SYMBOLS;
 
 MODULE_AUTHOR(maintainer_string);
@@ -2600,9 +2610,7 @@
 MODULE_PARM_DESC(rx_lats, "number of extra buffers to cope with RX latencies");
 MODULE_PARM_DESC(pci_lat, "PCI latency in bus cycles");
 
-/********** module entry **********/
-
-int init_module (void) {
+static int __init amb_module_init (void) {
   int devs;
   
   PRINTD (DBG_FLOW|DBG_INIT, "init_module");
@@ -2634,9 +2642,7 @@
   return devs ? 0 : -ENODEV;
 }
 
-/********** module exit **********/
-
-void cleanup_module (void) {
+static void __exit amb_exit (void) {
   amb_dev * dev;
   
   PRINTD (DBG_FLOW|DBG_INIT, "cleanup_module");
@@ -2664,38 +2670,5 @@
   return;
 }
 
-#else
-
-/********** monolithic entry **********/
-
-int __init amb_detect (void) {
-  int devs;
-  
-  // sanity check - cast needed as printk does not support %Zu
-  if (sizeof(amb_mem) != 4*16 + 4*12) {
-    PRINTK (KERN_ERR, "Fix amb_mem (is %lu words).",
-	    (unsigned long) sizeof(amb_mem));
-    return 0;
-  }
-  
-  show_version();
-  
-  amb_check_args();
-  
-  // get the juice
-  devs = amb_probe();
-  
-  if (devs) {
-    init_timer (&housekeeping);
-    housekeeping.function = do_housekeeping;
-    // paranoia
-    housekeeping.data = 1;
-    set_timer (&housekeeping, 0);
-  } else {
-    PRINTK (KERN_INFO, "no (usable) adapters found");
-  }
-  
-  return devs;
-}
-
-#endif
+module_init(amb_module_init);
+module_exit(amb_exit);
diff -r -u linux-2.4.9/drivers/atm/atmdev_init.c linux/drivers/atm/atmdev_init.c
--- linux-2.4.9/drivers/atm/atmdev_init.c	Fri Dec 29 14:35:47 2000
+++ linux/drivers/atm/atmdev_init.c	Mon Aug 20 07:38:25 2001
@@ -1,60 +0,0 @@
-/* drivers/atm/atmdev_init.c - ATM device driver initialization */
- 
-/* Written 1995-2000 by Werner Almesberger, EPFL LRC/ICA */
- 
-
-#include <linux/config.h>
-#include <linux/init.h>
-
-
-#ifdef CONFIG_ATM_ZATM
-extern int zatm_detect(void);
-#endif
-#ifdef CONFIG_ATM_NICSTAR
-extern int nicstar_detect(void);
-#endif
-#ifdef CONFIG_ATM_AMBASSADOR
-extern int amb_detect(void);
-#endif
-#ifdef CONFIG_ATM_HORIZON
-extern int hrz_detect(void);
-#endif
-#ifdef CONFIG_ATM_IA
-extern int ia_detect(void);
-#endif
-#ifdef CONFIG_ATM_FORE200E
-extern int fore200e_detect(void);
-#endif
-
-
-/*
- * For historical reasons, atmdev_init returns the number of devices found.
- * Note that some detections may not go via atmdev_init (e.g. eni.c), so this
- * number is meaningless.
- */
-
-int __init atmdev_init(void)
-{
-	int devs;
-
-	devs = 0;
-#ifdef CONFIG_ATM_ZATM
-	devs += zatm_detect();
-#endif
-#ifdef CONFIG_ATM_NICSTAR
-	devs += nicstar_detect();
-#endif
-#ifdef CONFIG_ATM_AMBASSADOR
-	devs += amb_detect();
-#endif
-#ifdef CONFIG_ATM_HORIZON
-	devs += hrz_detect();
-#endif
-#ifdef CONFIG_ATM_IA
-	devs += ia_detect();
-#endif
-#ifdef CONFIG_ATM_FORE200E
-	devs += fore200e_detect();
-#endif
-	return devs;
-}
diff -r -u linux-2.4.9/drivers/atm/fore200e.c linux/drivers/atm/fore200e.c
--- linux-2.4.9/drivers/atm/fore200e.c	Wed Jun 27 16:18:13 2001
+++ linux/drivers/atm/fore200e.c	Mon Aug 20 04:54:23 2001
@@ -97,10 +97,21 @@
 static struct fore200e* fore200e_boards = NULL;
 
 
-#ifdef MODULE
 MODULE_AUTHOR("Christophe Lizzi - credits to Uwe Dannowski and Heikki Vatiainen");
 MODULE_DESCRIPTION("FORE Systems 200E-series ATM driver - version " FORE200E_VERSION);
 MODULE_SUPPORTED_DEVICE("PCA-200E, SBA-200E");
+
+#ifdef MODULE
+static struct pci_device_id fore200e_pci_tbl[] __initdata = {
+	{
+	  vendor: PCI_VENDOR_ID_FORE,
+	  device: PCI_DEVICE_ID_FORE_PCA200E,
+	  subvendor: PCI_ANY_ID,
+	  subdevice: PCI_ANY_ID,
+	},
+	{ }			/* Terminating entry */
+};
+MODULE_DEVICE_TABLE(pci, fore200e_pci_tbl);
 #endif
 
 
@@ -2584,8 +2595,8 @@
 }
 
 
-int __init
-fore200e_detect(void)
+static int __init
+fore200e_module_init(void)
 {
     const struct fore200e_bus* bus;
     struct       fore200e*     fore200e;
@@ -2622,8 +2633,7 @@
 }
 
 
-#ifdef MODULE
-static void
+static void __exit
 fore200e_cleanup(struct fore200e** head)
 {
     struct fore200e* fore200e = *head;
@@ -2634,7 +2644,6 @@
 
     kfree(fore200e);
 }
-#endif
 
 
 static int
@@ -2908,16 +2917,8 @@
 }
 
 
-#ifdef MODULE
-static int __init
-fore200e_module_init(void)
-{
-    DPRINTK(1, "module loaded\n");
-    return fore200e_detect() == 0;
-}
-
 static void __exit
-fore200e_module_cleanup(void)
+fore200e_module_exit(void)
 {
     while (fore200e_boards) {
 	fore200e_cleanup(&fore200e_boards);
@@ -2926,8 +2927,7 @@
 }
 
 module_init(fore200e_module_init);
-module_exit(fore200e_module_cleanup);
-#endif
+module_exit(fore200e_module_exit);
 
 
 static const struct atmdev_ops fore200e_ops =
diff -r -u linux-2.4.9/drivers/atm/horizon.c linux/drivers/atm/horizon.c
--- linux-2.4.9/drivers/atm/horizon.c	Fri Dec 29 14:35:47 2000
+++ linux/drivers/atm/horizon.c	Mon Aug 20 04:54:23 2001
@@ -352,6 +352,19 @@
   
 */
 
+#if LINUX_VERSION_CODE >= 0x020400 && defined(MODULE)
+static struct pci_device_id horizon_pci_tbl[] __initdata = {
+	{
+	  vendor: PCI_VENDOR_ID_MADGE,
+	  device: PCI_DEVICE_ID_MADGE_HORIZON,
+	  subvendor: PCI_ANY_ID,
+	  subdevice: PCI_ANY_ID,
+	},
+	{ }			/* Terminating entry */
+};
+MODULE_DEVICE_TABLE(pci, horizon_pci_tbl);
+#endif
+
 /********** globals **********/
 
 static hrz_dev * hrz_devs = NULL;
@@ -2930,7 +2943,6 @@
   return;
 }
 
-#ifdef MODULE
 EXPORT_NO_SYMBOLS;
 
 MODULE_AUTHOR(maintainer_string);
@@ -2946,9 +2958,7 @@
 MODULE_PARM_DESC(max_rx_size, "maximum size of RX AAL5 frames");
 MODULE_PARM_DESC(pci_lat, "PCI latency in bus cycles");
 
-/********** module entry **********/
-
-int init_module (void) {
+static int __init horizon_init (void) {
   int devs;
   
   // sanity check - cast is needed since printk does not support %Zu
@@ -2981,7 +2991,7 @@
 
 /********** module exit **********/
 
-void cleanup_module (void) {
+static void __exit horizon_exit (void) {
   hrz_dev * dev;
   PRINTD (DBG_FLOW, "cleanup_module");
   
@@ -3004,40 +3014,5 @@
   return;
 }
 
-#else
-
-/********** monolithic entry **********/
-
-int __init hrz_detect (void) {
-  int devs;
-  
-  // sanity check - cast is needed since printk does not support %Zu
-  if (sizeof(struct MEMMAP) != 128*1024/4) {
-    PRINTK (KERN_ERR, "Fix struct MEMMAP (is %lu fakewords).",
-	    (unsigned long) sizeof(struct MEMMAP));
-    return 0;
-  }
-  
-  show_version();
-  
-  // what about command line arguments?
-  // check arguments
-  hrz_check_args();
-  
-  // get the juice
-  devs = hrz_probe();
-  
-  if (devs) {
-    init_timer (&housekeeping);
-    housekeeping.function = do_housekeeping;
-    // paranoia
-    housekeeping.data = 1;
-    set_timer (&housekeeping, 0);
-  } else {
-    PRINTK (KERN_ERR, "no (usable) adapters found");
-  }
-
-  return devs;
-}
-
-#endif
+module_init(horizon_init);
+module_exit(horizon_exit);
diff -r -u linux-2.4.9/drivers/atm/iphase.c linux/drivers/atm/iphase.c
--- linux-2.4.9/drivers/atm/iphase.c	Thu Jun 28 14:48:08 2001
+++ linux/drivers/atm/iphase.c	Mon Aug 20 04:54:23 2001
@@ -89,6 +89,17 @@
             |IF_IADBG_ABR | IF_IADBG_EVENT*/ 0; 
 
 #ifdef MODULE
+static struct pci_device_id iphase_pci_tbl[] __initdata = {
+	{
+	  vendor: PCI_VENDOR_ID_IPHASE,
+	  device: PCI_DEVICE_ID_IPHASE_5575,
+	  subvendor: PCI_ANY_ID,
+	  subdevice: PCI_ANY_ID,
+	},
+	{ }			/* Terminating entry */
+};
+MODULE_DEVICE_TABLE(pci, iphase_pci_tbl);
+
 MODULE_PARM(IA_TX_BUF, "i");
 MODULE_PARM(IA_TX_BUF_SZ, "i");
 MODULE_PARM(IA_RX_BUF, "i");
@@ -3160,11 +3171,7 @@
 };  
 	  
   
-#if LINUX_VERSION_CODE >= 0x20312
-int __init ia_detect(void)
-#else
-__initfunc(int ia_detect(void)) 
-#endif 
+static int __init ia_module_init(void)
 {  
 	struct atm_dev *dev;  
 	IADEV *iadev;  
@@ -3173,7 +3180,7 @@
 	struct pci_dev *prev_dev;       
 	if (!pci_present()) {  
 		printk(KERN_ERR DEV_LABEL " driver but no PCI BIOS ?\n");  
-		return 0;  
+		return -ENODEV;  
 	}  
 	iadev = (IADEV *)kmalloc(sizeof(IADEV), GFP_KERNEL); 
 	if (!iadev) return -ENOMEM;  
@@ -3218,28 +3225,17 @@
                 memset((char*)iadev, 0, sizeof(IADEV)); 
 		index++;  
                 dev = NULL;
-	}  
-	return index;  
-}  
-  
+	}
+	if (index == 0)
+		return -ENODEV;
 
-#ifdef MODULE  
-  
-int init_module(void)  
-{  
-	IF_EVENT(printk(">ia init_module\n");)  
-	if (!ia_detect()) {  
-		printk(KERN_ERR DEV_LABEL ": no adapter found\n");  
-		return -ENXIO;  
-	}  
    	ia_timer.expires = jiffies + 3*HZ;
    	add_timer(&ia_timer); 
-   
-	return 0;  
+ 	return 0;
 }  
   
-  
-void cleanup_module(void)  
+
+static void __exit ia_exit(void)  
 {  
 	struct atm_dev *dev;  
 	IADEV *iadev;  
@@ -3291,5 +3287,5 @@
         }
 }  
 
-#endif  
-
+module_init(ia_module_init);
+module_exit(ia_exit);
diff -r -u linux-2.4.9/drivers/atm/nicstar.c linux/drivers/atm/nicstar.c
--- linux-2.4.9/drivers/atm/nicstar.c	Sun Jul 15 16:15:44 2001
+++ linux/drivers/atm/nicstar.c	Mon Aug 20 04:54:23 2001
@@ -272,12 +272,22 @@
 static char *mac[NS_MAX_CARDS];
 MODULE_PARM(mac, "1-" __MODULE_STRING(NS_MAX_CARDS) "s");
 
+#ifdef MODULE
+static struct pci_device_id nicstar_pci_tbl[] __initdata = {
+	{
+	  vendor: PCI_VENDOR_ID_IDT,
+	  device: PCI_DEVICE_ID_IDT_IDT77201,
+	  subvendor: PCI_ANY_ID,
+	  subdevice: PCI_ANY_ID,
+	},
+	{ }			/* Terminating entry */
+};
+MODULE_DEVICE_TABLE(pci, nicstar_pci_tbl);
+#endif
 
 /* Functions*******************************************************************/
 
-#ifdef MODULE
-
-int __init init_module(void)
+static int __init nicstar_init(void)
 {
    int i;
    unsigned error = 0;	/* Initialized to remove compile warning */
@@ -334,7 +344,7 @@
 
 
 
-void cleanup_module(void)
+static void __exit nicstar_exit(void)
 {
    int i, j;
    unsigned short pci_command;
@@ -419,59 +429,6 @@
 }
 
 
-#else
-
-int __init nicstar_detect(void)
-{
-   int i;
-   unsigned error = 0;	/* Initialized to remove compile warning */
-   struct pci_dev *pcidev;
-
-   if(!pci_present())
-   {
-      printk("nicstar: no PCI subsystem found.\n");
-      return -EIO;
-   }
-
-   for(i = 0; i < NS_MAX_CARDS; i++)
-      cards[i] = NULL;
-
-   pcidev = NULL;
-   for(i = 0; i < NS_MAX_CARDS; i++)
-   {
-      if ((pcidev = pci_find_device(PCI_VENDOR_ID_IDT,
-                                    PCI_DEVICE_ID_IDT_IDT77201,
-                                    pcidev)) == NULL)
-         break;
-
-      error = ns_init_card(i, pcidev);
-      if (error)
-         cards[i--] = NULL;	/* Try to find another card but don't increment index */
-   }
-
-   if (i == 0 && error)
-      return -EIO;
-
-   TXPRINTK("nicstar: TX debug enabled.\n");
-   RXPRINTK("nicstar: RX debug enabled.\n");
-   PRINTK("nicstar: General debug enabled.\n");
-#ifdef PHY_LOOPBACK
-   printk("nicstar: using PHY loopback.\n");
-#endif /* PHY_LOOPBACK */
-   XPRINTK("nicstar: init_module() returned.\n");
-
-   init_timer(&ns_timer);
-   ns_timer.expires = jiffies + NS_POLL_PERIOD;
-   ns_timer.data = 0UL;
-   ns_timer.function = ns_poll;
-   add_timer(&ns_timer);
-   return i;
-}
-
-
-#endif /* MODULE */
-
-
 static u32 ns_read_sram(ns_dev *card, u32 sram_address)
 {
    unsigned long flags;
@@ -3155,3 +3112,6 @@
    spin_unlock_irqrestore(&card->res_lock, flags);
    return (unsigned char) data;
 }
+
+module_init(nicstar_init);
+module_exit(nicstar_exit);
diff -r -u linux-2.4.9/drivers/atm/zatm.c linux/drivers/atm/zatm.c
--- linux-2.4.9/drivers/atm/zatm.c	Wed Jun 27 16:19:07 2001
+++ linux/drivers/atm/zatm.c	Mon Aug 20 06:22:59 2001
@@ -1801,68 +1801,77 @@
 };
 
 
-int __init zatm_detect(void)
+int __devinit zatm_probe(struct pci_dev *pci_dev,
+			 const struct pci_device_id *id)
 {
 	struct atm_dev *dev;
 	struct zatm_dev *zatm_dev;
-	int devs,type;
 
-	zatm_dev = (struct zatm_dev *) kmalloc(sizeof(struct zatm_dev),
-	    GFP_KERNEL);
-	if (!zatm_dev) return -ENOMEM;
-	devs = 0;
-	for (type = 0; type < 2; type++) {
-		struct pci_dev *pci_dev;
-
-		pci_dev = NULL;
-		while ((pci_dev = pci_find_device(PCI_VENDOR_ID_ZEITNET,type ?
-		    PCI_DEVICE_ID_ZEITNET_1225 : PCI_DEVICE_ID_ZEITNET_1221,
-		    pci_dev))) {
-			if (pci_enable_device(pci_dev)) break;
-			dev = atm_dev_register(DEV_LABEL,&ops,-1,NULL);
-			if (!dev) break;
-			zatm_dev->pci_dev = pci_dev;
-			ZATM_DEV(dev) = zatm_dev;
-			zatm_dev->copper = type;
-			if (zatm_init(dev) || zatm_start(dev)) {
-				atm_dev_deregister(dev);
-				break;
-			}
-			zatm_dev->more = zatm_boards;
-			zatm_boards = dev;
-			devs++;
-			zatm_dev = (struct zatm_dev *) kmalloc(sizeof(struct
-			    zatm_dev),GFP_KERNEL);
-			if (!zatm_dev) {
-				printk(KERN_EMERG "zatm.c: memory shortage\n");
-				return devs;
-			}
-		}
+	if (pci_enable_device(pci_dev))
+		return -ENODEV;
+
+	if ((zatm_dev = kmalloc(sizeof(struct zatm_dev), GFP_KERNEL)) == NULL)
+		return -ENOMEM;
+
+	dev = atm_dev_register(DEV_LABEL,&ops,-1,NULL);
+	if (!dev) {
+		kfree(zatm_dev);
+		return -ENOMEM;
 	}
-	kfree(zatm_dev);
-	return devs;
+	zatm_dev->pci_dev = pci_dev;
+	ZATM_DEV(dev) = zatm_dev;
+	zatm_dev->copper = (id->device == PCI_DEVICE_ID_ZEITNET_1221);
+	if (zatm_init(dev) || zatm_start(dev)) {
+		atm_dev_deregister(dev);
+		kfree(zatm_dev);
+		return -EIO;
+	}
+	zatm_dev->more = zatm_boards;
+	zatm_boards = dev;
+	MOD_INC_USE_COUNT;	/* Currently not removable if at least
+				   one card is found. */
+	return 0;
 }
 
+static void __devexit zatm_remove(struct pci_dev *pci_dev)
+{
+	/* STUB */
+}
 
-#ifdef MODULE
- 
-int init_module(void)
+
+static struct pci_device_id zatm_pci_tbl[] __devinitdata = {
+	{
+	  vendor: PCI_VENDOR_ID_ZEITNET,
+	  device: PCI_DEVICE_ID_ZEITNET_1221,
+	  subvendor: PCI_ANY_ID,
+	  subdevice: PCI_ANY_ID,
+	},
+	{
+	  vendor: PCI_VENDOR_ID_ZEITNET,
+	  device: PCI_DEVICE_ID_ZEITNET_1225,
+	  subvendor: PCI_ANY_ID,
+	  subdevice: PCI_ANY_ID,
+	},
+	{ }			/* Terminating entry */
+};
+MODULE_DEVICE_TABLE(pci, zatm_pci_tbl);
+
+static struct pci_driver zatm_driver = {
+	name:		"zatm",
+	id_table: 	zatm_pci_tbl,
+	probe:		zatm_probe,
+	remove:		zatm_remove,
+};
+
+static int __init zatm_module_init(void)
 {
-	if (!zatm_detect()) {
-		printk(KERN_ERR DEV_LABEL ": no adapter found\n");
-		return -ENXIO;
-	}
-	MOD_INC_USE_COUNT;
-	return 0;
+	return pci_register_driver(&zatm_driver);
 }
  
  
-void cleanup_module(void)
+static void __exit zatm_exit(void)
 {
-	/*
-	 * Well, there's no way to get rid of the driver yet, so we don't
-	 * have to clean up, right ? :-)
-	 */
+	pci_unregister_driver(&zatm_driver);
 }
- 
-#endif
+module_init(zatm_module_init);
+module_exit(zatm_exit);

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2001-08-21  1:21 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-08-20 14:58 PATCH: linux-2.4.9/drivers/atm to new module_{init,exit} + some pci_device_id tables Adam J. Richter
2001-08-21  1:21 ` [Linux-ATM-General] " John Fraizer
2001-08-20 22:15 Adam J. Richter

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).