From: Andy P. <at...@us...> - 2002-04-11 14:36:32
|
Update of /cvsroot/linux-vax/kernel-2.4/drivers/net/tokenring In directory usw-pr-cvs1:/tmp/cvs-serv30336/net/tokenring Modified Files: Config.in abyss.c ibmtr.c lanstreamer.c lanstreamer.h madgemc.c olympic.c olympic.h smctr.c smctr.h smctr_firmware.h tms380tr.c tms380tr.h tmsisa.c tmspci.c Removed Files: ibmtr.h Log Message: synch 2.4.15 commit 50 Index: Config.in =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/drivers/net/tokenring/Config.in,v retrieving revision 1.1.1.2 retrieving revision 1.2 diff -u -r1.1.1.2 -r1.2 --- Config.in 25 Feb 2001 23:15:00 -0000 1.1.1.2 +++ Config.in 11 Apr 2002 12:37:51 -0000 1.2 @@ -5,21 +5,29 @@ mainmenu_option next_comment comment 'Token Ring devices' -bool 'Token Ring driver support' CONFIG_TR +# So far, we only have PCI, ISA, and MCA token ring devices +if [ "$CONFIG_PCI" = "y" -o "$CONFIG_ISA" = "y" -o "$CONFIG_MCA" = "y" ]; then + bool 'Token Ring driver support' CONFIG_TR +else + define_bool CONFIG_TR n +fi + if [ "$CONFIG_TR" != "n" ]; then - dep_tristate ' IBM Tropic chipset based adapter support' CONFIG_IBMTR $CONFIG_TR - dep_tristate ' IBM Olympic chipset PCI adapter support' CONFIG_IBMOL $CONFIG_TR - dep_tristate ' IBM Lanstreamer chipset PCI adapter support' CONFIG_IBMLS $CONFIG_TR - dep_tristate ' Generic TMS380 Token Ring ISA/PCI adapter support' CONFIG_TMS380TR $CONFIG_TR + if [ "$CONFIG_ISA" = "y" -o "$CONFIG_MCA" = "y" ]; then + tristate ' IBM Tropic chipset based adapter support' CONFIG_IBMTR + fi + dep_tristate ' IBM Olympic chipset PCI adapter support' CONFIG_IBMOL $CONFIG_TR $CONFIG_PCI + dep_tristate ' IBM Lanstreamer chipset PCI adapter support' CONFIG_IBMLS $CONFIG_TR $CONFIG_PCI + tristate ' Generic TMS380 Token Ring ISA/PCI adapter support' CONFIG_TMS380TR if [ "$CONFIG_TMS380TR" != "n" ]; then - dep_tristate ' Generic TMS380 PCI support' CONFIG_TMSPCI $CONFIG_TMS380TR - dep_tristate ' Generic TMS380 ISA support' CONFIG_TMSISA $CONFIG_TMS380TR - dep_tristate ' Madge Smart 16/4 PCI Mk2 support' CONFIG_ABYSS $CONFIG_TMS380TR - if [ "$CONFIG_MCA" = "y" ]; then - dep_tristate ' Madge Smart 16/4 Ringnode MicroChannel' CONFIG_MADGEMC $CONFIG_TMS380TR - fi + dep_tristate ' Generic TMS380 PCI support' CONFIG_TMSPCI $CONFIG_PCI + dep_tristate ' Generic TMS380 ISA support' CONFIG_TMSISA $CONFIG_ISA + dep_tristate ' Madge Smart 16/4 PCI Mk2 support' CONFIG_ABYSS $CONFIG_PCI + dep_tristate ' Madge Smart 16/4 Ringnode MicroChannel' CONFIG_MADGEMC $CONFIG_MCA + fi + if [ "$CONFIG_ISA" = "y" -o "$CONFIG_MCA" = "y" ]; then + tristate ' SMC ISA/MCA adapter support' CONFIG_SMCTR fi - dep_tristate ' SMC ISA/MCA adapter support' CONFIG_SMCTR $CONFIG_TR fi endmenu Index: abyss.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/drivers/net/tokenring/abyss.c,v retrieving revision 1.1.1.2 retrieving revision 1.2 diff -u -r1.1.1.2 -r1.2 --- abyss.c 25 Feb 2001 23:15:00 -0000 1.1.1.2 +++ abyss.c 11 Apr 2002 12:37:51 -0000 1.2 @@ -53,6 +53,8 @@ }; MODULE_DEVICE_TABLE(pci, abyss_pci_tbl); +MODULE_LICENSE("GPL"); + static int abyss_open(struct net_device *dev); static int abyss_close(struct net_device *dev); static void abyss_enable(struct net_device *dev); @@ -137,8 +139,7 @@ */ dev->base_addr += 0x10; - ret = tmsdev_init(dev,0,pdev); - /* XXX: should be the max PCI32 DMA max */ + ret = tmsdev_init(dev, PCI_MAX_ADDRESS, pdev); if (ret) { printk("%s: unable to get memory for dev->priv.\n", dev->name); Index: ibmtr.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/drivers/net/tokenring/ibmtr.c,v retrieving revision 1.1.1.2 retrieving revision 1.2 diff -u -r1.1.1.2 -r1.2 --- ibmtr.c 25 Feb 2001 23:15:00 -0000 1.1.1.2 +++ ibmtr.c 11 Apr 2002 12:37:51 -0000 1.2 @@ -7,10 +7,11 @@ * This device driver should work with Any IBM Token Ring Card that does * not use DMA. * - * I used Donald Becker's (be...@ce...) device driver work + * I used Donald Becker's (be...@sc...) device driver work * as a base for most of my initial work. * - * Changes by Peter De Schrijver (Pet...@li...) : + * Changes by Peter De Schrijver + * (Pet...@li...) : * [...3272 lines suppressed...] + outb(0,dev_ibmtr[i]->base_addr+ADAPTRESETREL); } + unregister_trdev(dev_ibmtr[i]); + free_irq(dev_ibmtr[i]->irq, dev_ibmtr[i]); + release_region(dev_ibmtr[i]->base_addr, IBMTR_IO_EXTENT); +#ifndef PCMCIA + { + struct tok_info *ti = (struct tok_info *)dev_ibmtr[i]->priv ; + iounmap((u32 *)ti->mmio) ; + iounmap((u32 *)ti->sram_virt) ; + } +#endif + kfree(dev_ibmtr[i]->priv); + kfree(dev_ibmtr[i]); + dev_ibmtr[i] = NULL; + } } -#endif /* MODULE */ -#endif +#endif /* MODULE */ Index: lanstreamer.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/drivers/net/tokenring/lanstreamer.c,v retrieving revision 1.1.1.2 retrieving revision 1.2 diff -u -r1.1.1.2 -r1.2 --- lanstreamer.c 25 Feb 2001 23:15:00 -0000 1.1.1.2 +++ lanstreamer.c 11 Apr 2002 12:37:51 -0000 1.2 @@ -59,12 +59,10 @@ * 03/03/00 - Merged to kernel, indented -kr -i8 -bri0, fixed some missing * malloc free checks, reviewed code. <al...@re...> * 03/13/00 - Added spinlocks for smp + * 03/08/01 - Added support for module_init() and module_exit() * * To Do: * - * 1) Test Network Monitor Mode - * 2) Add auto reset logic on adapter errors - * 3) Test with varying options * * If Problems do Occur * Most problems can be rectified by either closing and opening the interface @@ -123,7 +121,14 @@ * Official releases will only have an a.b.c version number format. */ -static char *version = "LanStreamer.c v0.3.1 03/13/99 - Mike Sullivan"; +static char version[] = "LanStreamer.c v0.4.0 03/08/01 - Mike Sullivan"; + +static struct pci_device_id streamer_pci_tbl[] __initdata = { + { PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_TR, PCI_ANY_ID, PCI_ANY_ID,}, + {} /* terminating entry */ +}; +MODULE_DEVICE_TABLE(pci,streamer_pci_tbl); + static char *open_maj_error[] = { "No error", "Lobe Media Test", "Physical Insertion", @@ -170,8 +175,7 @@ MODULE_PARM(message_level, "1-" __MODULE_STRING(STREAMER_MAX_ADAPTERS) "i"); -static int streamer_scan(struct net_device *dev); -static int streamer_init(struct net_device *dev); +static int streamer_reset(struct net_device *dev); static int streamer_open(struct net_device *dev); static int streamer_xmit(struct sk_buff *skb, struct net_device *dev); static int streamer_close(struct net_device *dev); @@ -186,98 +190,190 @@ static void streamer_asb_bh(struct net_device *dev); #if STREAMER_NETWORK_MONITOR #ifdef CONFIG_PROC_FS +static int streamer_proc_info(char *buffer, char **start, off_t offset, + int length, int *eof, void *data); static int sprintf_info(char *buffer, struct net_device *dev); +struct streamer_private *dev_streamer=NULL; #endif #endif -int __init streamer_probe(struct net_device *dev) +static int __devinit streamer_init_one(struct pci_dev *pdev, + const struct pci_device_id *ent) { - int cards_found; - - cards_found = streamer_scan(dev); - return cards_found ? 0 : -ENODEV; -} - -static int __init streamer_scan(struct net_device *dev) -{ - struct pci_dev *pci_device = NULL; + struct net_device *dev=NULL; struct streamer_private *streamer_priv; - int card_no = 0; - if (pci_present()) - { - while ((pci_device = pci_find_device(PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_TR, pci_device))) - { - if (pci_enable_device(pci_device)) - continue; - pci_set_master(pci_device); + __u32 pio_start, pio_end, pio_flags, pio_len; + __u32 mmio_start, mmio_end, mmio_flags, mmio_len; + int rc=0; + static int card_no=-1; - /* Check to see if io has been allocated, if so, we've already done this card, - so continue on the card discovery loop */ +#if STREAMER_DEBUG + printk("lanstreamer::streamer_init_one, entry pdev %p\n",pdev); +#endif - if (check_region(pci_resource_start(pci_device,0), STREAMER_IO_SPACE)) - { card_no++; - continue; - } - - streamer_priv = kmalloc(sizeof(struct streamer_private), GFP_KERNEL); - if(streamer_priv==NULL) - { - printk(KERN_ERR "lanstreamer: out of memory.\n"); - break; - } - memset(streamer_priv, 0, sizeof(struct streamer_private)); - init_waitqueue_head(&streamer_priv->srb_wait); - init_waitqueue_head(&streamer_priv->trb_wait); -#ifndef MODULE - dev = init_trdev(dev, 0); - if(dev==NULL) - { - kfree(streamer_priv); + dev=init_trdev(dev, sizeof(*streamer_priv)); + if(dev==NULL) { printk(KERN_ERR "lanstreamer: out of memory.\n"); - break; + return -ENOMEM; } SET_MODULE_OWNER(dev); + streamer_priv=dev->priv; + +#if STREAMER_NETWORK_MONITOR +#ifdef CONFIG_PROC_FS + if (!dev_streamer) { + create_proc_read_entry("net/streamer_tr",0,0,streamer_proc_info,NULL); + } + streamer_priv->next=dev_streamer; + dev_streamer=streamer_priv; #endif - dev->priv = (void *) streamer_priv; -#if STREAMER_DEBUG - printk("pci_device: %p, dev:%p, dev->priv: %p\n", - pci_device, dev, dev->priv); #endif - dev->irq = pci_device->irq; - dev->base_addr = pci_resource_start(pci_device, 0); - dev->init = &streamer_init; - streamer_priv->streamer_card_name = (char *)pci_device->resource[0].name; - streamer_priv->streamer_mmio = - ioremap(pci_resource_start(pci_device, 1), 256); - - if ((pkt_buf_sz[card_no] < 100) || (pkt_buf_sz[card_no] > 18000)) - streamer_priv->pkt_buf_sz = PKT_BUF_SZ; - else - streamer_priv->pkt_buf_sz = pkt_buf_sz[card_no]; - - streamer_priv->streamer_ring_speed = ringspeed[card_no]; - streamer_priv->streamer_message_level = message_level[card_no]; - - if (streamer_init(dev) == -1) { - unregister_netdevice(dev); - kfree(dev->priv); - return 0; + + if (pci_enable_device(pdev)) { + printk(KERN_ERR "lanstreamer: unable to enable pci device\n"); + rc=-EIO; + goto err_out; + } + + pci_set_master(pdev); + + pio_start = pci_resource_start(pdev, 0); + pio_end = pci_resource_end(pdev, 0); + pio_flags = pci_resource_flags(pdev, 0); + pio_len = pci_resource_len(pdev, 0); + + mmio_start = pci_resource_start(pdev, 1); + mmio_end = pci_resource_end(pdev, 1); + mmio_flags = pci_resource_flags(pdev, 1); + mmio_len = pci_resource_len(pdev, 1); + +#if STREAMER_DEBUG + printk("lanstreamer: pio_start %x pio_end %x pio_len %x pio_flags %x\n", + pio_start, pio_end, pio_len, pio_flags); + printk("lanstreamer: mmio_start %x mmio_end %x mmio_len %x mmio_flags %x\n", + mmio_start, mmio_end, mmio_flags, mmio_len); +#endif + + if (!request_region(pio_start, pio_len, "lanstreamer")) { + printk(KERN_ERR "lanstreamer: unable to get pci io addr %x\n",pio_start); + rc= -EBUSY; + goto err_out; + } + + if (!request_mem_region(mmio_start, mmio_len, "lanstreamer")) { + printk(KERN_ERR "lanstreamer: unable to get pci mmio addr %x\n",mmio_start); + rc= -EBUSY; + goto err_out_free_pio; + } + + streamer_priv->streamer_mmio=ioremap(mmio_start, mmio_len); + if (streamer_priv->streamer_mmio == NULL) { + printk(KERN_ERR "lanstreamer: unable to remap MMIO %x\n",mmio_start); + rc= -EIO; + goto err_out_free_mmio; } + init_waitqueue_head(&streamer_priv->srb_wait); + init_waitqueue_head(&streamer_priv->trb_wait); + dev->open = &streamer_open; dev->hard_start_xmit = &streamer_xmit; dev->change_mtu = &streamer_change_mtu; - dev->stop = &streamer_close; dev->do_ioctl = NULL; dev->set_multicast_list = &streamer_set_rx_mode; dev->get_stats = &streamer_get_stats; dev->set_mac_address = &streamer_set_mac_address; - return 1; + dev->irq = pdev->irq; + dev->base_addr=pio_start; + + streamer_priv->streamer_card_name = (char *)pdev->resource[0].name; + streamer_priv->pci_dev=pdev; + + if ((pkt_buf_sz[card_no] < 100) || (pkt_buf_sz[card_no] > 18000)) + streamer_priv->pkt_buf_sz = PKT_BUF_SZ; + else + streamer_priv->pkt_buf_sz = pkt_buf_sz[card_no]; + + streamer_priv->streamer_ring_speed = ringspeed[card_no]; + streamer_priv->streamer_message_level = message_level[card_no]; + + pci_set_drvdata(pdev, dev); + + spin_lock_init(&streamer_priv->streamer_lock); + + printk("%s \n", version); + printk("%s: %s. I/O at %hx, MMIO at %p, using irq %d\n",dev->name, + streamer_priv->streamer_card_name, + (unsigned int) dev->base_addr, + streamer_priv->streamer_mmio, + dev->irq); + + if (!streamer_reset(dev)) { + return 0; + } + + iounmap(streamer_priv->streamer_mmio); +err_out_free_mmio: + release_mem_region(mmio_start, mmio_len); +err_out_free_pio: + release_region(pio_start, pio_len); +err_out: + unregister_trdev(dev); + kfree(dev); +#if STREAMER_DEBUG + printk("lanstreamer: Exit error %x\n",rc); +#endif + return rc; +} + +static void __devexit streamer_remove_one(struct pci_dev *pdev) { + struct net_device *dev=pci_get_drvdata(pdev); + struct streamer_private *streamer_priv; + +#if STREAMER_DEBUG + printk("lanstreamer::streamer_remove_one entry pdev %p\n",pdev); +#endif + + if (dev == NULL) { + printk(KERN_ERR "lanstreamer::streamer_remove_one, ERROR dev is NULL\n"); + return; } + + streamer_priv=dev->priv; + if (streamer_priv == NULL) { + printk(KERN_ERR "lanstreamer::streamer_remove_one, ERROR dev->priv is NULL\n"); + return; } - return 0; + +#if STREAMER_NETWORK_MONITOR +#ifdef CONFIG_PROC_FS + { + struct streamer_private *slast; + struct streamer_private *scurrent; + if (streamer_priv == dev_streamer) { + dev_streamer=dev_streamer->next; + } else { + for(slast=scurrent=dev_streamer; dev_streamer; slast=scurrent, scurrent=scurrent->next) { + if (scurrent == streamer_priv) { + slast->next=scurrent->next; + break; + } + } + } + if (!dev_streamer) { + remove_proc_entry("net/streamer_tr", NULL); + } + } +#endif +#endif + + unregister_trdev(dev); + release_region(pci_resource_start(pdev, 0), pci_resource_len(pdev,0)); + release_mem_region(pci_resource_start(pdev, 1), pci_resource_len(pdev,1)); + kfree(dev); + pci_set_drvdata(pdev, NULL); } @@ -424,32 +520,6 @@ return 0; } -static int __init streamer_init(struct net_device *dev) -{ - struct streamer_private *streamer_priv; - __u8 *streamer_mmio; - int rc; - - streamer_priv=(struct streamer_private *)dev->priv; - streamer_mmio=streamer_priv->streamer_mmio; - - spin_lock_init(&streamer_priv->streamer_lock); - - printk("%s \n", version); - printk("%s: %s. I/O at %hx, MMIO at %p, using irq %d\n",dev->name, - streamer_priv->streamer_card_name, - (unsigned int) dev->base_addr, - streamer_priv->streamer_mmio, - dev->irq); - - request_region(dev->base_addr, STREAMER_IO_SPACE, "streamer"); - - rc=streamer_reset(dev); - return rc; -} - - - static int streamer_open(struct net_device *dev) { struct streamer_private *streamer_priv = (struct streamer_private *) dev->priv; @@ -465,7 +535,7 @@ rc=streamer_reset(dev); } - if (request_irq(dev->irq, &streamer_interrupt, SA_SHIRQ, "streamer", dev)) { + if (request_irq(dev->irq, &streamer_interrupt, SA_SHIRQ, "lanstreamer", dev)) { return -EAGAIN; } #if STREAMER_DEBUG @@ -563,7 +633,7 @@ * timed out. */ writew(srb_open + 2, streamer_mmio + LAPA); - srb_word = ntohs(readw(streamer_mmio + LAPD)) & 0xFF; + srb_word = ntohs(readw(streamer_mmio + LAPD)) >> 8; if (srb_word == STREAMER_CLEAR_RET_CODE) { printk(KERN_WARNING "%s: Adapter Open time out or error.\n", dev->name); @@ -1618,27 +1688,24 @@ static int streamer_proc_info(char *buffer, char **start, off_t offset, int length, int *eof, void *data) { + struct streamer_private *sdev=NULL; struct pci_dev *pci_device = NULL; int len = 0; off_t begin = 0; off_t pos = 0; int size; - struct device *dev; - + struct net_device *dev; size = sprintf(buffer, "IBM LanStreamer/MPC Chipset Token Ring Adapters\n"); pos += size; len += size; - while ((pci_device = pci_find_device(PCI_VENDOR_ID_IBM, PCI_DEVICE_ID_IBM_TR, pci_device))) - { + for(sdev=dev_streamer; sdev; sdev=sdev->next) { + pci_device=sdev->pci_dev; + dev=pci_get_drvdata(pci_device); - for (dev = dev_base; dev != NULL; dev = dev->next) - { - if (dev->base_addr == pci_device->resource[0].start) - { /* Yep, a Streamer device */ size = sprintf_info(buffer + len, dev); len += size; pos = begin + len; @@ -1649,9 +1716,7 @@ } if (pos > offset + length) break; - } /* if */ } /* for */ - } /* While */ *start = buffer + (offset - begin); /* Start of wanted data */ len -= (offset - begin); /* Start slop */ @@ -1743,66 +1808,21 @@ #endif #endif -#ifdef MODULE - -static struct net_device *dev_streamer[STREAMER_MAX_ADAPTERS]; - -int init_module(void) -{ - int i; - -#if STREAMER_NETWORK_MONITOR -#ifdef CONFIG_PROC_FS - create_proc_read_entry("net/streamer_tr",0,0,streamer_proc_info,NULL); -#endif -#endif - for (i = 0; (i < STREAMER_MAX_ADAPTERS); i++) - { - dev_streamer[i] = NULL; - dev_streamer[i] = init_trdev(dev_streamer[i], 0); - SET_MODULE_OWNER(dev_streamer[i]); - if (dev_streamer[i] == NULL) - return -ENOMEM; - - dev_streamer[i]->init = &streamer_probe; - - if (register_trdev(dev_streamer[i]) != 0) { - kfree(dev_streamer[i]); - dev_streamer[i] = NULL; - if (i == 0) - { - printk(KERN_INFO "Streamer: No IBM LanStreamer PCI Token Ring cards found in system.\n"); - return -EIO; - } else { - printk(KERN_INFO "Streamer: %d IBM LanStreamer PCI Token Ring card(s) found in system.\n", i); - return 0; - } - } - } +static struct pci_driver streamer_pci_driver = { + name: "lanstreamer", + id_table: streamer_pci_tbl, + probe: streamer_init_one, + remove: streamer_remove_one, +}; - return 0; +static int __init streamer_init_module(void) { + return pci_module_init(&streamer_pci_driver); } -void cleanup_module(void) -{ - int i; - struct streamer_private *streamer_priv; - - for (i = 0; i < STREAMER_MAX_ADAPTERS; i++) - if (dev_streamer[i]) { - unregister_trdev(dev_streamer[i]); - release_region(dev_streamer[i]->base_addr, STREAMER_IO_SPACE); - streamer_priv=(struct streamer_private *)dev_streamer[i]->priv; - kfree(streamer_priv->streamer_rx_ring); - kfree(streamer_priv->streamer_tx_ring); - kfree(dev_streamer[i]->priv); - kfree(dev_streamer[i]); - dev_streamer[i] = NULL; - } -#if STREAMER_NETWORK_MONITOR -#ifdef CONFIG_PROC_FS - remove_proc_entry("net/streamer_tr", NULL); -#endif -#endif +static void __exit streamer_cleanup_module(void) { + pci_unregister_driver(&streamer_pci_driver); } -#endif /* MODULE */ + +module_init(streamer_init_module); +module_exit(streamer_cleanup_module); +MODULE_LICENSE("GPL"); Index: lanstreamer.h =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/drivers/net/tokenring/lanstreamer.h,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- lanstreamer.h 14 Jan 2001 17:38:43 -0000 1.1.1.1 +++ lanstreamer.h 11 Apr 2002 12:37:51 -0000 1.2 @@ -257,6 +257,8 @@ __u16 arb; __u16 asb; + struct streamer_private *next; + struct pci_dev *pci_dev; __u8 *streamer_mmio; char *streamer_card_name; Index: madgemc.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/drivers/net/tokenring/madgemc.c,v retrieving revision 1.1.1.2 retrieving revision 1.2 diff -u -r1.1.1.2 -r1.2 --- madgemc.c 25 Feb 2001 23:15:00 -0000 1.1.1.2 +++ madgemc.c 11 Apr 2002 12:37:51 -0000 1.2 @@ -17,7 +17,7 @@ * 16-Jan-00 AF Created * */ -static const char *version = "madgemc.c: v0.91 23/01/2000 by Adam Fritzler\n"; +static const char version[] = "madgemc.c: v0.91 23/01/2000 by Adam Fritzler\n"; #include <linux/module.h> #include <linux/mca.h> @@ -61,7 +61,7 @@ struct madgemc_card *next; }; -static struct madgemc_card *madgemc_card_list = NULL; +static struct madgemc_card *madgemc_card_list; int madgemc_probe(void); @@ -155,7 +155,7 @@ int __init madgemc_probe(void) { - static int versionprinted = 0; + static int versionprinted; struct net_device *dev; struct net_local *tp; struct madgemc_card *card; @@ -349,6 +349,7 @@ printk(":%2.2x", dev->dev_addr[i]); printk("\n"); + /* XXX is ISA_MAX_ADDRESS correct here? */ if (tmsdev_init(dev, ISA_MAX_ADDRESS, NULL)) { printk("%s: unable to get memory for dev->priv.\n", dev->name); @@ -525,7 +526,7 @@ */ static void madgemc_setregpage(struct net_device *dev, int page) { - static int reg1 = 0; + static int reg1; reg1 = inb(dev->base_addr + MC_CONTROL_REG1); if ((page == 0) && (reg1 & MC_CONTROL_REG1_SRSX)) { @@ -792,6 +793,8 @@ } #endif /* MODULE */ +MODULE_LICENSE("GPL"); + /* * Local variables: @@ -803,3 +806,4 @@ * tab-width: 8 * End: */ + Index: olympic.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/drivers/net/tokenring/olympic.c,v retrieving revision 1.1.1.2 retrieving revision 1.2 diff -u -r1.1.1.2 -r1.2 --- olympic.c 25 Feb 2001 23:15:00 -0000 1.1.1.2 +++ olympic.c 11 Apr 2002 12:37:51 -0000 1.2 @@ -1,6 +1,6 @@ /* * olympic.c (c) 1999 Peter De Schrijver All Rights Reserved - * 1999 Mike Phillips (ph...@am...) + * 1999/2000 Mike Phillips (mi...@li...) * * Linux driver for IBM PCI tokenring cards based on the Pit/Pit-Phy/Olympic * chipset. @@ -39,9 +39,23 @@ * because they weren't going through read[wl](), there all * the results had to be in memory in le32 values. kdaaker * [...1191 lines suppressed...] - if (dev_olympic[i]) { - unregister_trdev(dev_olympic[i]); - release_region(dev_olympic[i]->base_addr, OLYMPIC_IO_SPACE); - kfree(dev_olympic[i]->priv); - kfree(dev_olympic[i]); - dev_olympic[i] = NULL; - } - -#if OLYMPIC_NETWORK_MONITOR -#ifdef CONFIG_PROC_FS - remove_proc_entry("net/olympic_tr", NULL) ; -#endif -#endif -} -#endif /* MODULE */ +module_init(olympic_pci_init) ; +module_exit(olympic_pci_cleanup) ; + +MODULE_LICENSE("GPL"); Index: olympic.h =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/drivers/net/tokenring/olympic.h,v retrieving revision 1.1.1.2 retrieving revision 1.2 diff -u -r1.1.1.2 -r1.2 --- olympic.h 25 Feb 2001 23:15:00 -0000 1.1.1.2 +++ olympic.h 11 Apr 2002 12:37:51 -0000 1.2 @@ -1,6 +1,6 @@ /* * olympic.h (c) 1999 Peter De Schrijver All Rights Reserved - * 1999 Mike Phillips (ph...@am...) + * 1999,2000 Mike Phillips (mi...@li...) * * Linux driver for IBM PCI tokenring cards based on the olympic and the PIT/PHY chipset. * @@ -19,6 +19,7 @@ #define BCTL 0x70 #define BCTL_SOFTRESET (1<<15) #define BCTL_MIMREB (1<<6) +#define BCTL_MODE_INDICATOR (1<<5) #define GPR 0x4a #define GPR_OPTI_BF (1<<6) @@ -124,6 +125,9 @@ #define TXSTATQCNT_2 0xe4 #define TXCSA_1 0xc8 #define TXCSA_2 0xe8 +/* Cardbus */ +#define FERMASK 0xf4 +#define FERMASK_INT_BIT (1<<15) #define OLYMPIC_IO_SPACE 256 @@ -210,43 +214,44 @@ /* xxxx These structures are all little endian in hardware. */ struct olympic_tx_desc { - __u32 buffer; - __u32 status_length; + u32 buffer; + u32 status_length; }; struct olympic_tx_status { - __u32 status; + u32 status; }; struct olympic_rx_desc { - __u32 buffer; - __u32 res_length; + u32 buffer; + u32 res_length; }; struct olympic_rx_status { - __u32 fragmentcnt_framelen; - __u32 status_buffercnt; + u32 fragmentcnt_framelen; + u32 status_buffercnt; }; /* xxxx END These structures are all little endian in hardware. */ /* xxxx There may be more, but I'm pretty sure about these */ struct mac_receive_buffer { - __u16 next ; - __u8 padding ; - __u8 frame_status ; - __u16 buffer_length ; - __u8 frame_data ; + u16 next ; + u8 padding ; + u8 frame_status ; + u16 buffer_length ; + u8 frame_data ; }; struct olympic_private { - __u16 srb; /* be16 */ - __u16 trb; /* be16 */ - __u16 arb; /* be16 */ - __u16 asb; /* be16 */ - - __u8 *olympic_mmio; - __u8 *olympic_lap; + u16 srb; /* be16 */ + u16 trb; /* be16 */ + u16 arb; /* be16 */ + u16 asb; /* be16 */ + + u8 *olympic_mmio; + u8 *olympic_lap; + struct pci_dev *pdev ; char *olympic_card_name ; spinlock_t olympic_lock ; @@ -259,51 +264,57 @@ volatile int trb_queued; /* True if a TRB is posted */ wait_queue_head_t trb_wait ; + /* These must be on a 4 byte boundary. */ struct olympic_rx_desc olympic_rx_ring[OLYMPIC_RX_RING_SIZE]; struct olympic_tx_desc olympic_tx_ring[OLYMPIC_TX_RING_SIZE]; struct olympic_rx_status olympic_rx_status_ring[OLYMPIC_RX_RING_SIZE]; struct olympic_tx_status olympic_tx_status_ring[OLYMPIC_TX_RING_SIZE]; + struct sk_buff *tx_ring_skb[OLYMPIC_TX_RING_SIZE], *rx_ring_skb[OLYMPIC_RX_RING_SIZE]; int tx_ring_free, tx_ring_last_status, rx_ring_last_received,rx_status_last_received, free_tx_ring_entries; struct net_device_stats olympic_stats ; - __u16 olympic_lan_status ; - __u8 olympic_ring_speed ; - __u16 pkt_buf_sz ; - __u8 olympic_receive_options, olympic_copy_all_options, olympic_message_level; - __u16 olympic_addr_table_addr, olympic_parms_addr ; - __u8 olympic_laa[6] ; + u16 olympic_lan_status ; + u8 olympic_ring_speed ; + u16 pkt_buf_sz ; + u8 olympic_receive_options, olympic_copy_all_options,olympic_message_level, olympic_network_monitor; + u16 olympic_addr_table_addr, olympic_parms_addr ; + u8 olympic_laa[6] ; + u32 rx_ring_dma_addr; + u32 rx_status_ring_dma_addr; + u32 tx_ring_dma_addr; + u32 tx_status_ring_dma_addr; }; struct olympic_adapter_addr_table { - __u8 node_addr[6] ; - __u8 reserved[4] ; - __u8 func_addr[4] ; + u8 node_addr[6] ; + u8 reserved[4] ; + u8 func_addr[4] ; } ; struct olympic_parameters_table { - __u8 phys_addr[4] ; - __u8 up_node_addr[6] ; - __u8 up_phys_addr[4] ; - __u8 poll_addr[6] ; - __u16 reserved ; - __u16 acc_priority ; - __u16 auth_source_class ; - __u16 att_code ; - __u8 source_addr[6] ; - __u16 beacon_type ; - __u16 major_vector ; - __u16 lan_status ; - __u16 soft_error_time ; - __u16 reserved1 ; - __u16 local_ring ; - __u16 mon_error ; - __u16 beacon_transmit ; - __u16 beacon_receive ; - __u16 frame_correl ; - __u8 beacon_naun[6] ; - __u32 reserved2 ; - __u8 beacon_phys[4] ; + u8 phys_addr[4] ; + u8 up_node_addr[6] ; + u8 up_phys_addr[4] ; + u8 poll_addr[6] ; + u16 reserved ; + u16 acc_priority ; + u16 auth_source_class ; + u16 att_code ; + u8 source_addr[6] ; + u16 beacon_type ; + u16 major_vector ; + u16 lan_status ; + u16 soft_error_time ; + u16 reserved1 ; + u16 local_ring ; + u16 mon_error ; + u16 beacon_transmit ; + u16 beacon_receive ; + u16 frame_correl ; + u8 beacon_naun[6] ; + u32 reserved2 ; + u8 beacon_phys[4] ; }; Index: smctr.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/drivers/net/tokenring/smctr.c,v retrieving revision 1.1.1.2 retrieving revision 1.2 diff -u -r1.1.1.2 -r1.2 --- smctr.c 25 Feb 2001 23:15:00 -0000 1.1.1.2 +++ smctr.c 11 Apr 2002 12:37:51 -0000 1.2 @@ -1,7 +1,7 @@ /* * smctr.c: A network driver for the SMC Token Ring Adapters. * - * Written by Jay Schulist <js...@tu...> + * Written by Jay Schulist <js...@sa...> * * This software may be used and distributed according to the terms * of the GNU General Public License, incorporated herein by reference. @@ -14,7 +14,7 @@ * - SMC TokenCard SDK. * * Maintainer(s): - * JS Jay Schulist <js...@tu...> + * JS Jay Schulist <js...@sa...> * * Changes: * 07102000 JS Fixed a timing problem in smctr_wait_cmd(); @@ -59,11 +59,15 @@ #include <linux/skbuff.h> #include <linux/trdevice.h> +#if BITS_PER_LONG == 64 +#error FIXME: driver does not support 64-bit platforms +#endif + #include "smctr.h" /* Our Stuff */ #include "smctr_firmware.h" /* SMC adapter firmware */ -static char version[] __initdata = KERN_INFO "smctr.c: v1.4 7/12/00 by js...@tu...\n"; -static const char *cardname = "smctr"; +static char version[] __initdata = KERN_INFO "smctr.c: v1.4 7/12/00 by js...@sa...\n"; +static const char cardname[] = "smctr"; #define SMCTR_IO_EXTENT 20 @@ -82,7 +86,7 @@ static int ringspeed; /* SMC Name of the Adapter. */ -static char *smctr_name = "SMC TokenCard"; +static char smctr_name[] = "SMC TokenCard"; char *smctr_model = "Unknown"; /* Use 0 for production, 1 for verification, 2 for debug, and @@ -4383,7 +4387,7 @@ smctr_clear_trc_reset(ioaddr); mdelay(200); /* ~2 ms */ - /* Remove any latched interrupts that occured prior to reseting the + /* Remove any latched interrupts that occurred prior to reseting the * adapter or possibily caused by line glitches due to the reset. */ outb(tp->trc_mask | CSR_CLRTINT | CSR_CLRCBUSY, ioaddr + CSR); @@ -4546,20 +4550,24 @@ struct sk_buff *skb; skb = dev_alloc_skb(rx_size); - skb_put(skb, rx_size); + if (skb) { + skb_put(skb, rx_size); - memcpy(skb->data, pbuff, rx_size); - sti(); + memcpy(skb->data, pbuff, rx_size); + sti(); - /* Update Counters */ - tp->MacStat.rx_packets++; - tp->MacStat.rx_bytes += skb->len; - - /* Kick the packet on up. */ - skb->dev = dev; - skb->protocol = tr_type_trans(skb, dev); - netif_rx(skb); - dev->last_rx = jiffies; + /* Update Counters */ + tp->MacStat.rx_packets++; + tp->MacStat.rx_bytes += skb->len; + + /* Kick the packet on up. */ + skb->dev = dev; + skb->protocol = tr_type_trans(skb, dev); + netif_rx(skb); + dev->last_rx = jiffies; + } else { + sti(); + } } else smctr_process_rx_packet((MAC_HEADER *)pbuff, @@ -5265,7 +5273,7 @@ return (POSITIVE_ACK); } -/* Reset the ring speed to the oposite of what it was. This auto-pilot +/* Reset the ring speed to the opposite of what it was. This auto-pilot * mode requires a complete reset and re-init of the adapter. */ static int smctr_set_ring_speed(struct net_device *dev) @@ -5724,6 +5732,8 @@ static int io[SMCTR_MAX_ADAPTERS]; static int irq[SMCTR_MAX_ADAPTERS]; static int mem[SMCTR_MAX_ADAPTERS]; + +MODULE_LICENSE("GPL"); MODULE_PARM(io, "1-" __MODULE_STRING(SMCTR_MAX_ADAPTERS) "i"); MODULE_PARM(irq, "1-" __MODULE_STRING(SMCTR_MAX_ADAPTERS) "i"); Index: smctr.h =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/drivers/net/tokenring/smctr.h,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- smctr.h 14 Jan 2001 17:38:21 -0000 1.1.1.1 +++ smctr.h 11 Apr 2002 12:37:51 -0000 1.2 @@ -1,7 +1,7 @@ /* smctr.h: SMC Token Ring driver header for Linux * * Authors: - * - Jay Schulist <js...@tu...> + * - Jay Schulist <js...@sa...> */ #ifndef __LINUX_SMCTR_H Index: smctr_firmware.h =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/drivers/net/tokenring/smctr_firmware.h,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- smctr_firmware.h 14 Jan 2001 17:38:28 -0000 1.1.1.1 +++ smctr_firmware.h 11 Apr 2002 12:37:51 -0000 1.2 @@ -14,7 +14,7 @@ * - This is an 8K binary image. (MCT.BIN v6.3C1 03/01/95) * * Authors: - * - Jay Schulist <js...@tu...> + * - Jay Schulist <js...@sa...> */ #include <linux/config.h> Index: tms380tr.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/drivers/net/tokenring/tms380tr.c,v retrieving revision 1.1.1.2 retrieving revision 1.2 diff -u -r1.1.1.2 -r1.2 --- tms380tr.c 25 Feb 2001 23:15:00 -0000 1.1.1.2 +++ tms380tr.c 11 Apr 2002 12:37:51 -0000 1.2 @@ -28,7 +28,7 @@ * - Various Madge employees * * Maintainer(s): - * JS Jay Schulist js...@tu... + * JS Jay Schulist js...@sa... * CG Christoph Goos cg...@sy... * AF Adam Fritzler mi...@au... * MLP Mike Phillips ph...@am... @@ -68,13 +68,11 @@ */ #ifdef MODULE -static const char *version = "tms380tr.c: v1.08 14/01/2001 by Christoph Goos, Adam Fritzler\n"; +static const char version[] = "tms380tr.c: v1.08 14/01/2001 by Christoph Goos, Adam Fritzler\n"; #endif -#ifdef MODULE #include <linux/module.h> #include <linux/version.h> -#endif #include <linux/kernel.h> #include <linux/sched.h> @@ -2192,17 +2190,18 @@ } } - if(rpl->SkbStat == SKB_DATA_COPY - || rpl->SkbStat == SKB_DMA_DIRECT) + if(skb && (rpl->SkbStat == SKB_DATA_COPY + || rpl->SkbStat == SKB_DMA_DIRECT)) { if(rpl->SkbStat == SKB_DATA_COPY) - memmove(skb->data, ReceiveDataPtr, Length); + memcpy(skb->data, ReceiveDataPtr, Length); /* Deliver frame to system */ rpl->Skb = NULL; skb_trim(skb,Length); skb->protocol = tr_type_trans(skb,dev); netif_rx(skb); + dev->last_rx = jiffies; } } else /* Invalid frame */ @@ -2415,6 +2414,8 @@ TMS380_module = NULL; } #endif + +MODULE_LICENSE("GPL"); /* Index: tms380tr.h =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/drivers/net/tokenring/tms380tr.h,v retrieving revision 1.1.1.2 retrieving revision 1.2 diff -u -r1.1.1.2 -r1.2 --- tms380tr.h 25 Feb 2001 23:15:00 -0000 1.1.1.2 +++ tms380tr.h 11 Apr 2002 12:37:51 -0000 1.2 @@ -395,7 +395,7 @@ /* OPEN Options (high-low) */ #define WRAP_INTERFACE 0x0080 /* Inserting omitted for test * purposes; transmit data appears - * as receive data. (usefull for + * as receive data. (useful for * testing; change: CLOSE necessary) */ #define DISABLE_HARD_ERROR 0x0040 /* On HARD_ERROR & TRANSMIT_BEACON @@ -461,7 +461,9 @@ * fragments following. */ +/* XXX is there some better way to do this? */ #define ISA_MAX_ADDRESS 0x00ffffff +#define PCI_MAX_ADDRESS 0xffffffff #pragma pack(1) typedef struct { Index: tmsisa.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/drivers/net/tokenring/tmsisa.c,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -u -r1.1.1.1 -r1.2 --- tmsisa.c 25 Feb 2001 23:15:00 -0000 1.1.1.1 +++ tmsisa.c 11 Apr 2002 12:37:51 -0000 1.2 @@ -7,7 +7,7 @@ * Dedicated to my girlfriend Steffi Bopp * * This software may be used and distributed according to the terms - * of the GNU Public License, incorporated herein by reference. + * of the GNU General Public License, incorporated herein by reference. * * This driver module supports the following cards: * - SysKonnect TR4/16(+) ISA (SK-4190) @@ -19,7 +19,7 @@ * TODO: * 1. Add support for Proteon TR ISA adapters (1392, 1392+) */ -static const char *version = "tmsisa.c: v1.00 14/01/2001 by Jochen Friedrich\n"; +static const char version[] = "tmsisa.c: v1.00 14/01/2001 by Jochen Friedrich\n"; #include <linux/module.h> #include <linux/kernel.h> @@ -60,7 +60,7 @@ 0 }; -static char *isa_cardname = "SK NET TR 4/16 ISA\0"; +static char isa_cardname[] = "SK NET TR 4/16 ISA\0"; int tms_isa_probe(struct net_device *dev); static int tms_isa_open(struct net_device *dev); @@ -93,7 +93,7 @@ struct tms_isa_card *next; }; -static struct tms_isa_card *tms_isa_card_list = NULL; +static struct tms_isa_card *tms_isa_card_list; static int __init tms_isa_probe1(int ioaddr) { @@ -129,7 +129,7 @@ int __init tms_isa_probe(struct net_device *dev) { - static int versionprinted = 0; + static int versionprinted; struct net_local *tp; int j; struct tms_isa_card *card; @@ -271,6 +271,14 @@ { /* Enlist in the card list */ card = kmalloc(sizeof(struct tms_isa_card), GFP_KERNEL); + if (!card) { + unregister_trdev(dev); + release_region(dev->base_addr, TMS_ISA_IO_EXTENT); + free_irq(dev->irq, dev); + free_dma(dev->dma); + tmsdev_term(dev); + return -1; + } card->next = tms_isa_card_list; tms_isa_card_list = card; card->dev = dev; @@ -363,6 +371,8 @@ static int io[ISATR_MAX_ADAPTERS]; static int irq[ISATR_MAX_ADAPTERS]; static int dma[ISATR_MAX_ADAPTERS]; + +MODULE_LICENSE("GPL"); MODULE_PARM(io, "1-" __MODULE_STRING(ISATR_MAX_ADAPTERS) "i"); MODULE_PARM(irq, "1-" __MODULE_STRING(ISATR_MAX_ADAPTERS) "i"); Index: tmspci.c =================================================================== RCS file: /cvsroot/linux-vax/kernel-2.4/drivers/net/tokenring/tmspci.c,v retrieving revision 1.1.1.2 retrieving revision 1.2 diff -u -r1.1.1.2 -r1.2 --- tmspci.c 25 Feb 2001 23:15:00 -0000 1.1.1.2 +++ tmspci.c 11 Apr 2002 12:37:51 -0000 1.2 @@ -67,6 +67,8 @@ }; MODULE_DEVICE_TABLE(pci, tmspci_pci_tbl); +MODULE_LICENSE("GPL"); + static void tms_pci_read_eeprom(struct net_device *dev); static unsigned short tms_pci_setnselout_pins(struct net_device *dev); @@ -142,8 +144,7 @@ printk(":%2.2x", dev->dev_addr[i]); printk("\n"); - ret = tmsdev_init(dev,0, pdev); - /* XXX: should be the max PCI32 DMA max */ + ret = tmsdev_init(dev, PCI_MAX_ADDRESS, pdev); if (ret) { printk("%s: unable to get memory for dev->priv.\n", dev->name); goto err_out_irq; @@ -165,7 +166,7 @@ dev->stop = tms380tr_close; ret = register_trdev(dev); - if (!ret) + if (ret) goto err_out_tmsdev; pci_set_drvdata(pdev, dev); --- ibmtr.h DELETED --- |