--- tms380tr.c.orig	Tue Nov  2 20:07:08 1999
+++ tms380tr.c	Tue Nov  9 16:33:40 1999
@@ -226,10 +226,25 @@
 	else if(base_addr != 0)  /* Don't probe at all. */
 		return (-ENXIO);
 
+	/* 
+	 * Let's check for pci adapters first 
+	 */
+
+/*	for (i=0; i < TMS380TR_MAX_ADAPTERS; i++) Not enough for pci, could be other tr cards in the box */
+	for (i=0; i < 8; i++) {
+		if (tms380tr_probe1(dev,0) == 0) { /* Success */
+			return 0 ;
+		} 
+	} 
+
+	/*
+	 * No pci cards found, let's check for isa
+	 */
+
 	for(i = 0; tms380tr_portlist[i]; i++)
 	{
 		int ioaddr = tms380tr_portlist[i];
-		if(check_region(ioaddr, TMS380TR_IO_EXTENT))
+		if(check_region(ioaddr, TMS380TR_IO_EXTENT)) /* Region already used */
 			continue;
 		if(tms380tr_probe1(dev, ioaddr))
 		{
@@ -248,7 +263,6 @@
 							unsigned short device)
 {
 	int cur;
-	
 	for (cur = 1; cardinfo[cur].name != NULL; cur++) {
 		if (cardinfo[cur].type == 2) /* PCI */
 		{
@@ -266,65 +280,39 @@
 static int __init tms380tr_pci_chk_card(struct net_device *dev, 
 					struct cardinfo_table **outcard)
 {
-	static int pci_index = 0;
-	unsigned char pci_bus, pci_device_fn;
+	struct pci_dev *pci_device = NULL ; 
 	struct cardinfo_table *card;
 	int i;
 
 	if(!pci_present())
 		return (-1);	/* No PCI present. */
+ 
+	while ( (pci_device=pci_find_class(PCI_CLASS_NETWORK_TOKEN_RING<<8, pci_device))) { 
 
-	for(; pci_index < 0xff; pci_index++)
-	{
 		unsigned int pci_irq_line;
-		struct pci_dev *pdev;
-		unsigned short pci_command, new_command, vendor, device;
 		unsigned int pci_ioaddr;
 
-		if(pcibios_find_class(PCI_CLASS_NETWORK_TOKEN_RING << 8,
-			pci_index, &pci_bus, &pci_device_fn)
-			!= PCIBIOS_SUCCESSFUL)
-		{
-			break;
-		}
-
-		pcibios_read_config_word(pci_bus, pci_device_fn,
-						PCI_VENDOR_ID, &vendor);
-		pcibios_read_config_word(pci_bus, pci_device_fn,
-						PCI_DEVICE_ID, &device);
-
-		pdev		= pci_find_slot(pci_bus, pci_device_fn);
-		pci_irq_line 	= pdev->irq;
-		pci_ioaddr 	= pdev->resource[0].start;
-
-		pcibios_read_config_word(pci_bus, pci_device_fn,
-						PCI_COMMAND, &pci_command);
-
 		/* Remove I/O space marker in bit 0. */
-		pci_ioaddr &= ~3;
+		pci_irq_line = pci_device->irq ; 
+		pci_ioaddr = pci_device->resource[0].start ; 
+/*		pci_ioaddr &= ~3; */
+
+		/* Don't return from here, just continue on the card discovery loop - MLP */
+		if (!(card = tms380tr_pci_getcardinfo(pci_device->vendor, pci_device->device)))  
+			continue ; 
 
-		if (!(card = tms380tr_pci_getcardinfo(vendor, device)))
-			return -ENODEV;
-		
 		if(check_region(pci_ioaddr, TMS380TR_IO_EXTENT))
 			continue;
+
 		request_region(pci_ioaddr, TMS380TR_IO_EXTENT, card->name);
-		if(request_irq(pdev->irq, tms380tr_interrupt, SA_SHIRQ,
-				card->name, dev))
+		if(request_irq(pci_device->irq, tms380tr_interrupt, SA_SHIRQ,
+				card->name, dev)) { 
+			release_region(pci_ioaddr, TMS380TR_IO_EXTENT) ; 
 			return (-ENODEV); /* continue; ?? */
-
-		new_command = (pci_command|PCI_COMMAND_MASTER|PCI_COMMAND_IO);
-
-		if(pci_command != new_command)
-		{
-			printk("The PCI BIOS has not enabled this"
-				"device! Updating PCI command %4.4x->%4.4x.\n",
-			  	pci_command, new_command);
-			pcibios_write_config_word(pci_bus, pci_device_fn,
-				PCI_COMMAND, new_command);
 		}
+		/* At this point we have found a valid tms380tr PCI TR card. */
 
-		/* At this point we have found a valid PCI TR card. */
+		pci_ioaddr &= ~3 ; 
 		dev->base_addr	= pci_ioaddr;
 		dev->irq 	= pci_irq_line;
 		dev->dma	= 0;
@@ -342,10 +330,10 @@
 		if (outcard)
 			*outcard = card;
 
-		return (0);
+		return 0 ; 
 	}
 
-	return (-1);
+ 	return (-1); 
 }
 
 /*
@@ -448,6 +436,10 @@
 	return (0);
 }
 
+/*
+ * Passing an ioaddr of 0 tells us to do a pci card search
+ */
+
 static int __init tms380tr_probe1(struct net_device *dev, int ioaddr)
 {
 	static unsigned version_printed = 0;
@@ -463,14 +455,13 @@
 	if(dev == NULL)
 		return (-ENOMEM);
 #endif
-
-	err = tms380tr_pci_chk_card(dev, &card);
-	if(err < 0)
-	{
+	if (ioaddr == 0) {
+		err = tms380tr_pci_chk_card(dev, &card);
+	} else {
 		err = tms380tr_isa_chk_card(dev, ioaddr, &card);
-		if(err < 0)
-			return (-ENODEV);
 	}
+	if(err < 0)
+		return (-ENODEV);
 
 	/* Setup this devices private information structure */
 	tp = (struct net_local *)kmalloc(sizeof(struct net_local), GFP_KERNEL | GFP_DMA);
@@ -484,10 +475,10 @@
 	dev->init               = tms380tr_init_card;
         dev->open               = tms380tr_open;
         dev->stop               = tms380tr_close;
+	dev->do_ioctl		= NULL ; 
         dev->hard_start_xmit    = tms380tr_send_packet;
         dev->get_stats          = tms380tr_get_stats;
         dev->set_multicast_list = &tms380tr_set_multicast_list;
-
         return (0);
 }
 
@@ -568,6 +559,7 @@
 
 	printk(KERN_INFO "%s: Adapter RAM size: %dK\n", 
 	       dev->name, tms380tr_read_ptr(dev));
+
 	tms380tr_enable_interrupts(dev);
 	tms380tr_open_adapter(dev);
 
@@ -664,15 +656,12 @@
 		if((Tmp & ~CYCLE_TIME) != (PosReg & ~CYCLE_TIME))
 			printk(KERN_INFO "%s: POSREG error\n", dev->name);
 	}
-
 	err = tms380tr_reset_adapter(dev);
 	if(err < 0)
 		return (-1);
-
 	err = tms380tr_bringup_diags(dev);
 	if(err < 0)
 		return (-1);
-
 	err = tms380tr_init_adapter(dev);
 	if(err < 0)
 		return (-1);
@@ -1461,7 +1450,6 @@
 static int tms380tr_close(struct net_device *dev)
 {
 	struct net_local *tp = (struct net_local *)dev->priv;
-
 	dev->tbusy = 1;
 	dev->start = 0;
 
@@ -2259,8 +2247,7 @@
 			ADAPTER_INT_PTRS, 16);
 	tms380tr_read_ram(dev, (unsigned char *)&adapterram,
 			(unsigned short)SWAPB(tp->intptrs.AdapterRAMPtr), 2);
-
-	return SWAPB(adapterram);
+	return SWAPB(adapterram); 
 }
 
 /*
@@ -2722,7 +2709,8 @@
                         }
 			else
                                 return (0);
-                }
+                } 
+
         }
 
         return (0);
