Can't get if_txp(4) to attach to a 3CR990B-TXM NIC

Pyun YongHyeon pyunyh at gmail.com
Sat Jun 9 05:25:45 UTC 2007


On Fri, Jun 08, 2007 at 09:13:37AM -0700, Freddie Cash wrote:
 > Good morning,
 > 
 > I'm having a bit of an issue getting a 3CR990B-TXM NIC detected and 
 > usable.  Just wondering if anyone knows of any issues with this NIC 
 > chipset and/or with the motherboard chipset.
 > 
 > The motherboard is a Biostar GeForce 6100 AM2 using an nVidia nForce 410 
 > chipset and nVidia GeForce 6100 vide chipset.
 > 
 > I've tried FreeBSD 6.1, 6.2, 6-STABLE (from Wed), and 7-CURRENT (from Thu) 
 > on this system.  Everything installs nicely, everything on the board is 
 > detected correctly and usable.  It's just the PCI NIC that doesn't work.
 > 
 > If I compile a custom kernel without any network drivers in it, and then 
 > kldload if_txp, the following appears (same message on all 4 versions):
 > 
 > txp0: <3Com 3cR990B-TXM Etherlink with 3XP Processor> port 0xbc00-0xbc7f 
 > mem 0xfdcff000-0xfdcff07f irq 16 at device 8.0 on pci3
 > txp0: not waiting for boot
 > device_attach: txp0 attach returned -1
 > 

Would you try attached path?
It wouldn't fix your issue but it will handle failure of contigmalloc
as expected.

 > If I reboot and load if_nve (on 6.2 and 6-stable), then I get:
 > nve0: <NVIDIA nForce MCP13 Networking Adapter> port 0xdc00-0xdc07 mem 
 > 0xfe02d000-0xfe02dfff irq 22 at device 20.0 on pci0
 > nve0: Ethernet address 00:19:21:37:d5:60
 > 
 > Followed by the above messages for txp0 (it seems to detect and load 
 > if_txp automativally when loading if_nve).
 > 
 > I've updated the BIOS on the motherboard.  I've tried different PCI slots 
 > on the motherboard.  Nothing changes.  The "not waiting for boot" message 
 > keeps appearing.
 > 
 > Attached are dmesg output from:
 >   6.1-RELEASE  GENERIC kernel                dmesg_6.1.txt
 >   6.2-RELEASE  GENERIC kernel                dmesg_6.2.txt
 >   6.2-RELEASE  GENERIC kernel  verbose boot  dmesg_6.2_verbose.txt
 >   6-STABLE     GENERIC kernel                dmesg_6_generic.txt
 >   6-STABLE     TEST kernel (no NIC drivers)  dmesg_6_custom.txt
 >   7-CURRENT    GENERIC kernel                dmesg_7_generic.txt
 >   7-CURRENT    TEST kernel (no NIC drivers)  dmesg_7_custom.txt
 > 
 > I've looked through the cvsweb entries for txp and didn't see anything 
 > related to this issue.  Reading the man page for if_txp(4) doesn't show 
 > anything about this error.  I tried reading the source, but C is pretty 
 > much Greek to me.
 > 
 > Everything I've read online says this NIC should work, and other are using 
 > it successfully.  My gut feeling is that it's something to do with the 
 > motherboard chipset and the way it detects the NIC.  But I could be way 
 > off.
 > 
 > (As a test, I popped in a Kanotix LiveCD and the 3Com NIC is detected and 
 > usable, so it's [hopefully] not a defective NIC.)
 > 
 > Anyone have any suggestions?  Comments?  Methods to destroy the NIC as an 
 > act of defiance?  :)
 > 

-- 
Regards,
Pyun YongHyeon
-------------- next part --------------
Index: if_txp.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/txp/if_txp.c,v
retrieving revision 1.44
diff -u -r1.44 if_txp.c
--- if_txp.c	4 Mar 2007 03:38:08 -0000	1.44
+++ if_txp.c	9 Jun 2007 04:56:59 -0000
@@ -264,6 +264,11 @@
 
 	sc->sc_fwbuf = contigmalloc(32768, M_DEVBUF,
 	    M_NOWAIT, 0, 0xffffffff, PAGE_SIZE, 0);
+	if (sc->sc_fwbuf == NULL) {
+		device_printf(dev, "no memory for firmware\n");
+		error = ENXIO;
+		goto fail;
+	}
 	error = txp_download_fw(sc);
 	contigfree(sc->sc_fwbuf, 32768, M_DEVBUF);
 	sc->sc_fwbuf = NULL;
@@ -273,6 +278,11 @@
 
 	sc->sc_ldata = contigmalloc(sizeof(struct txp_ldata), M_DEVBUF,
 	    M_NOWAIT, 0, 0xffffffff, PAGE_SIZE, 0);
+	if (sc->sc_ldata == NULL) {
+		device_printf(dev, "no memory for descriptor ring\n");
+		error = ENXIO;
+		goto fail;
+	}
 	bzero(sc->sc_ldata, sizeof(struct txp_ldata));
 
 	if (txp_alloc_rings(sc)) {


More information about the freebsd-stable mailing list