line


FreeBSD Device Driver for NVIDIA nForce Network Adapter

Overview

This is a FreeBSD "NATIVE" device driver for NVIDIA nForce network adapter which is ported from OpenBSD nfe driver. It does not need the linux library (nvnetlib.o) included in the NVIDIA Linux driver source distribution.

Source code

The nfe driver's source code has been committed to the base source tree on FreeBSD 7-RELEASE as default nVIDIA ethernet driver (cvsweb). Special thanks to Pyun YongHyeon (yongari AT freebsd DOT org).
For 7-RELEASE users or above, I recommend you use it rather than this package.

You can download the latest nfe driver for 6-STABLE or 6-RELEASE at the following URL.
You may need one of the following PHY patches to detect the link type correctly. You have to check chip name and model number of PHY used on your motherboard and then apply the corresponding patch into kernel source code.
E.g. if your motherboard is ASUS A8N-SLI Premium, apply e1000phy.patch into kernel source tree.

Note that this driver has a long standing bug that is is instability of manual half-duplex media selection on certain hardwares (auto sensing media type should work for all cases, though). I still have no idea why it doesn't work on some hardwares.

OSnfe code e1000phy patch to add support for Marvell 88E1000 series ciphy patch to add support for Cicada PHYs and Vitesse PHYs rlphy patch to add support for IC Plus Corp. PHYs rgephy patch to add support for RTL8211B PHY
7-RELEASE/STABLE/8-CURRENT base source tree not needed not needed not needed not needed
6.3-RELEASE/STABLE nfe-20071124.tar.gz not needed ciphy.20070402.patch rlphy.20070314.patch not needed
6.2-RELEASE nfe-20070809p2.tar.gz e1000phy.20071124.patch ciphy.20070402.patch rlphy.20070314.patch rgephy.20070328.patch

Changelog

2007/11/24 Fixed the use of inversed ethernet address on MCP67 and added 88E1116/88E1116R PHY support code that takes the PHY out of power-down mode. These are obtained from the HEAD branch.
2007/09/18 Merged the patch for kern/116295.
2007/08/16 Added code for MSI/MSI-X for 6-STABLE.
2007/08/09 Sync with the HEAD branch.
2007/05/12 nfe(4) has been made default MCP ethernet driver for 7-CURRENT. I recommend you use it.
2007/05/12 For 7-CURRENT, add support for MSI/MSI-X. Please test it. For all versions, half-duplex mode detection now uses IFM_FDX flag as some PHY drivers does not set IFM_HDX if it were resolved to half-duplex. Don't enable Tx/Rx MAC if nfe(4) is not yet running. Thanks to Pyun YongHyeon.
2007/04/02 Updated the ciphy patch. The change was made by Pyun YongHyeon. Thanks.
2007/03/28 Fixed a bug in the rgephy patch.
2007/03/27 Provide the rgephy patch to add support for RTL82111B PHY. This was made by Michael Eisele. Thanks.
2007/03/22 It now correctly handles missing PHY issues on nForce 430. And it does not panic system anymore when it failed to detect PHYs. And NFE_CORRECT_MACADDR flags is dropped maintaing for chipsets, instead it's now auto detected by reading NFE_TX_UNK register which is the same way as Linux did. These updates were made by Pyun YongHyeon. Thanks.
2007/03/19 Fixed the bug in RXFILTER setup and cleaned up by Pyun YongHyeon.
2007/03/17 Added MCP6x correct mac address support and pause frame support. These updates were made by Peer Chen (pchen at nvidia dot com). Thanks.
2007/03/16 Correct nfe_devs[] so PCI_PRODUCT_NVIDIA_MCP61_LAN4 and PCI_PRODUCT_NVIDIA_MCP65_LAN4 are now attached. Added new PCI_PRODUCT_NVIDIA_MCP67_LAN[1-4] ids. Removed checksum offload for MCP65 which is known to lack of hardware support for checksum offload. These updates were made by Pyun YongHyeon (yongari at freebsd dot org). Thanks.
2007/03/14Provide the ciphy patch to add support for Vitesse PHYs. This was made by Aji Tanaka. Thanks.
2007/01/06Added jumbo frame support. Fixed several bugs in bus_dma conversion. Fixed the bug for handling Tx/Rx checksum offload settings with ifconfig. Added hardware VLAN tagging support. Added two protections for possible watchdog timeouts; check for missing Tx completion interrupt and check for missed start Tx command. Because these protections are supported, disable the delay insertion in nfe_encap function. These modifications were made by Pyun YongHyeon. Thanks!
2006/12/25nfe-20061222 has a compilation problem. Fixed it.
2006/12/22Reenable the delay insertion to reduce watchdog timeout errors during bulk data transfering
2006/12/20Renewal of nfe driver package. The source code included in this package is based on 7-CURRENT code. This was dramatically improved by Pyun YongHyeon in terms of performance, stability, and so on. Thanks a lot to Pyun YongHyeon. It would work on a greater variety of motherboards.
2006/12/19Provide new e1000phy patch. This patch is based on 7-CURRENT code for Marvell PHY support.
2006/12/11Fixed mutex code in nfe_detach.
2006/09/05 Added code for inserting a delay in nfe_encap function, to reduce watchdog timeout errors during bulk data transfering on several hardware (e.g. MCP51 on GA-M51GM-S2G 10B). Please see here. You can insert a delay by typing the following command.
# sysctl hw.nfe.encap_delay=3
Also fixed the NFE_TX_VALID issue; i.e. NFE_TX_VALID is being set too early in nfe_encap function.
2006/09/01Decreased the Tx ring count and added code to address delayed interrupts.
2006/08/17Provided the patch to support Marvell 88E1116 PHY.
Refined mutex code.
2006/08/11Added support for jumbo frame capability.
2006/07/26Refined mutex code.
2006/07/25Added support for vlan hardware tagging capability.
Added NVidia MCP61/65 ids, imported from OpenBSD nfe driver.
Fixed several problems on driver attachment.
2006/05/10Fixed the problem for reversed MAC address caused by reloading this module.
2006/05/09Added support for hardware checksum offloading capability.
Increased the Tx ring count from 64 to 256 according to the OpenBSD nfe driver.
Fixed memory leak caused by detaching this module.
2006/05/08Added the list of supported motherboards into this web site.
2006/05/05Added the comment into if_nfe.c to enable device polling capability.
2006/04/30Provided patches to support Cicada PHYs and IC Plus Corp. PHYs. These patches are needed to run nfe device driver.
2006/04/28Added support for device polling capability.
2006/04/27First version.

Install (only for FreeBSD 6-STABLE or -RELEASE)

  1. Comment out the line "device nve" in your kernel config file.
  2. If you want to support device polling, add "options DEVICE_POLLING" into the config file.
  3. Apply the PHY patch if necessary (see the above), e.g. "patch < e1000phy.20061219.fbsd62.patch" in /usr/src/sys/dev/mii/.
  4. Type "make buildkernel; make installkernel" in /usr/src/.
  5. Type "reboot"
  6. Get the latest nfe driver source code from this page.
  7. Extract it in an appropriate directory.
  8. If you want to enable the device polling feature, uncomment the line "#define DEVICE_POLLING" in if_nfe.c.
  9. Type "make" in the extracted directory, you will find if_nfe.ko.
  10. Type "cp if_nfe.ko /boot/modules".
  11. Type "kldload if_nfe" or
  12. Add "if_nfe_load=\"yes\"" into /boot/loader.conf and then reboot.

Known Issues

  • Note that this driver has a long standing bug that is is instability of manual half-duplex media selection on certain h\ardwares (auto sensing media type should work for all cases, though). I still have no idea why it doesn't work on some hardwares.
  • Several errors are caused by shared interrupt with another device (e.g. USB device). One solution is to disable the shared device in the BIOS. Aother solution is to enable the polling mode.

List of supported motherboards

ManufacturerModelChipset/PHYPatch
ASUSA8N-SLI PremiumnForce4 SLI/Marvell 88E1111e1000phy.patch
ASUSK8NnForce3 250/IC Plus IP101
ASUSA8N-VM CSMnForce 430/Marvell 88E1111e1000phy.patch
ASUSA8N-EnForce4 Ultra/Marvell 88E1111e1000phy.patch
ASUSM2N-EnForce 570 Ultra/Marvell 88E1116e1000phy.patch
ASUSM2NPV-VMnForce 430 Ultra/Marvell 88E1116e1000phy.patch
ASUSM2N-VMNvidia GeForce7050PV/nForce630a(MCP68PVNT)no patch/FreeBSD 6.3-STABLE
ASUSM2N32-SLInForce 590 SLI/Marvell 88E1116e1000phy.patch
ASUSM2N-SLI DELUXEnForce 570 SLI/Marvell 88E1116
ASUSA7N8X-XEnForce2 400 Ultra/Realtek RTL8201BL
ASUSA7N8XnForce2 400 Ultra/Realtek RTL8201L
ASUSK8N4-E deluxenForce4 4X/Marvell 88E1111
ASUSP5N32-E SLInForce 680i SLI/Marvellno patch
ASUSA8N32-SLI DeluxeNVIDIA nForce4 SLI x16no patch/FreeBSD 6.2-STABLE
RioworksHDAMDnForce3 Pro 250/Marvell 88E1111e1000phy.patch
EpoX9NDA3+nForce3 Ultra/Cicada 8201ciphy.patch
EpoX9NPA+SLInForce4 SLI/Cicada 8201ciphy.patch
EpoXEP-8GF6100-MnForce 410?
MSIMS-7185 (K8N SLI-F)nForce4 SLI/Marvell 88E1111e1000phy.patch
MSIK8NGM2-FIDnForce 430/Marvell 88E1111e1000phy.patch
MSIK8NGM2-FIDnForce 430ciphy.patch
MSIK8NGM2-LnForce 410/RTL 8201CL?
MSIK8N Neo2nForce 3 Ultrae1000phy.patch
MSIK9N Ultra-2FnForce 570/Vitesse VSC8601ciphy.patch
MSIK9N DiamondnForce 590/Vitesse VSC8601ciphy.patch
MSIK9N6GMGeForce 6100/nForce 405/Realtek 8201rgephy.patch/FreeBSD 6.2-RELEASE
MSIK9N SLI PlatinumnForce570 SLI/Vitesse VSC8601ciphy.patch/FreeBSD 6.2-RELEASE
GigaByteGA-K8NF-9nForce4 4X/Cicada 8201ciphy.patch
GigaByteGA-K8NXP-SLInForce4 SLI/Cicada 8201ciphy.patch
GigaByteGA-K8N51GMFnForce 410/RTL 8201
GigaByteGA-M55PLUS-S3GnForce 430/Marvell 88E1116e1000phy.patch
GigaByteGA-M61PM-S2nForce 430/RTL8211rgephy.patch
GigaByteGA-M59SLI-S4?/Marvell 88E1116e1000phy.patch
GigaByteGA-3CESL-RHnForce 4 Ultra/Marvell 88E1116e1000phy.patch/FreeBSD6.2-RELEASE-p7/amd64
GigaByteM61P-S3gForce 6100/nForce 430/RTL8211rgephy.patch/FreeBSD7
TyanK8WE (S2895)nForce Professional 2200/Marvell88E1111
TyanTomcat n3400B (S2925)nForce Professional 3400/Marvell88E11166
TyanThunder n3600B (S2927)nForce Professional 3600/???
TyanThunder n3600S (S2933)nForce Professional 3600/Marvell88E11166
ECSC19-A V2.0nForce4 SLI/Marvell 88E1111e1000phy.patch
ECSGeForce6100SM-MnForce 405/Broadcom AC131 10/100 LAN Phyno patch
Foxconn6150K8MA-8KRSnForce 430/Marvell 88E1111e1000phy.patch
CompaqLaptop V3123AUMCP51/??
SunX2200MCP55/Marvell 88E1149no patch
SunX2100 M2MCP55/Marvell 88E1149no patch
SupermicroH8DMR-82MCP55 Pro/Marvell 88E1149e1000phy.patch
SupermicroH8DM3-2MCP55 Pro/Marvell 88E1149
SupermicroH8SMI-2nForce Professional 3600/3050/Marvell 88E1149e1000phy.patch/FreeBSD6.2-STABLE
ASRockK7NF2-RAIDnForce2 Ultra 400/Realtek 8201
ASRock939NF6G-VSTAnForce 430/RTL8201Lno patch/FreeBSD 6.3-STABLE
SoltekNForce 3 250/Gb Cicada 8201ciphy.patch
Averatec2370 laptopnForce 6100no patch
ShuttleFN27P2nForce 570 Ultra/Marvell 88E1116no patch/FreeBSD6.2-STABLE
ShuttleSN85G4nForce3 150/Realtek 8201??/FreeBSD6.2-RELEASE
BiostarNF4 Ultra-A9AnForce4 Ultra/RTL8201CLno patch/FreeBSD6.2-STABLE

If this driver works on your motherboad, please report it to shige'at'res.kutc.kansai-u.ac.jp. Also, if you have any suggestions or if you discover any bugs, please let me know.

Back



line