[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[debian-users:01354] Re: Multiple Ethernet



  大沢です。

> 3c509 のドライバーを読む限りでは、モジュールのときは一つしか
> 対応してないようです。

  ちゅうわけでpatchです。

  /usr/src/linux/drivers/netで(ディレクトリは適当に読みかえてください)

  patch < このメールをセーブしたファイル

  で、あとはモジュールをリコンパイルしてください。
  モノがないので、うまくいくかはわかりません(;-)。重要なデータはバック
アップをとるなどしてから試したほうがいいでしょう。

--
大沢進 <susumu-o@xxxxxxxxxxxxxxx>
PGP public key http://www.win.or.jp/~susumu-o/public.key

--
*** 3c509.c-	Wed Oct 30 10:42:40 1996
--- 3c509.c	Fri Aug  1 05:44:35 1997
***************
*** 758,794 ****
  }
  
  #ifdef MODULE
! static char devicename[9] = { 0, };
! static struct device dev_3c509 = {
          devicename, /* device name is inserted by linux/drivers/net/net_init.c */
          0, 0, 0, 0,
          0, 0,
          0, 0, 0, NULL, el3_probe };
  
! static int io  = 0;
! static int irq = 0;
  
  int
  init_module(void)
  {
! 	dev_3c509.base_addr = io;
!         dev_3c509.irq       = irq;
!         if (!EISA_bus && !io) {
! 		printk("3c509: WARNING! Module load-time probing works reliably only for EISA bus!!\n");
  	}
- 	if (register_netdev(&dev_3c509) != 0)
- 		return -EIO;
  	return 0;
  }
  
  void
  cleanup_module(void)
  {
! 	unregister_netdev(&dev_3c509);
! 	kfree_s(dev_3c509.priv,sizeof(struct el3_private));
! 	dev_3c509.priv=NULL;
! 	/* If we don't do this, we can't re-insmod it later. */
! 	release_region(dev_3c509.base_addr, EL3_IO_EXTENT);
  }
  #endif /* MODULE */
  
--- 758,817 ----
  }
  
  #ifdef MODULE
! #define MAX_EL3_CARDS	4
! #define NAMELEN		8
! static char devicename[NAMELEN * MAX_EL3_CARDS] = { 0, };
! static struct device dev_3c509[MAX_EL3_CARDS] = {
          devicename, /* device name is inserted by linux/drivers/net/net_init.c */
          0, 0, 0, 0,
          0, 0,
          0, 0, 0, NULL, el3_probe };
  
! static int io[MAX_EL3_CARDS] = { 0, };
! static int irq[MAX_EL3_CARDS] = { 0, };
  
  int
  init_module(void)
  {
! 	int this_dev,found = 0;
! 	for (this_dev = 0; this_dev < MAX_EL3_CARDS; this_dev++){
! 		struct device *dev = &dev_3c509[this_dev];
! 		dev->name = devicename+(NAMELEN*this_dev);
! 		dev->irq = irq[this_dev];
! 		dev->base_addr = io[this_dev];
! 		if (!EISA_bus && !io) {
! 			printk("3c509: WARNING! Module load-time probing works reliably only for EISA bus!!\n");
! 		}
! 		if (io[this_dev] == 0) {
! 			if(this_dev != 0) break;	/* only complain once */
! 			printk("3c509: Module autoprobing not allowed. Append \"io=0xNNN\" value(s).\n");
! 			return -EPERM;
! 		}
! 		if (register_netdev(dev) != 0) {
! 			printk("3c509: No EtherLink III card found (io=0x%x).\n",io[this_dev]);
! 			if (found != 0) return 0;	/* Got at least one */	
! 			return -ENXIO;
! 		}
! 		found++;
  	}
  	return 0;
  }
  
  void
  cleanup_module(void)
  {
! 	int this_dev;
! 	
! 	for (this_dev = 0; this_dev < MAX_EL3_CARDS; this_dev++) {
! 		struct device *dev = &dev_3c509[this_dev];
! 		if (dev->priv != NULL) {
! 			kfree_s(dev.priv,sizeof(struct el3_private));
! 			dev.priv=NULL;
! 			/* If we don't do this, we can't re-insmod it later. */
! 			release_region(dev->base_addr, EL3_IO_EXTENT);
! 			unregister_netdev(dev);
! 		}
! 	}
  }
  #endif /* MODULE */