RFC: deprecation of nve(4) in 10-STABLE and removal from 11-CURRENT

Christian Brueffer brueffer at FreeBSD.org
Tue Feb 4 07:41:19 UTC 2014


On 2/3/14 2:56 PM, Christian Brueffer wrote:
> Hi,
> 
> for some time now we have had two drivers for NVIDIA NForce/MCP network
> chips, namely nve(4) and nfe(4).
> 
> The former came first and is based on a binary blob.  The latter was
> later ported from OpenBSD and is blob-free.
> 
> nfe(4) supports all chips nve(4) supports, in addition to all the newer
> hardware.  In essence, nfe(4) has been the de-facto standard driver for
> a long time.  nve(4) has been commented out in GENERIC since 2007.
> 
> For this reason I propose deprecating nve(4) in 10-STABLE and removing
> it from HEAD.
> 

For completeness sake, attached is the proposed patch.

It can also be found here:

http://people.freebsd.org/~brueffer/nve.removal.diff

Cheers,

Christian
-------------- next part --------------
Index: ObsoleteFiles.inc
===================================================================
--- ObsoleteFiles.inc	(revision 261434)
+++ ObsoleteFiles.inc	(working copy)
@@ -38,6 +38,9 @@
 #   xargs -n1 | sort | uniq -d;
 # done
 
+# 201302xx: nve(4) replaced by nfe(4)
+OLD_FILES+=usr/share/man/man4/nve.4.gz
+OLD_FILES+=usr/share/man/man4/if_nve.4.gz
 # 20140128: libelf and libdwarf import
 OLD_LIBS+=usr/lib/libelf.so.1
 OLD_LIBS+=usr/lib32/libelf.so.1
Index: release/doc/en_US.ISO8859-1/hardware/article.xml
===================================================================
--- release/doc/en_US.ISO8859-1/hardware/article.xml	(revision 261434)
+++ release/doc/en_US.ISO8859-1/hardware/article.xml	(working copy)
@@ -883,8 +883,6 @@
 
       &hwlist.nge;
 
-      &hwlist.nve;
-
       &hwlist.nxge;
 
       &hwlist.oce;
Index: release/doc/en_US.ISO8859-1/relnotes/article.xml
===================================================================
--- release/doc/en_US.ISO8859-1/relnotes/article.xml	(revision 261434)
+++ release/doc/en_US.ISO8859-1/relnotes/article.xml	(working copy)
@@ -176,6 +176,11 @@
 	<para revision="258830">Support for Broadcom chipsets
 	  BCM57764, BCM57767, BCM57782, BCM57786 and BCM57787 has
 	  been added to &man.bge.4;.</para>
+
+	<para revision="2xxxxx">The deprecated nve(4) driver has been
+	  removed.  Users of NVIDIA nForce MCP network adapters are
+	  advised to use the &man.nfe.4; driver instead, which has been
+	  the default driver for this hardware since &os; 7.0.</para>
       </sect4>
     </sect3>
 
Index: release/doc/share/misc/dev.archlist.txt
===================================================================
--- release/doc/share/misc/dev.archlist.txt	(revision 261434)
+++ release/doc/share/misc/dev.archlist.txt	(working copy)
@@ -97,7 +97,6 @@
 ng_bt3c	i386,pc98,amd64
 ng_ubt	i386,pc98,amd64
 nsp	i386,pc98
-nve	i386,amd64
 nxge	i386,amd64
 oce	i386,amd64
 ohci	i386,pc98,ia64,amd64,powerpc
Index: share/man/man4/Makefile
===================================================================
--- share/man/man4/Makefile	(revision 261434)
+++ share/man/man4/Makefile	(working copy)
@@ -343,7 +343,6 @@
 	${_ntb.4} \
 	null.4 \
 	${_nvd.4} \
-	${_nve.4} \
 	${_nvme.4} \
 	${_nvram.4} \
 	${_nvram2env.4} \
@@ -670,7 +669,6 @@
 MLINKS+=nge.4 if_nge.4
 MLINKS+=${_ntb.4} ${_if_ntb.4} \
 	${_ntb.4} ${_ntb_hw.4}
-MLINKS+=${_nve.4} ${_if_nve.4}
 MLINKS+=${_nxge.4} ${_if_nxge.4}
 MLINKS+=patm.4 if_patm.4
 MLINKS+=pccbb.4 cbb.4
@@ -768,7 +766,6 @@
 _if_bxe.4=	if_bxe.4
 _if_ndis.4=	if_ndis.4
 _if_nfe.4=	if_nfe.4
-_if_nve.4=	if_nve.4
 _if_nxge.4=	if_nxge.4
 _if_urtw.4=	if_urtw.4
 _if_vmx.4=	if_vmx.4
@@ -783,7 +780,6 @@
 _nfe.4=		nfe.4
 _nfsmb.4=	nfsmb.4
 _nvd.4=		nvd.4
-_nve.4=		nve.4
 _nvme.4=	nvme.4
 _nvram.4=	nvram.4
 _nxge.4=	nxge.4
Index: share/man/man4/altq.4
===================================================================
--- share/man/man4/altq.4	(revision 261434)
+++ share/man/man4/altq.4	(working copy)
@@ -151,7 +151,6 @@
 .Xr nfe 4 ,
 .Xr nge 4 ,
 .Xr npe 4 ,
-.Xr nve 4 ,
 .Xr qlxgb 4 ,
 .Xr ral 4 ,
 .Xr re 4 ,
Index: share/man/man4/miibus.4
===================================================================
--- share/man/man4/miibus.4	(revision 261434)
+++ share/man/man4/miibus.4	(working copy)
@@ -87,8 +87,6 @@
 NVIDIA nForce MCP Networking Adapter
 .It Xr nge 4
 National Semiconductor DP83820/DP83821 Gigabit Ethernet
-.It Xr nve 4
-NVIDIA nForce MCP Networking Adapter
 .It Xr pcn 4
 AMD Am79C97x PCI 10/100
 .It Xr re 4
@@ -159,7 +157,6 @@
 .Xr netintro 4 ,
 .Xr nfe 4 ,
 .Xr nge 4 ,
-.Xr nve 4 ,
 .Xr pcn 4 ,
 .Xr re 4 ,
 .Xr rgephy 4 ,
Index: share/man/man4/nve.4
===================================================================
--- share/man/man4/nve.4	(revision 261434)
+++ share/man/man4/nve.4	(working copy)
@@ -1,141 +0,0 @@
-.\" Copyright (c) 2003 Quinton Dolan
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in the
-.\"    documentation and/or other materials provided with the distribution.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" $Id: nvnet.4,v 1.1 2003/10/09 16:48:01 q Exp $
-.\"
-.\" $FreeBSD$
-.\"
-.Dd January 16, 2011
-.Dt NVE 4
-.Os
-.Sh NAME
-.Nm nve
-.Nd "NVIDIA nForce MCP Networking Adapter device driver"
-.Sh SYNOPSIS
-To compile this driver into the kernel,
-place the following lines in your
-kernel configuration file:
-.Bd -ragged -offset indent
-.Cd "device miibus"
-.Cd "device nve"
-.Ed
-.Pp
-Alternatively, to load the driver as a
-module at boot time, place the following line in
-.Xr loader.conf 5 :
-.Bd -literal -offset indent
-if_nve_load="YES"
-.Ed
-.Sh DESCRIPTION
-The
-.Nm
-driver provides support for the NVIDIA nForce MCP and nForce2 MCP2
-networking adapter that is embedded in the southbridge of most
-nForce and nForce2 motherboards.
-.Pp
-This driver is a reimplementation of the NVIDIA supported Linux
-.Nm nvnet
-driver and uses the same closed source API library to access
-the underlying hardware.
-There is currently no programming documentation available for this
-device, and therefore little is known about the internal architecture
-of the MAC engine itself.
-.Pp
-The
-.Nm
-driver supports the following media types:
-.Bl -tag -width ".Cm 10baseT/UTP"
-.It Cm autoselect
-Enable autoselection of the media type and options.
-.It Cm 10baseT/UTP
-Set 10Mbps operation.
-.It Cm 100baseTX
-Set 100Mbps (Fast Ethernet) operation.
-.It Cm 1000baseTX
-Set 1000Mbps (Gigabit Ethernet) operation.
-.El
-.Pp
-The
-.Nm
-driver supports the following media options:
-.Bl -tag -width ".Cm 10baseT/UTP"
-.It Cm full-duplex
-Set full duplex operation.
-.El
-.Pp
-For more information on configuring this device, see
-.Xr ifconfig 8 .
-.Sh HARDWARE
-The
-.Nm
-driver supports the NVIDIA MCP onboard adapters of mainboards with
-the following chipsets:
-.Pp
-.Bl -bullet -compact
-.It
-nForce
-.It
-nForce2
-.It
-nForce3
-.It
-nForce4
-.El
-.Sh DIAGNOSTICS
-.Bl -diag
-.It "nve%d: couldn't map memory"
-A fatal initialization error has occurred.
-.It "nve%d: couldn't map interrupt"
-A fatal initialization error has occurred.
-.It "nve%d: failed to allocate memory"
-There are not enough mbufs available for allocation.
-.It "nve%d: device timeout"
-The device has stopped responding to the network, or there is a problem with
-the network connection (cable).
-.El
-.Sh SEE ALSO
-.Xr altq 4 ,
-.Xr arp 4 ,
-.Xr miibus 4 ,
-.Xr netintro 4 ,
-.Xr ng_ether 4 ,
-.Xr rgephy 4 ,
-.Xr ifconfig 8
-.Sh HISTORY
-The
-.Nm
-driver first appeared in
-.Fx 6.0 .
-.Sh AUTHORS
-.An -nosplit
-The
-.Nm
-driver was written by
-.An Quinton Dolan Aq q at onthenet.com.au
-and
-.An "David E. O'Brien" Aq obrien at FreeBSD.org .
-.Sh BUGS
-There are reports that when the card is in auto select mode,
-ifconfig output reports a 10baseT/UTP output while the LEDs and
-bandwidth show that the card is actually in 100baseTX mode.
Index: share/man/man4/vlan.4
===================================================================
--- share/man/man4/vlan.4	(revision 261434)
+++ share/man/man4/vlan.4	(working copy)
@@ -176,7 +176,6 @@
 .Xr hme 4 ,
 .Xr le 4 ,
 .Xr nfe 4 ,
-.Xr nve 4 ,
 .Xr rl 4 ,
 .Xr sf 4 ,
 .Xr sis 4 ,
Index: sys/amd64/conf/GENERIC
===================================================================
--- sys/amd64/conf/GENERIC	(revision 261434)
+++ sys/amd64/conf/GENERIC	(working copy)
@@ -235,7 +235,6 @@
 device		msk		# Marvell/SysKonnect Yukon II Gigabit Ethernet
 device		nfe		# nVidia nForce MCP on-board Ethernet
 device		nge		# NatSemi DP83820 gigabit Ethernet
-#device		nve		# nVidia nForce MCP on-board Ethernet Networking
 device		pcn		# AMD Am79C97x PCI 10/100 (precedence over 'le')
 device		re		# RealTek 8139C+/8169/8169S/8110S
 device		rl		# RealTek 8129/8139
Index: sys/amd64/conf/NOTES
===================================================================
--- sys/amd64/conf/NOTES	(revision 261434)
+++ sys/amd64/conf/NOTES	(working copy)
@@ -309,7 +309,6 @@
 # mlxen: Mellanox ConnectX HCA Ethernet
 # mthca: Mellanox HCA InfiniBand
 # nfe:	nVidia nForce MCP on-board Ethernet Networking (BSD open source)
-# nve:	nVidia nForce MCP on-board Ethernet Networking
 # sfxge: Solarflare SFC9000 family 10Gb Ethernet adapters
 # vmx:	VMware VMXNET3 Ethernet (BSD open source)
 # wpi:	Intel 3945ABG Wireless LAN controller
@@ -327,7 +326,6 @@
 device  	mlxen		# Mellanox ConnectX HCA Ethernet
 device  	mthca		# Mellanox HCA InfiniBand
 device		nfe		# nVidia nForce MCP on-board Ethernet
-device		nve		# nVidia nForce MCP on-board Ethernet Networking
 device		sfxge		# Solarflare SFC9000 10Gb Ethernet
 device		vmx		# VMware VMXNET3 Ethernet
 device		wpi		# Intel 3945ABG wireless NICs.
Index: sys/boot/forth/loader.conf
===================================================================
--- sys/boot/forth/loader.conf	(revision 261434)
+++ sys/boot/forth/loader.conf	(working copy)
@@ -327,7 +327,6 @@
 if_my_load="NO"			# Myson PCI Fast Ethernet
 if_nfe_load="NO"		# NVIDIA nForce MCP Networking Adapter
 if_nge_load="NO"		# National Semiconductor PCI Gigabit Ethernet
-if_nve_load="NO"		# NVIDIA nForce MCP Networking Adapter
 if_nxge_load="NO"		# Neterion Xframe 10Gb Ethernet
 if_patm_load="NO"		# IDT77252 ATM
 if_pcn_load="NO"		# AMD PCnet PCI
Index: sys/conf/WITHOUT_SOURCELESS_HOST
===================================================================
--- sys/conf/WITHOUT_SOURCELESS_HOST	(revision 261434)
+++ sys/conf/WITHOUT_SOURCELESS_HOST	(working copy)
@@ -8,4 +8,3 @@
 nodevice	hptmv
 nodevice	hptnr
 nodevice	hptrr
-nodevice	nve
Index: sys/conf/files.amd64
===================================================================
--- sys/conf/files.amd64	(revision 261434)
+++ sys/conf/files.amd64	(working copy)
@@ -47,17 +47,6 @@
 	no-obj no-implicit-rule before-depend				\
 	clean		"ukbdmap.h"
 #
-nvenetlib.o			optional	nve pci			\
-	dependency	"$S/contrib/dev/nve/amd64/nvenetlib.o.bz2.uu"	\
-	compile-with	"uudecode $S/contrib/dev/nve/amd64/nvenetlib.o.bz2.uu ; bzip2 -df nvenetlib.o.bz2" \
-	no-implicit-rule
-#
-os+%DIKED-nve.h		optional	nve pci			\
-	dependency	"$S/contrib/dev/nve/os.h"			\
-	compile-with	"sed -e 's/^.*#include.*phy\.h.*$$//' $S/contrib/dev/nve/os.h > os+%DIKED-nve.h" \
-	no-implicit-rule no-obj before-depend				\
-	clean		"os+%DIKED-nve.h"
-#
 hpt27xx_lib.o			optional	hpt27xx			\
 	dependency	"$S/dev/hpt27xx/amd64-elf.hpt27xx_lib.o.uu"	\
 	compile-with	"uudecode < $S/dev/hpt27xx/amd64-elf.hpt27xx_lib.o.uu" \
@@ -248,7 +237,6 @@
 dev/ntb/if_ntb/if_ntb.c		optional	if_ntb
 dev/ntb/ntb_hw/ntb_hw.c		optional	if_ntb ntb_hw
 dev/nvd/nvd.c			optional	nvd nvme
-dev/nve/if_nve.c		optional	nve pci
 dev/nvme/nvme.c			optional	nvme
 dev/nvme/nvme_ctrlr.c		optional	nvme
 dev/nvme/nvme_ctrlr_cmd.c	optional	nvme
Index: sys/conf/files.i386
===================================================================
--- sys/conf/files.i386	(revision 261434)
+++ sys/conf/files.i386	(working copy)
@@ -46,17 +46,6 @@
 	no-obj no-implicit-rule before-depend				\
 	clean		"ukbdmap.h"
 #
-nvenetlib.o			optional	nve pci			\
-	dependency	"$S/contrib/dev/nve/i386/nvenetlib.o.bz2.uu"	\
-	compile-with	"uudecode $S/contrib/dev/nve/i386/nvenetlib.o.bz2.uu ; bzip2 -df nvenetlib.o.bz2" \
-	no-implicit-rule
-#
-os+%DIKED-nve.h		optional	nve pci				\
-	dependency	"$S/contrib/dev/nve/os.h"			\
-	compile-with	"sed -e 's/^.*#include.*phy\.h.*$$//' $S/contrib/dev/nve/os.h > os+%DIKED-nve.h" \
-	no-implicit-rule no-obj before-depend				\
-	clean		"os+%DIKED-nve.h"
-#
 hpt27xx_lib.o			optional	hpt27xx			\
 	dependency	"$S/dev/hpt27xx/i386-elf.hpt27xx_lib.o.uu"	\
 	compile-with	"uudecode < $S/dev/hpt27xx/i386-elf.hpt27xx_lib.o.uu" \
@@ -257,7 +246,6 @@
 dev/mse/mse_isa.c		optional mse isa
 dev/nfe/if_nfe.c		optional nfe pci
 dev/nvd/nvd.c			optional nvd nvme
-dev/nve/if_nve.c		optional nve pci
 dev/nvme/nvme.c			optional nvme
 dev/nvme/nvme_ctrlr.c		optional nvme
 dev/nvme/nvme_ctrlr_cmd.c	optional nvme
Index: sys/contrib/dev/nve/adapter.h
===================================================================
--- sys/contrib/dev/nve/adapter.h	(revision 261434)
+++ sys/contrib/dev/nve/adapter.h	(working copy)
@@ -1,583 +0,0 @@
-/***************************************************************************\
-|*                                                                           *|
-|*       Copyright 2001-2004 NVIDIA Corporation.  All Rights Reserved.       *|
-|*                                                                           *|
-|*     THE INFORMATION CONTAINED HEREIN  IS PROPRIETARY AND CONFIDENTIAL     *|
-|*     TO NVIDIA, CORPORATION.   USE,  REPRODUCTION OR DISCLOSURE TO ANY     *|
-|*     THIRD PARTY IS SUBJECT TO WRITTEN PRE-APPROVAL BY NVIDIA, CORP.       *|
-|*                                                                           *|
-|*     THE INFORMATION CONTAINED HEREIN IS PROVIDED  "AS IS" WITHOUT         *|
-|*     EXPRESS OR IMPLIED WARRANTY OF ANY KIND, INCLUDING ALL IMPLIED        *|
-|*     WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A     *|
-|*     PARTICULAR PURPOSE.                                                   *|
-|*                                                                           *|
-\***************************************************************************/ 
-
-/*
-    FILE:   adapter.h
-    DATE:   2/7/00
-
-    This file contains the hardware interface to the ethernet adapter.
-*/
-
-#ifndef _ADAPTER_H_
-#define _ADAPTER_H_
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define HDA_VERSION_STRING "HDR A: $Revision: #46 $"
-
-#ifdef MODS_NETWORK_BUILD
-#ifndef _DRVAPP_H_
-#include "drvapp.h"
-#endif
-#endif
-
-//////////////////////////////////////////////////////////////////
-// For the set and get configuration calls.
-typedef struct  _ADAPTER_CONFIG
-{
-    NV_UINT32   ulFlags;
-}   ADAPTER_CONFIG, *PADAPTER_CONFIG;
-//////////////////////////////////////////////////////////////////
-
-typedef struct _ADAPTER_WRITE_OFFLOAD
-{
-    NV_UINT32   usBitmask;
-    NV_UINT32   ulMss;
-
-} ADAPTER_WRITE_OFFLOAD;
-
-//////////////////////////////////////////////////////////////////
-// For the ADAPTER_Write1 call.
-/* This scatter gather list should be same as defined in ndis.h by MS.
-   For ULONG_PTR MS header file says that it will be of same size as
-   pointer. It has been defined to take care of casting between differenet
-   sizes.
-*/
-typedef struct _NVSCATTER_GATHER_ELEMENT {
-    NV_UINT32 PhysLow;
-    NV_UINT32 PhysHigh;
-    NV_UINT32 Length;
-    NV_VOID *Reserved;
-} NVSCATTER_GATHER_ELEMENT, *PNVSCATTER_GATHER_ELEMENT;
-
-#ifndef linux
-#pragma warning(disable:4200)
-#endif
-typedef struct _NVSCATTER_GATHER_LIST {
-    NV_UINT32       NumberOfElements;
-    NV_VOID         *Reserved;
-    NVSCATTER_GATHER_ELEMENT Elements[0];   // Made 0 sized element to remove MODS compilation error
-                                            // Elements[0] and Elements[] have the same effect. 
-                                            // sizeof(NVSCATTER_GATHER_LIST) is the same (value of 8) in both cases
-                                            // And both lead to Warning 4200 in MSVC
-} NVSCATTER_GATHER_LIST, *PNVSCATTER_GATHER_LIST;
-#ifndef linux
-#pragma warning(default:4200)
-#endif
-
-typedef struct  _ADAPTER_WRITE_DATA1
-{
-    NV_UINT32                   ulTotalLength;
-    PNV_VOID                    pvID;
-    NV_UINT8                    uc8021pPriority;
-    ADAPTER_WRITE_OFFLOAD       *psOffload;
-    PNVSCATTER_GATHER_LIST      pNVSGL;
-}   ADAPTER_WRITE_DATA1, *PADAPTER_WRITE_DATA1;
-
-
-//////////////////////////////////////////////////////////////////
-// For the ADAPTER_Write call.
-typedef struct  _ADAPTER_WRITE_ELEMENT
-{
-    PNV_VOID   pPhysical;
-    NV_UINT32   ulLength;
-}   ADAPTER_WRITE_ELEMENT, *PADAPTER_WRITE_ELEMENT;
-
-
-#define ADAPTER_WRITE_OFFLOAD_BP_SEGOFFLOAD      0
-#define ADAPTER_WRITE_OFFLOAD_BP_IPV4CHECKSUM    1
-#define ADAPTER_WRITE_OFFLOAD_BP_IPV6CHECKSUM    2
-#define ADAPTER_WRITE_OFFLOAD_BP_TCPCHECKSUM     3
-#define ADAPTER_WRITE_OFFLOAD_BP_UDPCHECKSUM     4
-#define ADAPTER_WRITE_OFFLOAD_BP_IPCHECKSUM      5
-
-
-// pvID is a value that will be passed back into OSAPI.pfnPacketWasSent
-// when the transmission completes. if pvID is NULL, the ADAPTER code
-// assumes the caller does not want the pfnPacketWasSent callback.
-typedef struct  _ADAPTER_WRITE_DATA
-{
-    NV_UINT32                   ulNumberOfElements;
-    NV_UINT32                   ulTotalLength;
-    PNV_VOID                    pvID;
-    NV_UINT8                    uc8021pPriority;
-    ADAPTER_WRITE_OFFLOAD       *psOffload;
-#ifdef linux
-    ADAPTER_WRITE_ELEMENT       sElement[32];
-#else
-    ADAPTER_WRITE_ELEMENT       sElement[100];
-#endif
-}   ADAPTER_WRITE_DATA, *PADAPTER_WRITE_DATA;
-//////////////////////////////////////////////////////////////////
-
-
-
-//////////////////////////////////////////////////////////////////
-// For the ADAPTER_Read call.
-typedef struct  _ADAPTER_READ_ELEMENT
-{
-    PNV_VOID   pPhysical;
-    NV_UINT32   ulLength;
-}   ADAPTER_READ_ELEMENT, *PADAPTER_READ_ELEMENT;
-
-typedef struct _ADAPTER_READ_OFFLOAD
-{
-    NV_UINT8  ucChecksumStatus;
-
-} ADAPTER_READ_OFFLOAD;
-
-typedef struct _ADAPTER_READ_DATA
-{
-    NV_UINT32                   ulNumberOfElements;
-    NV_UINT32                   ulTotalLength;
-    PNV_VOID                    pvID;
-    NV_UINT32                   ulFilterMatch;
-    ADAPTER_READ_OFFLOAD        sOffload;
-    ADAPTER_READ_ELEMENT        sElement[10];
-}   ADAPTER_READ_DATA, *PADAPTER_READ_DATA;
-
-
-#define RDFLAG_CHK_NOCHECKSUM      0
-#define RDFLAG_CHK_IPPASSTCPFAIL   1
-#define RDFLAG_CHK_IPPASSUDPFAIL   2
-#define RDFLAG_CHK_IPFAIL          3
-#define RDFLAG_CHK_IPPASSNOTCPUDP  4
-#define RDFLAG_CHK_IPPASSTCPPASS   5
-#define RDFLAG_CHK_IPPASSUDPPASS   6
-#define RDFLAG_CHK_RESERVED        7
-
-
-// The ulFilterMatch flag can be a logical OR of the following
-#define ADREADFL_UNICAST_MATCH          0x00000001
-#define ADREADFL_MULTICAST_MATCH        0x00000002
-#define ADREADFL_BROADCAST_MATCH        0x00000004
-//////////////////////////////////////////////////////////////////
-
-
-
-//////////////////////////////////////////////////////////////////
-// For the ADAPTER_GetPowerCapabilities call.
-typedef struct  _ADAPTER_POWERCAPS
-{
-    NV_UINT32   ulPowerFlags;
-    NV_UINT32   ulMagicPacketWakeUpFlags;
-    NV_UINT32   ulPatternWakeUpFlags;
-    NV_UINT32   ulLinkChangeWakeUpFlags;
-    NV_SINT32     iMaxWakeUpPatterns;
-}   ADAPTER_POWERCAPS, *PADAPTER_POWERCAPS;
-
-// For the ADAPTER_GetPowerState and ADAPTER_SetPowerState call.
-typedef struct  _ADAPTER_POWERSTATE
-{
-    NV_UINT32   ulPowerFlags;
-    NV_UINT32   ulMagicPacketWakeUpFlags;
-    NV_UINT32   ulPatternWakeUpFlags;
-    NV_UINT32   ulLinkChangeWakeUpFlags;
-}   ADAPTER_POWERSTATE, *PADAPTER_POWERSTATE;
-
-// Each of the flag fields in the POWERCAPS structure above can have
-// any of the following bitflags set giving the capabilites of the
-// adapter. In the case of the wake up fields, these flags mean that
-// wake up can happen from the specified power state.
-
-// For the POWERSTATE structure, the ulPowerFlags field should just
-// have one of these bits set to go to that particular power state.
-// The WakeUp fields can have one or more of these bits set to indicate
-// what states should be woken up from.
-#define POWER_STATE_D0          0x00000001
-#define POWER_STATE_D1          0x00000002
-#define POWER_STATE_D2          0x00000004
-#define POWER_STATE_D3          0x00000008
-
-#define POWER_STATE_ALL         (POWER_STATE_D0 | \
-                                POWER_STATE_D1  | \
-                                POWER_STATE_D2  | \
-                                POWER_STATE_D3)
-//////////////////////////////////////////////////////////////////
-
-
-
-//////////////////////////////////////////////////////////////////
-// The ADAPTER_GetPacketFilterCaps call returns a NV_UINT32 that can
-// have the following capability bits set.
-#define ACCEPT_UNICAST_PACKETS      0x00000001
-#define ACCEPT_MULTICAST_PACKETS    0x00000002
-#define ACCEPT_BROADCAST_PACKETS    0x00000004
-#define ACCEPT_ALL_PACKETS          0x00000008
-
-#define ETH_LENGTH_OF_ADDRESS        6
-
-// The ADAPTER_SetPacketFilter call uses this structure to know what
-// packet filter to set. The ulPacketFilter field can contain some
-// union of the bit flags above. The acMulticastMask array holds a
-// 48 bit MAC address mask with a 0 in every bit position that should
-// be ignored on compare and a 1 in every bit position that should
-// be taken into account when comparing to see if the destination
-// address of a packet should be accepted for multicast.
-typedef struct  _PACKET_FILTER
-{
-    NV_UINT32   ulFilterFlags;
-    NV_UINT8   acMulticastAddress[ETH_LENGTH_OF_ADDRESS];
-    NV_UINT8   acMulticastMask[ETH_LENGTH_OF_ADDRESS];
-}   PACKET_FILTER, *PPACKET_FILTER;
-//////////////////////////////////////////////////////////////////
-
-
-//////////////////////////////////////////////////////////////////
-// A WAKE_UP_PATTERN is a 128-byte pattern that the adapter can
-// look for in incoming packets to decide when to wake up.  Higher-
-// level protocols can use this to, for example, wake up the
-// adapter whenever it sees an IP packet that is addressed to it.
-// A pattern consists of 128 bits of byte masks that indicate
-// which bytes in the packet are relevant to the pattern, plus
-// values for each byte.
-#define WAKE_UP_PATTERN_SIZE 128
-
-typedef struct _WAKE_UP_PATTERN
-{
-    NV_UINT32   aulByteMask[WAKE_UP_PATTERN_SIZE/32];
-    NV_UINT8   acData[WAKE_UP_PATTERN_SIZE];
-}   WAKE_UP_PATTERN, *PWAKE_UP_PATTERN;
-
-
-
-//
-//
-// Adapter offload
-//
-typedef struct _ADAPTER_OFFLOAD {
-
-    NV_UINT32 Type;
-    NV_UINT32 Value0;
-
-} ADAPTER_OFFLOAD, *PADAPTER_OFFLOAD;
-
-#define ADAPTER_OFFLOAD_VLAN        0x00000001
-#define ADAPTER_OFFLOAD_IEEE802_1P    0x00000002
-#define ADAPTER_OFFLOAD_IEEE802_1PQ_PAD    0x00000004
-
-//////////////////////////////////////////////////////////////////
-
-//  CMNDATA_OS_ADAPTER
-//  Structure common to OS and Adapter layers
-//  Used for moving data from the OS layer to the adapter layer through SetCommonData 
-//  function call from OS layer to Adapter layer
-// 
-
-typedef struct  _CMNDATA_OS_ADAPTER
-{
-#ifndef linux
-    ASF_SEC0_BASE   sRegSec0Base;
-#endif
-    NV_UINT32           bFPGA; 
-    NV_UINT32           ulFPGAEepromSize;
-    NV_UINT32           bChecksumOffloadEnable;
-    NV_UINT32           ulChecksumOffloadBM;
-    NV_UINT32           ulChecksumOffloadOS;
-    NV_UINT32           ulMediaIF;
-    NV_UINT32           bOemCustomEventRead;
-
-    // Debug only right now
-    //!!! Beware mods is relying on the fields blow.
-    NV_UINT32           ulWatermarkTFBW;
-    NV_UINT32           ulBackoffRseed;
-    NV_UINT32           ulBackoffSlotTime;
-    NV_UINT32           ulModeRegTxReadCompleteEnable;
-    NV_UINT32           ulFatalErrorRegister;
-
-} CMNDATA_OS_ADAPTER;
-
-
-//////////////////////////////////////////////////////////////////
-// The functional typedefs for the ADAPTER Api
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_CLOSE)  (PNV_VOID pvContext, NV_UINT8 ucIsPowerDown);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_INIT)  (PNV_VOID pvContext, NV_UINT16 usForcedSpeed, NV_UINT8 ucForceDpx, NV_UINT8 ucForceMode, NV_UINT8 ucAsyncMode, NV_UINT32 *puiLinkState);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_DEINIT)  (PNV_VOID pvContext, NV_UINT8 ucIsPowerDown);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_START)  (PNV_VOID pvContext);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_STOP)   (PNV_VOID pvContext, NV_UINT8 ucIsPowerDown);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_QUERY_WRITE_SLOTS) (PNV_VOID pvContext);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_WRITE) (PNV_VOID pvContext, ADAPTER_WRITE_DATA *pADWriteData);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_WRITE1) (PNV_VOID pvContext, ADAPTER_WRITE_DATA1 *pADWriteData1);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_QUERY_INTERRUPT) (PNV_VOID pvContext);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_HANDLE_INTERRUPT) (PNV_VOID pvContext);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_DISABLE_INTERRUPTS) (PNV_VOID pvContext);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_ENABLE_INTERRUPTS) (PNV_VOID pvContext);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_CLEAR_INTERRUPTS) (PNV_VOID pvContext);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_CLEAR_TX_DESC) (PNV_VOID pvContext);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_LINK_SPEED) (PNV_VOID pvContext);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_LINK_MODE) (PNV_VOID pvContext);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_LINK_STATE) (PNV_VOID pvContext, NV_UINT32 *pulLinkState);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_IS_LINK_INITIALIZING) (PNV_VOID pvContext);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_RESET_PHY_INIT_STATE) (PNV_VOID pvContext);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_TRANSMIT_QUEUE_SIZE) (PNV_VOID pvContext);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_RECEIVE_QUEUE_SIZE) (PNV_VOID pvContext);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_STATISTICS) (PNV_VOID pvContext, PADAPTER_STATS pADStats);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_POWER_CAPS) (PNV_VOID pvContext, PADAPTER_POWERCAPS pADPowerCaps);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_POWER_STATE) (PNV_VOID pvContext, PADAPTER_POWERSTATE pADPowerState);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_SET_POWER_STATE) (PNV_VOID pvContext, PADAPTER_POWERSTATE pADPowerState);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_SET_LOW_SPEED_FOR_PM) (PNV_VOID pvContext);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_GET_PACKET_FILTER_CAPS) (PNV_VOID pvContext);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_SET_PACKET_FILTER) (PNV_VOID pvContext, PPACKET_FILTER pPacketFilter);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_SET_WAKE_UP_PATTERN) (PNV_VOID pvContext, NV_SINT32 iPattern, PWAKE_UP_PATTERN pPattern);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_ENABLE_WAKE_UP_PATTERN) (PNV_VOID pvContext, NV_SINT32 iPattern, NV_SINT32 iEnable);
-typedef NV_API_CALL NV_SINT32 (* PFN_SET_NODE_ADDRESS) (PNV_VOID pvContext, NV_UINT8 *pNodeAddress);
-typedef NV_API_CALL NV_SINT32 (* PFN_GET_NODE_ADDRESS) (PNV_VOID pvContext, NV_UINT8 *pNodeAddress);
-typedef NV_API_CALL NV_SINT32 (* PFN_GET_ADAPTER_INFO) (PNV_VOID pvContext, PNV_VOID pVoidPtr, NV_SINT32 iType, NV_SINT32 *piLength);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_READ_PHY)  (PNV_VOID pvContext, NV_UINT32 ulPhyAddr, NV_UINT32 ulPhyReg, NV_UINT32 *pulValue);
-typedef NV_API_CALL NV_SINT32 (* PFN_ADAPTER_WRITE_PHY) (PNV_VOID pvContext, NV_UINT32 ulPhyAddr, NV_UINT32 ulPhyReg, NV_UINT32 ulValue);
-typedef NV_API_CALL NV_VOID(* PFN_ADAPTER_SET_SPPED_DUPLEX) (PNV_VOID pvContext);
-typedef NV_API_CALL NV_SINT32 (*PFN_REGISTER_OFFLOAD) (PNV_VOID pvContext,  PADAPTER_OFFLOAD pOffload);
-typedef NV_API_CALL NV_SINT32 (*PFN_DEREGISTER_OFFLOAD) (PNV_VOID pvContext, PADAPTER_OFFLOAD pOffload);
-typedef NV_API_CALL NV_SINT32 (*PFN_RX_BUFF_READY) (PNV_VOID pvContext, PMEMORY_BLOCK pMemBlock, PNV_VOID pvID);
-
-#ifndef linux
-typedef NV_SINT32 (*PFN_ADAPTER_ASF_SETUPREGISTERS) (PNV_VOID pvContext, NV_SINT32 bInitTime);
-typedef NV_SINT32 (*PFN_ADAPTER_ASF_GETSEC0BASEADDRESS) (PNV_VOID pvContext, ASF_SEC0_BASE **ppsSec0Base);
-typedef NV_SINT32 (*PFN_ADAPTER_ASF_SETSOURCEIPADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucSrcIPAddress);
-typedef NV_SINT32 (*PFN_ADAPTER_ASF_GETDESTIPADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucDestIPAddress);
-typedef NV_SINT32 (*PFN_ADAPTER_ASF_SETDESTIPADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucDestIPAddress);
-typedef NV_SINT32 (*PFN_ADAPTER_ASF_WRITEEEPROMANDSETUPREGISTERS) (PNV_VOID pvContext, NV_BOOLEAN bCompare, PNV_VOID pucValue, PNV_VOID pszSec0BaseMember, 
-                                      NV_UINT16 usCount, NV_UINT32 ulAddressOffset);
-
-typedef NV_SINT32 (*PFN_ADAPTER_ASF_ISASFREADY) (PNV_VOID pvContext, ASF_ASFREADY *psASFReady);
-
-typedef NV_SINT32 (*PFN_ADAPTER_ASF_SETDESTMACADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucDestMACAddress);
-typedef NV_SINT32 (*PFN_ADAPTER_ASF_GETSOURCEMACADDRESS) (PNV_VOID pvContext, NV_UINT8 *pucSrcMACAddress);
-
-typedef NV_SINT32 (*PFN_ADAPTER_ASF_CHECK_FOR_EEPROM_PRESENCE)  (PNV_VOID pvContext);
-#endif
-
-typedef NV_API_CALL NV_VOID (*PFN_ADAPTER_SET_COMMONDATA) (PNV_VOID pvContext, CMNDATA_OS_ADAPTER *psOSAdpater);
-typedef NV_API_CALL NV_VOID (*PFN_ADAPTER_SET_CHECKSUMOFFLOAD) (PNV_VOID pvContext, NV_UINT32 bSet);
-
-
- 
-typedef struct  _ADAPTER_API
-{
-    // The adapter context
-    PNV_VOID                                   pADCX;
-
-    // The adapter interface
-    PFN_ADAPTER_CLOSE                       pfnClose;
-    PFN_ADAPTER_INIT                        pfnInit;
-    PFN_ADAPTER_DEINIT                      pfnDeinit;
-    PFN_ADAPTER_START                       pfnStart;
-    PFN_ADAPTER_STOP                        pfnStop;
-    PFN_ADAPTER_QUERY_WRITE_SLOTS           pfnQueryWriteSlots;
-    PFN_ADAPTER_WRITE                       pfnWrite;
-    PFN_ADAPTER_WRITE1                      pfnWrite1;
-    PFN_ADAPTER_QUERY_INTERRUPT             pfnQueryInterrupt;
-    PFN_ADAPTER_HANDLE_INTERRUPT            pfnHandleInterrupt;
-    PFN_ADAPTER_DISABLE_INTERRUPTS          pfnDisableInterrupts;
-    PFN_ADAPTER_ENABLE_INTERRUPTS           pfnEnableInterrupts;
-    PFN_ADAPTER_CLEAR_INTERRUPTS            pfnClearInterrupts;
-    PFN_ADAPTER_CLEAR_TX_DESC                pfnClearTxDesc;
-    PFN_ADAPTER_GET_LINK_SPEED              pfnGetLinkSpeed;
-    PFN_ADAPTER_GET_LINK_MODE               pfnGetLinkMode;
-    PFN_ADAPTER_GET_LINK_STATE              pfnGetLinkState;
-    PFN_ADAPTER_IS_LINK_INITIALIZING        pfnIsLinkInitializing;
-    PFN_ADAPTER_RESET_PHY_INIT_STATE        pfnResetPhyInitState;
-    PFN_ADAPTER_GET_TRANSMIT_QUEUE_SIZE     pfnGetTransmitQueueSize;
-    PFN_ADAPTER_GET_RECEIVE_QUEUE_SIZE      pfnGetReceiveQueueSize;
-    PFN_ADAPTER_GET_STATISTICS              pfnGetStatistics;
-    PFN_ADAPTER_GET_POWER_CAPS              pfnGetPowerCaps;
-    PFN_ADAPTER_GET_POWER_STATE             pfnGetPowerState;
-    PFN_ADAPTER_SET_POWER_STATE             pfnSetPowerState;
-    PFN_ADAPTER_SET_LOW_SPEED_FOR_PM        pfnSetLowSpeedForPM;
-    PFN_ADAPTER_GET_PACKET_FILTER_CAPS      pfnGetPacketFilterCaps;
-    PFN_ADAPTER_SET_PACKET_FILTER           pfnSetPacketFilter;
-    PFN_ADAPTER_SET_WAKE_UP_PATTERN         pfnSetWakeUpPattern;
-    PFN_ADAPTER_ENABLE_WAKE_UP_PATTERN      pfnEnableWakeUpPattern;
-    PFN_SET_NODE_ADDRESS                    pfnSetNodeAddress;
-    PFN_GET_NODE_ADDRESS                    pfnGetNodeAddress;
-    PFN_GET_ADAPTER_INFO                    pfnGetAdapterInfo;
-    PFN_ADAPTER_SET_SPPED_DUPLEX            pfnSetSpeedDuplex;
-    PFN_ADAPTER_READ_PHY                    pfnReadPhy;
-    PFN_ADAPTER_WRITE_PHY                    pfnWritePhy;
-    PFN_REGISTER_OFFLOAD                    pfnRegisterOffload;
-    PFN_DEREGISTER_OFFLOAD                    pfnDeRegisterOffload;
-    PFN_RX_BUFF_READY                        pfnRxBuffReady;
-#ifndef linux
-    PFN_ADAPTER_ASF_SETUPREGISTERS          pfnASFSetupRegisters;
-    PFN_ADAPTER_ASF_GETSEC0BASEADDRESS      pfnASFGetSec0BaseAddress;
-    PFN_ADAPTER_ASF_SETSOURCEIPADDRESS      pfnASFSetSourceIPAddress;
-    PFN_ADAPTER_ASF_GETDESTIPADDRESS        pfnASFGetDestIPAddress;
-    PFN_ADAPTER_ASF_SETDESTIPADDRESS        pfnASFSetDestIPAddress;
-    PFN_ADAPTER_ASF_WRITEEEPROMANDSETUPREGISTERS pfnASFWriteEEPROMAndSetupRegisters;
-    PFN_ADAPTER_ASF_SETDESTMACADDRESS       pfnASFSetDestMACAddress;
-    PFN_ADAPTER_ASF_GETSOURCEMACADDRESS     pfnASFGetSourceMACAddress;
-    PFN_ADAPTER_ASF_ISASFREADY              pfnASFIsASFReady;
-    PFN_ADAPTER_ASF_CHECK_FOR_EEPROM_PRESENCE pfnASFCheckForEepromPresence;
-#endif
-    PFN_ADAPTER_SET_COMMONDATA              pfnSetCommonData;
-
-    PFN_ADAPTER_SET_CHECKSUMOFFLOAD         pfnSetChecksumOffload;
-
-}   ADAPTER_API, *PADAPTER_API;
-//////////////////////////////////////////////////////////////////
-
-#define MAX_PACKET_TO_ACCUMULATE    16
-
-typedef struct _ADAPTER_OPEN_PARAMS
-{
-    PNV_VOID pOSApi; //pointer to OSAPI structure passed from higher layer
-    PNV_VOID pvHardwareBaseAddress; //memory mapped address passed from higher layer
-    NV_UINT32 ulPollInterval; //poll interval in micro seconds. Used in polling mode
-    NV_UINT32 MaxDpcLoop; //Maximum number of times we loop to in function ADAPTER_HandleInterrupt
-    NV_UINT32 MaxRxPkt; //Maximum number of packet we process each time in function UpdateReceiveDescRingData
-    NV_UINT32 MaxTxPkt; //Maximum number of packet we process each time in function UpdateTransmitDescRingData
-    NV_UINT32 MaxRxPktToAccumulate; //maximum number of rx packet we accumulate in UpdateReceiveDescRingData before
-                                //indicating packets to OS.
-    NV_UINT32 SentPacketStatusSuccess; //Status returned from adapter layer to higher layer when packet was sent successfully
-    NV_UINT32 SentPacketStatusFailure; ////Status returned from adapter layer to higher layer when packet send was unsuccessful
-    NV_UINT32 SetForcedModeEveryNthRxPacket; //NOT USED: For experiment with descriptor based interrupt
-    NV_UINT32 SetForcedModeEveryNthTxPacket; //NOT USED: For experiment with descriptor based interrupt
-    NV_UINT32 RxForcedInterrupt; //NOT USED: For experiment with descriptor based interrupt
-    NV_UINT32 TxForcedInterrupt; //NOT USED: For experiment with descriptor based interrupt
-    NV_UINT32 DeviceId; //Of MAC
-    NV_UINT32 DeviceType;
-    NV_UINT32 PollIntervalInusForThroughputMode; //Of MAC
-    NV_UINT32 bASFEnabled;
-    NV_UINT32 ulDescriptorVersion;
-    NV_UINT32 ulMaxPacketSize;
-
-
-#define MEDIA_IF_AUTO       0
-#define MEDIA_IF_RGMII      1
-#define MEDIA_IF_MII        2
-    NV_UINT32 ulMediaIF;
-
-	NV_UINT32	PhyPowerIsolationTimeoutInms;
-	NV_UINT32	PhyResetTimeoutInms;
-	NV_UINT32	PhyAutonegotiateTimeoutInms;
-	NV_UINT32	PhyLinkupTimeoutInms;
-	NV_UINT32	PhyRdWrTimeoutInus;
-	NV_UINT32	PhyPowerdownOnClose;
-
-    // Added for Bug 100715
-    NV_UINT32   bDisableMIIInterruptAndReadPhyStatus;
-
-}ADAPTER_OPEN_PARAMS, *PADAPTER_OPEN_PARAMS;
-
-//////////////////////////////////////////////////////////////////
-// This is the one function in the adapter interface that is publicly
-// available. The rest of the interface is returned in the pAdapterApi.
-// The first argument needs to be cast to a OSAPI structure pointer.
-// The second argument should be cast to a ADPATER_API structure pointer.
-NV_API_CALL NV_SINT32 ADAPTER_Open (PADAPTER_OPEN_PARAMS pAdapterOpenParams, PNV_VOID *pvpAdapterApi, NV_UINT32 *pulPhyAddr);
-
-//////////////////////////////////////////////////////////////////
-
-
-
-//////////////////////////////////////////////////////////////////
-// Here are the error codes the adapter function calls return.
-#define ADAPTERERR_NONE                             0x0000
-#define ADAPTERERR_COULD_NOT_ALLOC_CONTEXT          0x0001
-#define ADAPTERERR_COULD_NOT_CREATE_CONTEXT         0x0002
-#define ADAPTERERR_COULD_NOT_OPEN_PHY               0x0003
-#define ADAPTERERR_TRANSMIT_QUEUE_FULL              0x0004
-#define ADAPTERERR_COULD_NOT_INIT_PHY               0x0005
-#define ADAPTERERR_PHYS_SIZE_SMALL                    0x0006
-#define ADAPTERERR_ERROR                            0x0007  // Generic error
-//////////////////////////////////////////////////////////////////
-
-// This block moved from myadap.h
-// nFlag for Stop/Start ReceiverAndOrTransmitter can be an OR of
-// the following two flags
-#define AFFECT_RECEIVER     0x01
-#define AFFECT_TRANSMITTER  0x02
-
-#define REDUCE_LENGTH_BY 48
-
-#define EXTRA_WRITE_SLOT_TO_REDUCE_PER_SEND    4
-#define MAX_TX_DESCS                    256 
-#define MAX_TX_DESCS_VER2               (256 * 4)
-
-typedef struct _TX_INFO_ADAP
-{
-    NV_UINT32   NoOfDesc; 
-    PNV_VOID    pvVar2; 
-}TX_INFO_ADAP, *PTX_INFO_ADAP;
-
-#define WORKAROUND_FOR_MCP3_TX_STALL
-
-#ifdef WORKAROUND_FOR_MCP3_TX_STALL
-NV_SINT32 ADAPTER_WorkaroundTXHang(PNV_VOID pvContext);
-#endif
-
-//#define TRACK_INIT_TIME
-
-#ifdef TRACK_INIT_TIME
-//This routine is defined in entry.c adapter doesn't link int64.lib
-//We defined here so that its easy to use it in phy as well as mswin
-
-#define MAX_PRINT_INDEX        32
-extern NV_VOID PrintTime(NV_UINT32 ulIndex);
-#define PRINT_INIT_TIME(_a) PrintTime((_a))
-#else
-#define PRINT_INIT_TIME(_a)
-#endif
-
-// Segmentation offload info
-#define DEVCAPS_SEGOL_BP_ENABLE       0   
-#define DEVCAPS_SEGOL_BP_IPOPTIONS    1
-#define DEVCAPS_SEGOL_BP_TCPOPTIONS   2
-#define DEVCAPS_SEGOL_BP_SEGSIZE_LO   8
-#define DEVCAPS_SEGOL_BP_SEGSIZE_HI   31
-
-
-// Checksum offload info
-// Byte 0 : V4 TX
-#define DEVCAPS_V4_TX_BP_IPOPTIONS      0
-#define DEVCAPS_V4_TX_BP_TCPOPTIONS     1
-#define DEVCAPS_V4_TX_BP_TCPCHECKSUM    2
-#define DEVCAPS_V4_TX_BP_UDPCHECKSUM    3
-#define DEVCAPS_V4_TX_BP_IPCHECKSUM     4
-
-// Byte 0 : V4 RX
-#define DEVCAPS_V4_RX_BP_IPOPTIONS      8
-#define DEVCAPS_V4_RX_BP_TCPOPTIONS     9
-#define DEVCAPS_V4_RX_BP_TCPCHECKSUM    10
-#define DEVCAPS_V4_RX_BP_UDPCHECKSUM    11
-#define DEVCAPS_V4_RX_BP_IPCHECKSUM     12
-
-// Byte 1 : V6 TX
-#define DEVCAPS_V6_TX_BP_IPOPTIONS      16
-#define DEVCAPS_V6_TX_BP_TCPOPTIONS     17
-#define DEVCAPS_V6_TX_BP_TCPCHECKSUM    18
-#define DEVCAPS_V6_TX_BP_UDPCHECKSUM    19
-
-// Byte 2 : V6 RX
-#define DEVCAPS_V6_RX_BP_IPOPTIONS      24
-#define DEVCAPS_V6_RX_BP_TCPOPTIONS     25
-#define DEVCAPS_V6_RX_BP_TCPCHECKSUM    26
-#define DEVCAPS_V6_RX_BP_UDPCHECKSUM    27
-
-
-#define DESCR_VER_1         1       // MCP1, MCP2 and CK8 descriptor version
-#define DESCR_VER_2         2       // The decsriptor structure for CK8G
-
-// Get device and vendor IDs from 32 bit DeviceVendorID 
-#define GET_DEVICEID(x)   (((x) >> 16) & 0xFFFF)
-#define GET_VENDORID(x)   ((x) & 0xFFFF)
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
-
-#endif // _ADAPTER_H_
Index: sys/contrib/dev/nve/amd64/nvenetlib.README
===================================================================
--- sys/contrib/dev/nve/amd64/nvenetlib.README	(revision 261434)
+++ sys/contrib/dev/nve/amd64/nvenetlib.README	(working copy)
@@ -1,52 +0,0 @@
-$FreeBSD$
-
-The installation and use of this software is subject to the following license terms and conditions:
-
-License For Customer Use of NVIDIA Software 
-
-IMPORTANT NOTICE -- READ CAREFULLY: This License For Customer Use of NVIDIA Software ("LICENSE") is the agreement which governs use of the software of NVIDIA Corporation and its subsidiaries ("NVIDIA") enclosed herewith, including computer software and associated printed materials ("SOFTWARE"). By downloading, installing, copying, or otherwise using the SOFTWARE, you agree to be bound by the terms of this LICENSE. If you do not agree to the terms of this LICENSE, do not download, install or use the SOFTWARE.
-
-RECITALS
-Use of NVIDIA's products requires three elements: the SOFTWARE, the hardware on a computer motherboard, and a personal computer. The SOFTWARE is protected by copyright laws and international copyright treaties, as well as other intellectual property laws and treaties. The SOFTWARE is not sold, and instead is only licensed for use, strictly in accordance with this document. The hardware is protected by various patents, and is sold, but this agreement does not cover that sale, since it may not necessarily be sold as a package with the SOFTWARE. This agreement sets forth the terms and conditions of the SOFTWARE LICENSE only.
-
-1. DEFINITIONS
-
-1.1 Customer. Customer means the entity or individual that installs or uses the SOFTWARE.
-
-2. GRANT OF LICENSE
-
-2.1 Rights and Limitations of Grant. NVIDIA hereby grants Customer the following non-exclusive, non-transferable right to use the SOFTWARE, with the following limitations:
-
-2.1.1 Rights. Customer may install and use one copy of the SOFTWARE on a single computer, and except for making one back-up copy of the Software, may not otherwise copy the SOFTWARE. This LICENSE of SOFTWARE may not be shared or used concurrently on different computers.
-
-2.1.2 Linux/FreeBSD Exception. Notwithstanding the foregoing terms of Section 2.1.1, SOFTWARE designed exclusively for use on the Linux operating system may be copied and redistributed, provided that the binary files thereof are not modified in any way (except for uncompressing/compressing files).  SOFTWARE designed exclusively for use on the Linux Operating system but which has been authorized by NVIDIA for use on the FreeBSD Operating System may also be copied and redistributed, provided that the binary files thereof are not modified in any way (except for unzipping of compressed files).  
-
-2.1.3 Limitations.
-
-No Reverse Engineering. Customer may not reverse engineer, decompile, or disassemble the SOFTWARE, nor attempt in any other manner to obtain the source code. 
-
-No Separation of Components. The SOFTWARE is licensed as a single product. Its component parts may not be separated for use on more than one computer, nor otherwise used separately from the other parts. 
-
-No Rental. Customer may not rent or lease the SOFTWARE to someone else.
-
-3. TERMINATION
-
-This LICENSE will automatically terminate if Customer fails to comply with any of the terms and conditions hereof. In such event, Customer must destroy all copies of the SOFTWARE and all of its component parts.
-
-4. COPYRIGHT
-
-All title and copyrights in and to the SOFTWARE (including but not limited to all images, photographs, animations, video, audio, music, text, and other information incorporated into the SOFTWARE), the accompanying printed materials, and any copies of the SOFTWARE, are owned by NVIDIA, or its suppliers. The SOFTWARE is protected by copyright laws and international treaty provisions. Accordingly, Customer is required to treat the SOFTWARE like any other copyrighted material, except as otherwise allowed pursuant to this LICENSE and that it may make one copy of the SOFTWARE solely for backup or archive purposes.
-
-5. APPLICABLE LAW
-
-This agreement shall be deemed to have been made in, and shall be construed pursuant to, the laws of the State of California.
-
-6. DISCLAIMER OF WARRANTIES AND LIMITATION ON LIABILITY
-
-6.1 No Warranties. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE SOFTWARE IS PROVIDED "AS IS" AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-
-6.2 No Liability for Consequential Damages. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE THE SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-7. MISCELLANEOUS 
-
-The United Nations Convention on Contracts for the International Sale of Goods is specifically disclaimed. If any provision of this LICENSE is inconsistent with, or cannot be fully enforced under, the law, such provision will be construed as limited to the extent necessary to be consistent with and fully enforceable under the law. This agreement is the final, complete and exclusive agreement between the parties relating to the subject matter hereof, and supersedes all prior or contemporaneous understandings and agreements relating to such subject matter, whether oral or written. Customer agrees that it will not ship, transfer or export the SOFTWARE into any country, or use the SOFTWARE in any manner, prohibited by the United States Bureau of Export Administration or any export laws, restrictions or regulations. This LICENSE may only be modified in writing signed by an authorized officer of NVIDIA.
Index: sys/contrib/dev/nve/amd64/nvenetlib.o.bz2.uu
===================================================================
--- sys/contrib/dev/nve/amd64/nvenetlib.o.bz2.uu	(revision 261434)
+++ sys/contrib/dev/nve/amd64/nvenetlib.o.bz2.uu	(working copy)
@@ -1,321 +0,0 @@
-$FreeBSD$
-begin-base64 644 nvenetlib.o.bz2
-QlpoOTFBWSZTWQrVCikAPRD////////////////////////////+////////////////4ETdfd7c
-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
-6e5tIR140NovoAX/8XckU4UJAK1QopA=
-====
Index: sys/contrib/dev/nve/basetype.h
===================================================================
--- sys/contrib/dev/nve/basetype.h	(revision 261434)
+++ sys/contrib/dev/nve/basetype.h	(working copy)
@@ -1,281 +0,0 @@
-/***************************************************************************\
-|*                                                                           *|
-|*       Copyright 2001-2004 NVIDIA Corporation.  All Rights Reserved.       *|
-|*                                                                           *|
-|*     THE INFORMATION CONTAINED HEREIN  IS PROPRIETARY AND CONFIDENTIAL     *|
-|*     TO NVIDIA, CORPORATION.   USE,  REPRODUCTION OR DISCLOSURE TO ANY     *|
-|*     THIRD PARTY IS SUBJECT TO WRITTEN PRE-APPROVAL BY NVIDIA, CORP.       *|
-|*                                                                           *|
-|*     THE INFORMATION CONTAINED HEREIN IS PROVIDED  "AS IS" WITHOUT         *|
-|*     EXPRESS OR IMPLIED WARRANTY OF ANY KIND, INCLUDING ALL IMPLIED        *|
-|*     WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A     *|
-|*     PARTICULAR PURPOSE.                                                   *|
-|*                                                                           *|
-\***************************************************************************/ 
-
-
-/*++
-
-File:
-
-	basetype.h
-
-
-Abstract:
-
-	This file contains the base type definitions used by the networking driver.
-
-
-Revision History:
-
-	SNo.	Date		Author				Description
-	1.	2/7/2000	AJha				Created	
-
-*/
-
-#ifndef _BASETYPE_H_
-#define _BASETYPE_H_
-
-#ifndef IN
-#define IN
-#endif
-
-#ifndef OUT
-#define OUT
-#endif
-
-//
-// Useful "types"
-
-#ifndef NULL
-#define NULL            0
-#endif
-
-#ifndef TRUE
-#define TRUE            1
-#endif
-
-#ifndef FALSE
-#define FALSE           0
-#endif
-
-#if 1
-//
-// Don't use as these are going to be deleted soon. Use NV_ instead
-//
-#define VOID                void
-typedef VOID                *PVOID;
-
-typedef unsigned char   UCHAR;
-typedef UCHAR * PUCHAR;
-typedef unsigned short  USHORT;
-typedef USHORT * PUSHORT;
-#ifdef linux
-typedef unsigned int ULONG;
-#else
-typedef unsigned long ULONG;
-#endif
-typedef ULONG * PULONG;
-
-typedef char CHAR;
-typedef short SHORT;
-typedef long LONG;
-
-typedef unsigned int UINT;
-typedef unsigned int *PUINT;
-
-
-#endif
-
-
-#define NV_VOID            	void
-typedef NV_VOID            	*PNV_VOID;
-
-typedef unsigned long		NV_BOOLEAN, *PNV_BOOLEAN;
-
-typedef unsigned char		NV_UINT8, *PNV_UINT8;
-typedef unsigned short		NV_UINT16, *PNV_UINT16;
-#ifdef linux
-typedef unsigned int		NV_UINT32, *PNV_UINT32;
-#else
-typedef unsigned long		NV_UINT32, *PNV_UINT32;
-#endif
-
-typedef signed char   		NV_SINT8,  *PNV_SINT8;
-typedef signed short  		NV_SINT16, *PNV_SINT16;
-typedef signed long   		NV_SINT32, *PNV_SINT32;
-
-
-#if defined(linux)
-
-    typedef unsigned long long           NV_UINT64, *PNV_UINT64;
-    typedef signed long long             NV_SINT64, *PNV_SINT64;
-
-#else
-    #if _MSC_VER >= 1200         // MSVC 6.0 onwards
-        typedef unsigned __int64 	NV_UINT64, *PNV_UINT64;
-        typedef signed __int64 		NV_SINT64, *PNV_SINT64;
-    #else
-        typedef unsigned long     	NV_UINT64, *PNV_UINT64;
-        typedef signed   long 		NV_SINT64, *PNV_SINT64;
-    #endif
-
-#endif
-
-#ifndef _AMD64_
-typedef unsigned int    NV_UINT;
-typedef signed int      NV_INT;
-#else
-
-#if defined(linux)
-
-typedef unsigned long long  NV_UINT;
-typedef signed long long    NV_INT;
-
-#else
-
-typedef unsigned __int64    NV_UINT;
-typedef signed __int64      NV_INT;
-
-#endif
-#endif
-
-
-//
-// Floating point definitions
-//
-typedef float                 NV_REAL32;   // 4-byte floating point
-typedef double                NV_REAL64;   // 8-byte floating point
-
-
-
-//
-// Bit defintions
-//
-#define NV_BIT(bitpos)                  (1 << (bitpos))
-
-// NV_BIT_SET 
-// Sets the specified bit position (0..31). 
-// Parameter bits can be 1 byte to 4 bytes, but the caller needs to make sure bitpos fits into it.
-// x = 0xA0
-// NV_BIT_SET(x, 1)
-// Result: x = 0xA2
-#define NV_BIT_SET(bits, bitpos)        ((bits) |= (NV_BIT(bitpos)))
-
-// NV_BIT_CLEAR
-// Clears the specified bit position (0..31)
-// Parameter bits can be 1 byte to 4 bytes, but the caller needs to make sure bitpos fits into it.
-// x = 0xAA
-// NV_BIT_CLEAR(x, 1)
-// Result: x = 0xA8
-#define NV_BIT_CLEAR(bits, bitpos)      ((bits) &= (~NV_BIT(bitpos)))
-
-// NV_BIT_GET 
-// Gets the bit at the specified bit position (0..31)
-// Parameter bits can be 1 byte to 4 bytes, but the caller needs to make sure bitpos fits into it.
-// Result is either 1 or 0.
-// x = 0xAA
-// NV_BIT_GET(x, 1)
-// Result: x = 1
-#define NV_BIT_GET(bits, bitpos)        (((bits) >> (bitpos)) & 0x0001)
-
-
-// NV_BIT_GETVALUE
-// Gets the value from a 32 bit ULONG at specified bit position.
-// Parameter bits needs to be 4 bytes long.
-// Ex. ul32 = 0xFEDCBA98
-// ulVal = NV_BIT_GETVALUE(ul32, 3, 0)  : Gets value from Bit position 3 to 0
-// Result : ulVal = 8
-#define NV_BIT_GETVALUE(ulOrigValue, bitposHi, bitposLow)  (((ulOrigValue) >> (bitposLow)) & (~(0xFFFFFFFF << ((bitposHi) - (bitposLow) +1))))
-
-// NV_BIT_SETVALUE
-// Set a value in a 32 bit ULONG at a specific bit position.
-// Parameter bits needs to be 4 bytes long.
-// Ex. ul32 = 0xFEDCBA98
-// NV_BIT_SETVALUE(ul32, 0xF, 3, 0)  : Sets value at Bit position 3 to 0
-// Result : ul32 becomes 0xFEDCBA9F
-#define NV_BIT_SETVALUE(ulOrigValue, ulWindowValue, bitposHi, bitposLow)  \
-    ((ulOrigValue) = ((((ulOrigValue) & (~ ((0xFFFFFFFF >> (31 - (bitposHi))) & (0xFFFFFFFF << (bitposLow))))) | ((ulWindowValue) << (bitposLow)))))
-
-
-#define NV_BYTE(ulus, bytepos)  ((ulus >> (8 * (bytepos))) & 0xFF)
-
-
-#define SWAP_U16(us) ((((us) & 0x00FF) << 8) | \
-                      (((us) & 0xFF00) >> 8))
-
-#define SWAP_U32(ul) ((((ul) & 0x000000FF) << 24) |   \
-                        (((ul) & 0x0000FF00) <<  8) |	  \
-                        (((ul) & 0x00FF0000) >>  8) |	  \
-                        (((ul) & 0xFF000000) >> 24))
-
-#define NV_FIELD_OFFSET(TYPE, FIELD)  ((NV_UINT32)((NV_UINT64)&((TYPE *)0)->FIELD))
-
-#define ADDRESS_OFFSET(structure, member)       ((NV_UINT32) ((NV_UINT8 *) &(structure).member  \
-                                                            - (NV_UINT8 *) &(structure)))
-
-
-#define NV_MIN(a, b) ((a < b) ? a : b)
-#define NV_MAX(a, b) ((a > b) ? a : b)
-
-#ifdef AMD64
-#define PNV_VOID_TO_NV_UINT64(x)    ((NV_UINT64)(x))
-#define PNV_VOID_TO_NV_UINT32(x)    ((NV_UINT32)(NV_UINT64)(x))
-#define NV_UINT64_TO_PNV_VOID(x)    ((PNV_VOID)(x))
-#define NV_UINT32_TO_PNV_VOID(x)    ((PNV_VOID)(NV_UINT64)(x))
-#else
-#define PNV_VOID_TO_NV_UINT64(x)    ((NV_UINT64)(NV_UINT32)(x))
-#define PNV_VOID_TO_NV_UINT32(x)    ((NV_UINT32)(x))
-#define NV_UINT64_TO_PNV_VOID(x)    ((PNV_VOID)(NV_UINT32)(x))
-#define NV_UINT32_TO_PNV_VOID(x)    ((PNV_VOID)(x))
-#endif
-
-#define NV_MAKE_TAG32(s)            (((NV_UINT32)((s)[3]) << 24) | ((NV_UINT32)((s)[2]) << 16) | \
-                                     ((NV_UINT32)((s)[1]) <<  8) | ((NV_UINT32)((s)[0])))
-
-#define NV_MAKE_TAG64(s)            (((NV_UINT64)((s)[7]) << 56) | ((NV_UINT64)((s)[6]) << 48) | \
-                                     ((NV_UINT64)((s)[5]) << 40) | ((NV_UINT64)((s)[4]) << 32) | \
-                                     ((NV_UINT64)((s)[3]) << 24) | ((NV_UINT64)((s)[2]) << 16) | \
-                                     ((NV_UINT64)((s)[1]) <<  8) | ((NV_UINT64)((s)[0])))
-
-typedef union _NVLARGE_INTEGER {
-
-#if 0
-    // NO UNNAMED UNIONS ALLOWED !@
-    struct {
-        NV_UINT32   LowPart;
-        NV_SINT32   HighPart;
-    };
-#endif
-
-    struct {
-        NV_UINT32   LowPart;
-        NV_SINT32   HighPart;
-    } u;
-
-    NV_SINT64       QuadPart;
-
-} NVLARGE_INTEGER, *PNVLARGE_INTEGER;
-
-
-#ifndef LINUX
-typedef unsigned short NV_WCHAR;
-#else
-typedef unsigned long NV_WCHAR;
-#endif
-
-typedef NV_WCHAR *PNV_WSTR;
-
-#if defined(linux)
-#if !defined(NV_API_CALL)
-#if defined (__i386__)
-#define NV_API_CALL __attribute__ ((regparm(0)))
-#else
-#define NV_API_CALL
-#endif
-#endif
-#else
-#define NV_API_CALL
-#endif
-
-#endif // _BASETYPE_H_
Index: sys/contrib/dev/nve/drvinfo.h
===================================================================
--- sys/contrib/dev/nve/drvinfo.h	(revision 261434)
+++ sys/contrib/dev/nve/drvinfo.h	(working copy)
@@ -1,190 +0,0 @@
-/***************************************************************************\
-|*                                                                           *|
-|*         Copyright 2001-2003 NVIDIA, Corporation.  All rights reserved.    *|
-|*                                                                           *|
-|*     THE INFORMATION CONTAINED HEREIN  IS PROPRIETARY AND CONFIDENTIAL     *|
-|*     TO NVIDIA, CORPORATION.   USE,  REPRODUCTION OR DISCLOSURE TO ANY     *|
-|*     THIRD PARTY IS SUBJECT TO WRITTEN PRE-APPROVAL BY NVIDIA, CORP.       *|
-|*                                                                           *|
-|*     THE INFORMATION CONTAINED HEREIN IS PROVIDED  "AS IS" WITHOUT         *|
-|*     EXPRESS OR IMPLIED WARRANTY OF ANY KIND, INCLUDING ALL IMPLIED        *|
-|*     WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A     *|
-|*     PARTICULAR PURPOSE.                                                   *|
-|*                                                                           *|
-\***************************************************************************/
-
-/*   
- *   This file contains the header info common to the network drivers and applications.
- *   Currently, these applications include ASF, co-installers, and qstats.
- *
- *
- */
-
-#ifndef _DRVINFO_H_
-#define _DRVINFO_H_
-
-// Switch to byte packing, regardless of global packing specified by the compiler switch
-#pragma pack(1)  
-
-//////////////////////////////////////////////////////////////////
-// For the ADAPTER_GetStatistics call used by qstats.  This 
-// is the template used by the legacy driver.
-#define MAX_TRANSMIT_COLISION_STATS     16
-
-#define ADAPTER_STATS_LEGACY_VERSION    1
-#define ADAPTER_STATS_RM_VERSION        2
-
-typedef struct  _ADAPTER_STATS_V1
-{
-    NV_UINT32   ulVersion;
-
-    NV_UINT32   ulSuccessfulTransmissions;
-    NV_UINT32   ulFailedTransmissions;
-    NV_UINT32   ulRetryErrors;
-    NV_UINT32   ulUnderflowErrors;
-    NV_UINT32   ulLossOfCarrierErrors;
-    NV_UINT32   ulLateCollisionErrors;
-    NV_UINT32   ulDeferredTransmissions;
-    NV_UINT32    ulExcessDeferredTransmissions;
-    NV_UINT32   aulSuccessfulTransmitsAfterCollisions[MAX_TRANSMIT_COLISION_STATS];
-
-    NV_UINT32   ulMissedFrames;
-    NV_UINT32   ulSuccessfulReceptions;
-    NV_UINT32   ulFailedReceptions;
-    NV_UINT32   ulCRCErrors;
-    NV_UINT32   ulFramingErrors;
-    NV_UINT32   ulOverFlowErrors;
-    NV_UINT32    ulFrameErrorsPrivate; //Not for public.
-    NV_UINT32    ulNullBufferReceivePrivate; //Not for public, These are the packets which we didn't indicate to OS
-
-    //interrupt related statistics
-    NV_UINT32   ulRxInterrupt;
-    NV_UINT32   ulRxInterruptUnsuccessful;
-    NV_UINT32   ulTxInterrupt;
-    NV_UINT32   ulTxInterruptUnsuccessful;
-    NV_UINT32   ulPhyInterrupt;
-
-}   ADAPTER_STATS_V1, *PADAPTER_STATS_V1;
-//////////////////////////////////////////////////////////////////
-
-//////////////////////////////////////////////////////////////////
-// For the ADAPTER_GetStatistics call used by qstats.  This 
-// is the template used by the FD.
-typedef struct  _ADAPTER_STATS
-{
-    NV_UINT32   ulVersion;
-    NV_UINT8    ulMacAddress[6];
-
-    //
-    // Tx counters.
-    //
-    NV_UINT64   ulSuccessfulTransmissions;
-    NV_UINT64   ulFailedTransmissions;
-    NV_UINT64   ulRetryErrors;
-    NV_UINT64   ulUnderflowErrors;
-    NV_UINT64   ulLossOfCarrierErrors;
-    NV_UINT64   ulLateCollisionErrors;
-    NV_UINT64   ulDeferredTransmissions;
-    NV_UINT64    ulExcessDeferredTransmissions;
-    NV_UINT64   aulSuccessfulTransmitsAfterCollisions[MAX_TRANSMIT_COLISION_STATS];
-
-    //
-    // New Tx counters for GigE.
-    //
-    NV_UINT64   ulTxByteCount;
-
-    //
-    // Rx counters.
-    //
-    NV_UINT64   ulMissedFrames;
-    NV_UINT64   ulSuccessfulReceptions;
-    NV_UINT64   ulFailedReceptions;
-    NV_UINT64   ulCRCErrors;
-    NV_UINT64   ulLengthErrors;
-    NV_UINT64   ulFramingErrors;
-    NV_UINT64   ulOverFlowErrors;
-    NV_UINT64   ulRxNoBuffer;
-    NV_UINT64   ulFrameErrorsPrivate; //Not for public.
-    NV_UINT64   ulNullBufferReceivePrivate; //Not for public, These are the packets which we didn't indicate to OS
-
-    //
-    // New Rx counters for GigE.
-    //
-    NV_UINT64   ulRxExtraByteCount;
-    NV_UINT64   ulRxFrameTooLongCount;
-    NV_UINT64   ulRxFrameAlignmentErrorCount;
-    NV_UINT64   ulRxLateCollisionErrors;
-    NV_UINT64   ulRxRuntPacketErrors;
-
-    NV_UINT64   ulRxUnicastFrameCount;
-    NV_UINT64   ulRxMulticastFrameCount;
-    NV_UINT64   ulRxBroadcastFrameCount;
-    NV_UINT64   ulRxPromiscuousModeFrameCount;
-
-    //Interrupt related statistics
-    NV_UINT64   ulRxInterrupt;
-    NV_UINT64   ulRxInterruptUnsuccessful;
-    NV_UINT64   ulTxInterrupt;
-    NV_UINT64   ulTxInterruptUnsuccessful;
-    NV_UINT64   ulPhyInterrupt;
-
-
-    //
-    // Handy things to know
-    //
-    NV_UINT64   ulDescriptorVersion;
-    NV_UINT64   ulPollingCfg;       // configured for cpu or throughput
-    NV_UINT64   ulPollingState;     // current optimizefor state.
-
-    NV_UINT64   ulNumTxDesc;
-    NV_UINT64   ulNumRxDesc;
-
-    // 
-    // Useful to determine if TX is stuck.
-    //
-    NV_UINT64   ulNumTxPktsQueued;
-    NV_UINT64   ulNumTxPktsInProgress;
-
-    //
-    // Rx Xsum Cntrs
-    //
-    NV_UINT64   ulNoRxPktsNoXsum;
-    NV_UINT64   ulNoRxPktsXsumIpPassTcpFail;
-    NV_UINT64   ulNoRxPktsXsumIpPassUdpFail;
-    NV_UINT64   ulNoRxPktsXsumIpFail;
-    NV_UINT64   ulNoRxPktsXsumIpPassNoTcpUdp;
-    NV_UINT64   ulNoRxPktsXsumIpPassTcpPass;
-    NV_UINT64   ulNoRxPktsXsumIpPassUdpPass;
-    NV_UINT64   ulNoRxPktsXsumReserved;
-
-#ifdef _PERF_LOOP_CNTRS
-    NV_UINT64  ulNumTxCmplsToProcess;
-    NV_UINT64  ulNumRxCmplsToProcess;
-    NV_UINT64  ulNumIntsToProcess;
-
-    NV_UINT64  IntLoop0Cnt;
-    NV_UINT64  IntLoop1Cnt;
-    NV_UINT64  IntLoop2Cnt;
-    NV_UINT64  IntLoop3Cnt;
-    NV_UINT64  IntLoop4Cnt;
-    NV_UINT64  IntLoop5Cnt;
-    NV_UINT64  IntLoop6To10Cnt;
-    NV_UINT64  IntLoop11Cnt;
-    NV_UINT64  IntMaxLoopCnt;
-
-    NV_UINT64   IntRxCnt0;
-    NV_UINT64   IntTxCnt0;
-
-    NV_UINT64   MaxRxLoopCnt;
-    NV_UINT64   MaxTxLoopCnt;
-
-#endif
-}   ADAPTER_STATS, *PADAPTER_STATS;
-//////////////////////////////////////////////////////////////////
-
-#pragma pack()  
-
-
-#endif   // #define _DRVINFO_H_
-
-
Index: sys/contrib/dev/nve/i386/nvenetlib.README
===================================================================
--- sys/contrib/dev/nve/i386/nvenetlib.README	(revision 261434)
+++ sys/contrib/dev/nve/i386/nvenetlib.README	(working copy)
@@ -1,52 +0,0 @@
-$FreeBSD$
-
-The installation and use of this software is subject to the following license terms and conditions:
-
-License For Customer Use of NVIDIA Software 
-
-IMPORTANT NOTICE -- READ CAREFULLY: This License For Customer Use of NVIDIA Software ("LICENSE") is the agreement which governs use of the software of NVIDIA Corporation and its subsidiaries ("NVIDIA") enclosed herewith, including computer software and associated printed materials ("SOFTWARE"). By downloading, installing, copying, or otherwise using the SOFTWARE, you agree to be bound by the terms of this LICENSE. If you do not agree to the terms of this LICENSE, do not download, install or use the SOFTWARE.
-
-RECITALS
-Use of NVIDIA's products requires three elements: the SOFTWARE, the hardware on a computer motherboard, and a personal computer. The SOFTWARE is protected by copyright laws and international copyright treaties, as well as other intellectual property laws and treaties. The SOFTWARE is not sold, and instead is only licensed for use, strictly in accordance with this document. The hardware is protected by various patents, and is sold, but this agreement does not cover that sale, since it may not necessarily be sold as a package with the SOFTWARE. This agreement sets forth the terms and conditions of the SOFTWARE LICENSE only.
-
-1. DEFINITIONS
-
-1.1 Customer. Customer means the entity or individual that installs or uses the SOFTWARE.
-
-2. GRANT OF LICENSE
-
-2.1 Rights and Limitations of Grant. NVIDIA hereby grants Customer the following non-exclusive, non-transferable right to use the SOFTWARE, with the following limitations:
-
-2.1.1 Rights. Customer may install and use one copy of the SOFTWARE on a single computer, and except for making one back-up copy of the Software, may not otherwise copy the SOFTWARE. This LICENSE of SOFTWARE may not be shared or used concurrently on different computers.
-
-2.1.2 Linux/FreeBSD Exception. Notwithstanding the foregoing terms of Section 2.1.1, SOFTWARE designed exclusively for use on the Linux operating system may be copied and redistributed, provided that the binary files thereof are not modified in any way (except for uncompressing/compressing files).  SOFTWARE designed exclusively for use on the Linux Operating system but which has been authorized by NVIDIA for use on the FreeBSD Operating System may also be copied and redistributed, provided that the binary files thereof are not modified in any way (except for unzipping of compressed files).  
-
-2.1.3 Limitations.
-
-No Reverse Engineering. Customer may not reverse engineer, decompile, or disassemble the SOFTWARE, nor attempt in any other manner to obtain the source code. 
-
-No Separation of Components. The SOFTWARE is licensed as a single product. Its component parts may not be separated for use on more than one computer, nor otherwise used separately from the other parts. 
-
-No Rental. Customer may not rent or lease the SOFTWARE to someone else.
-
-3. TERMINATION
-
-This LICENSE will automatically terminate if Customer fails to comply with any of the terms and conditions hereof. In such event, Customer must destroy all copies of the SOFTWARE and all of its component parts.
-
-4. COPYRIGHT
-
-All title and copyrights in and to the SOFTWARE (including but not limited to all images, photographs, animations, video, audio, music, text, and other information incorporated into the SOFTWARE), the accompanying printed materials, and any copies of the SOFTWARE, are owned by NVIDIA, or its suppliers. The SOFTWARE is protected by copyright laws and international treaty provisions. Accordingly, Customer is required to treat the SOFTWARE like any other copyrighted material, except as otherwise allowed pursuant to this LICENSE and that it may make one copy of the SOFTWARE solely for backup or archive purposes.
-
-5. APPLICABLE LAW
-
-This agreement shall be deemed to have been made in, and shall be construed pursuant to, the laws of the State of California.
-
-6. DISCLAIMER OF WARRANTIES AND LIMITATION ON LIABILITY
-
-6.1 No Warranties. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THE SOFTWARE IS PROVIDED "AS IS" AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-
-6.2 No Liability for Consequential Damages. TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS BE LIABLE FOR ANY SPECIAL, INCIDENTAL, INDIRECT, OR CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE THE SOFTWARE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-7. MISCELLANEOUS 
-
-The United Nations Convention on Contracts for the International Sale of Goods is specifically disclaimed. If any provision of this LICENSE is inconsistent with, or cannot be fully enforced under, the law, such provision will be construed as limited to the extent necessary to be consistent with and fully enforceable under the law. This agreement is the final, complete and exclusive agreement between the parties relating to the subject matter hereof, and supersedes all prior or contemporaneous understandings and agreements relating to such subject matter, whether oral or written. Customer agrees that it will not ship, transfer or export the SOFTWARE into any country, or use the SOFTWARE in any manner, prohibited by the United States Bureau of Export Administration or any export laws, restrictions or regulations. This LICENSE may only be modified in writing signed by an authorized officer of NVIDIA.
Index: sys/contrib/dev/nve/i386/nvenetlib.o.bz2.uu
===================================================================
--- sys/contrib/dev/nve/i386/nvenetlib.o.bz2.uu	(revision 261434)
+++ sys/contrib/dev/nve/i386/nvenetlib.o.bz2.uu	(working copy)
@@ -1,320 +0,0 @@
-$FreeBSD$
-begin-base64 644 nvenetlib.o.bz2
-QlpoOTFBWSZTWSDHheUAMsL/////////////////////////////////////////////4EQzTUNc
-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
-WmiaD/8XckU4UJAgx4Xl
-====
Index: sys/contrib/dev/nve/nvenet_version.h
===================================================================
--- sys/contrib/dev/nve/nvenet_version.h	(revision 261434)
+++ sys/contrib/dev/nve/nvenet_version.h	(working copy)
@@ -1,29 +0,0 @@
-/****************************************************************** \
-|*                                                                 *|
-|*                                                                 *|
-|*  (c) NVIDIA Corporation. All rights reserved                    *| 
-|*                                                                 *|
-|*  THE INFORMATION CONTAINED HEREIN IS PROPRIETARY AND            *|
-|*  CONFIDENTIAL                                                   *|
-|*  TO NVIDIA, CORPORATION. USE, REPORDUCTION OR DISCLOSURE TO ANY *|
-|*  THIRD PARTY IS SUBJECT TO WRITTEN PRE-APPROVAL BY NVIDIA CORP. *|
-|*                                                                 *|
-|*  THE INFORMATION CONTAINED HEREIN IS PROVIDED "AS IS" WITHOUT   *|
-|*  EXPRESS OR IMPLIED WARRANTY OF ANY KIND, INCLUDING ALL IMPLIED *|
-|*  WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS    *|
-|*  FOR A PARTICULAR PURPOSE.                                      *|
-|*                                                                 *|
-********************************************************************/
-
-#ifndef __NVENET_VERSION_H__
-#define	__NVENET_VERSION_H__ 
-
-#define DRIVER_VERSION_MAJOR        "1"
-#define DRIVER_VERSION_MINOR        "0"
-#define DRIVER_VERSION_PATCH        "13"
-#define DRIVER_VERSION              DRIVER_VERSION_MAJOR"."\
-                                    DRIVER_VERSION_MINOR"-"\
-                                    DRIVER_VERSION_PATCH
-
-#endif
-
Index: sys/contrib/dev/nve/os.h
===================================================================
--- sys/contrib/dev/nve/os.h	(revision 261434)
+++ sys/contrib/dev/nve/os.h	(working copy)
@@ -1,128 +0,0 @@
-/***************************************************************************\
-|*                                                                           *|
-|*       Copyright 2001-2004 NVIDIA Corporation.  All Rights Reserved.       *|
-|*                                                                           *|
-|*     THE INFORMATION CONTAINED HEREIN  IS PROPRIETARY AND CONFIDENTIAL     *|
-|*     TO NVIDIA, CORPORATION.   USE,  REPRODUCTION OR DISCLOSURE TO ANY     *|
-|*     THIRD PARTY IS SUBJECT TO WRITTEN PRE-APPROVAL BY NVIDIA, CORP.       *|
-|*                                                                           *|
-|*     THE INFORMATION CONTAINED HEREIN IS PROVIDED  "AS IS" WITHOUT         *|
-|*     EXPRESS OR IMPLIED WARRANTY OF ANY KIND, INCLUDING ALL IMPLIED        *|
-|*     WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A     *|
-|*     PARTICULAR PURPOSE.                                                   *|
-|*                                                                           *|
-\***************************************************************************/ 
-
-/*
-    FILE:   os.h
-    DATE:   2/7/00
-
-    This file contains the os interface. Note that the os interface is
-    itself an OS-independent API. The OS specific module is implemented
-    by ndis.c for Win9X/NT and linuxnet.c for linux.
-*/
-#ifndef _OS_H_
-#define _OS_H_
-
-#include "phy.h"
-
-#define HDO_VERSION_STRING "HDR O: $Revision: #21 $";
-
-// This is the maximum packet size that we will be sending
-// #define MAX_PACKET_SIZE     2048
-//#define RX_BUFFER_SIZE      2048
-
-#define MIN_PACKET_MTU_SIZE     576
-#define MAX_PACKET_MTU_SIZE     9202
-#define MAX_PACKET_SIZE_2048      2048
-#define MAX_PACKET_SIZE_1514    1514
-#define MAX_PACKET_SIZE_1518    1518
-#define MAX_PACKET_SIZE_JUMBO   (9 * 1024)
-
-typedef struct  _MEMORY_BLOCK
-{
-    PNV_VOID   pLogical;
-    PNV_VOID   pPhysical;
-    NV_UINT32    uiLength;
-}   MEMORY_BLOCK, *PMEMORY_BLOCK;
-
-#define        ALLOC_MEMORY_NONCACHED    0x0001
-#define        ALLOC_MEMORY_ALIGNED    0x0002
-
-typedef struct  _MEMORY_BLOCKEX
-{
-    PNV_VOID   pLogical;
-    PNV_VOID   pPhysical;
-    NV_UINT32    uiLength;
-    /* Parameter to OS layer to indicate what type of memory is needed */
-    NV_UINT16    AllocFlags;
-    NV_UINT16    AlignmentSize; //always power of 2
-    /* Following three fields used for aligned memory allocation */
-    PNV_VOID   pLogicalOrig;
-    NV_UINT32    pPhysicalOrigLow;
-    NV_UINT32    pPhysicalOrigHigh;
-    NV_UINT32    uiLengthOrig;
-}   MEMORY_BLOCKEX, *PMEMORY_BLOCKEX;
-
-
-// The typedefs for the OS functions
-typedef NV_API_CALL NV_SINT32 (* PFN_MEMORY_ALLOC) (PNV_VOID pOSCX, PMEMORY_BLOCK pMem);
-typedef NV_API_CALL NV_SINT32 (* PFN_MEMORY_FREE)  (PNV_VOID pOSCX, PMEMORY_BLOCK pMem);
-typedef NV_API_CALL NV_SINT32 (* PFN_MEMORY_ALLOCEX) (PNV_VOID pOSCX, PMEMORY_BLOCKEX pMem);
-typedef NV_API_CALL NV_SINT32 (* PFN_MEMORY_FREEEX)  (PNV_VOID pOSCX, PMEMORY_BLOCKEX pMem);
-typedef NV_API_CALL NV_SINT32 (* PFN_CLEAR_MEMORY)  (PNV_VOID pOSCX, PNV_VOID pMem, NV_SINT32 iLength);
-typedef NV_API_CALL NV_SINT32 (* PFN_STALL_EXECUTION) (PNV_VOID pOSCX, NV_UINT32 ulTimeInMicroseconds);
-typedef NV_API_CALL NV_SINT32 (* PFN_ALLOC_RECEIVE_BUFFER) (PNV_VOID pOSCX, PMEMORY_BLOCK pMem, PNV_VOID *ppvID);
-typedef NV_API_CALL NV_SINT32 (* PFN_FREE_RECEIVE_BUFFER) (PNV_VOID pOSCX, PMEMORY_BLOCK pMem, PNV_VOID pvID);
-typedef NV_API_CALL NV_SINT32 (* PFN_PACKET_WAS_SENT) (PNV_VOID pOSCX, PNV_VOID pvID, NV_UINT32 ulSuccess);
-typedef NV_API_CALL NV_SINT32 (* PFN_PACKET_WAS_RECEIVED) (PNV_VOID pOSCX, PNV_VOID pvADReadData, NV_UINT32 ulSuccess, NV_UINT8 *pNewBuffer, NV_UINT8 uc8021pPriority);
-typedef NV_API_CALL NV_SINT32 (* PFN_LINK_STATE_HAS_CHANGED) (PNV_VOID pOSCX, NV_SINT32 nEnabled);
-typedef NV_API_CALL NV_SINT32 (* PFN_ALLOC_TIMER) (PNV_VOID pvContext, PNV_VOID *ppvTimer);
-typedef NV_API_CALL NV_SINT32 (* PFN_FREE_TIMER) (PNV_VOID pvContext, PNV_VOID pvTimer);
-typedef NV_API_CALL NV_SINT32 (* PFN_INITIALIZE_TIMER) (PNV_VOID pvContext, PNV_VOID pvTimer, PTIMER_FUNC pvFunc, PNV_VOID pvFuncParameter);
-typedef NV_API_CALL NV_SINT32 (* PFN_SET_TIMER) (PNV_VOID pvContext, PNV_VOID pvTimer, NV_UINT32 dwMillisecondsDelay);
-typedef NV_API_CALL NV_SINT32 (* PFN_CANCEL_TIMER) (PNV_VOID pvContext, PNV_VOID pvTimer);
-
-typedef NV_API_CALL NV_SINT32 (* PFN_PREPROCESS_PACKET) (PNV_VOID pvContext, PNV_VOID pvADReadData, PNV_VOID *ppvID,
-                NV_UINT8 *pNewBuffer, NV_UINT8 uc8021pPriority);
-typedef NV_API_CALL PNV_VOID (* PFN_PREPROCESS_PACKET_NOPQ) (PNV_VOID pvContext, PNV_VOID pvADReadData);
-typedef NV_API_CALL NV_SINT32 (* PFN_INDICATE_PACKETS) (PNV_VOID pvContext, PNV_VOID *ppvID, NV_UINT32 ulNumPacket);
-typedef NV_API_CALL NV_SINT32 (* PFN_LOCK_ALLOC) (PNV_VOID pOSCX, NV_SINT32 iLockType, PNV_VOID *ppvLock);
-typedef NV_API_CALL NV_SINT32 (* PFN_LOCK_ACQUIRE) (PNV_VOID pOSCX, NV_SINT32 iLockType, PNV_VOID pvLock);
-typedef NV_API_CALL NV_SINT32 (* PFN_LOCK_RELEASE) (PNV_VOID pOSCX, NV_SINT32 iLockType, PNV_VOID pvLock);
-typedef NV_API_CALL PNV_VOID (* PFN_RETURN_BUFFER_VIRTUAL) (PNV_VOID pvContext, PNV_VOID pvADReadData);
-
-// Here are the OS functions that those objects below the OS interface
-// can call up to.
-typedef struct  _OS_API
-{
-    // OS Context -- this is a parameter to every OS API call
-    PNV_VOID                       pOSCX;
-
-    // Basic OS functions
-    PFN_MEMORY_ALLOC            pfnAllocMemory;
-    PFN_MEMORY_FREE             pfnFreeMemory;
-    PFN_MEMORY_ALLOCEX          pfnAllocMemoryEx;
-    PFN_MEMORY_FREEEX           pfnFreeMemoryEx;
-    PFN_CLEAR_MEMORY            pfnClearMemory;
-    PFN_STALL_EXECUTION         pfnStallExecution;
-    PFN_ALLOC_RECEIVE_BUFFER    pfnAllocReceiveBuffer;
-    PFN_FREE_RECEIVE_BUFFER     pfnFreeReceiveBuffer;
-    PFN_PACKET_WAS_SENT         pfnPacketWasSent;
-    PFN_PACKET_WAS_RECEIVED     pfnPacketWasReceived;
-    PFN_LINK_STATE_HAS_CHANGED  pfnLinkStateHasChanged;
-    PFN_ALLOC_TIMER                pfnAllocTimer;
-    PFN_FREE_TIMER                pfnFreeTimer;
-    PFN_INITIALIZE_TIMER        pfnInitializeTimer;
-    PFN_SET_TIMER                pfnSetTimer;
-    PFN_CANCEL_TIMER            pfnCancelTimer;
-    PFN_PREPROCESS_PACKET       pfnPreprocessPacket;
-    PFN_PREPROCESS_PACKET_NOPQ  pfnPreprocessPacketNopq;
-    PFN_INDICATE_PACKETS        pfnIndicatePackets;
-    PFN_LOCK_ALLOC                pfnLockAlloc;
-    PFN_LOCK_ACQUIRE            pfnLockAcquire;
-    PFN_LOCK_RELEASE            pfnLockRelease;
-    PFN_RETURN_BUFFER_VIRTUAL    pfnReturnBufferVirtual;
-}   OS_API, *POS_API;
-
-#endif // _OS_H_
Index: sys/contrib/dev/nve/phy.h
===================================================================
--- sys/contrib/dev/nve/phy.h	(revision 261434)
+++ sys/contrib/dev/nve/phy.h	(working copy)
@@ -1,164 +0,0 @@
-/***************************************************************************\
-|*                                                                           *|
-|*       Copyright 2001-2004 NVIDIA Corporation.  All Rights Reserved.       *|
-|*                                                                           *|
-|*     THE INFORMATION CONTAINED HEREIN  IS PROPRIETARY AND CONFIDENTIAL     *|
-|*     TO NVIDIA, CORPORATION.   USE,  REPRODUCTION OR DISCLOSURE TO ANY     *|
-|*     THIRD PARTY IS SUBJECT TO WRITTEN PRE-APPROVAL BY NVIDIA, CORP.       *|
-|*                                                                           *|
-|*     THE INFORMATION CONTAINED HEREIN IS PROVIDED  "AS IS" WITHOUT         *|
-|*     EXPRESS OR IMPLIED WARRANTY OF ANY KIND, INCLUDING ALL IMPLIED        *|
-|*     WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A     *|
-|*     PARTICULAR PURPOSE.                                                   *|
-|*                                                                           *|
-\***************************************************************************/ 
-
-/*
-    FILE:   phy.h
-    DATE:   2/7/00
-
-    This file contains the functional interface to the PHY.
-*/
-#ifndef _PHY_H_
-#define _PHY_H_
-
-//#include "basetype.h"
-//#include "nvevent.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define DEFAULT_PHY_ADDRESS   1
-
-
-#define HDP_VERSION_STRING "HDR P: $Revision: #23 $"
-
-//
-// Defaults for PHY timeout values.
-//
-#define PHY_POWER_ISOLATION_MS_TIMEOUT_DEFAULT      50
-#define PHY_RESET_MS_TIMEOUT_DEFAULT                50
-#define PHY_AUTONEG_MS_TIMEOUT_DEFAULT              3000
-#define PHY_LINK_UP_MS_TIMEOUT_DEFAULT              2400
-#define PHY_RDWR_US_TIMEOUT_DEFAULT                 2048
-#define PHY_POWER_DOWN_US_TIMEOUT_DEFAULT           500
-
-
-/////////////////////////////////////////////////////////////////////////
-// The phy module knows the values that need to go into the phy registers
-// but typically the method of writing those registers is controlled by
-// another module (usually the adapter because it is really the hardware
-// interface.) Hence, the phy needs routines to call to read and write the
-// phy registers. This structure with appropriate routines will be provided
-// in the PHY_Open call.
-
-typedef NV_API_CALL NV_SINT32 (* PFN_READ_PHY)  (PNV_VOID pvData, NV_UINT32 ulPhyAddr, NV_UINT32 ulPhyReg, NV_UINT32 *pulValue);
-typedef NV_API_CALL NV_SINT32 (* PFN_WRITE_PHY) (PNV_VOID pvData, NV_UINT32 ulPhyAddr, NV_UINT32 ulPhyReg, NV_UINT32 ulValue);
-
-typedef struct  PHY_SUPPORT_API
-{
-    PNV_VOID            pADCX;
-    PFN_READ_PHY        pfnRead;
-    PFN_WRITE_PHY       pfnWrite;
-	// PFN_EVENT_OCCURED   pfnEventOccurred;
-
-    //
-    // These fields are passed down via the FD.  FD get's them
-    // from the registry.  They allow one to fine tune the timeout
-    // values in the PHY.
-    //
-    NV_UINT32	PhyPowerIsolationTimeoutInms;
-	NV_UINT32	PhyResetTimeoutInms;
-	NV_UINT32	PhyAutonegotiateTimeoutInms;
-	NV_UINT32	PhyLinkupTimeoutInms;
-	NV_UINT32	PhyPowerdownOnCloseInus;
-
-}   PHY_SUPPORT_API, *PPHY_SUPPORT_API;
-/////////////////////////////////////////////////////////////////////////
-
-
-/////////////////////////////////////////////////////////////////////////
-// The functional typedefs for the PHY Api
-typedef NV_SINT32 (* PFN_PHY_INIT) (PNV_VOID pvContext, NV_UINT32 *pulLinkState, NV_UINT32 PhyMode);
-typedef NV_SINT32 (* PFN_PHY_DEINIT) (PNV_VOID pvContext);
-typedef NV_SINT32 (* PFN_PHY_CLOSE) (PNV_VOID pvContext);
-typedef NV_SINT32 (* PFN_GET_LINK_SPEED) (PNV_VOID pvContext);
-typedef NV_SINT32 (* PFN_GET_LINK_MODE) (PNV_VOID pvContext);
-typedef NV_SINT32 (* PFN_GET_LINK_STATE) (PNV_VOID pvContext, NV_UINT32 *pulLinkState);
-typedef NV_SINT32 (* PFN_IS_LINK_INITIALIZING) (PNV_VOID pvContext);
-typedef NV_SINT32 (* PFN_RESET_PHY_INIT_STATE) (PNV_VOID pvContext);
-typedef NV_SINT32 (* PFN_FORCE_SPEED_DUPLEX) (PNV_VOID pvContext, NV_UINT16 usSpeed, NV_UINT8 ucForceDpx, NV_UINT8 ucForceMode);
-typedef NV_SINT32 (* PFN_PHY_POWERDOWN) (PNV_VOID pvContext);
-typedef NV_SINT32 (* PFN_SET_LOW_SPEED_FOR_PM) (PNV_VOID pvContext);
-
-
-typedef struct  _PHY_API
-{
-    // This is the context to pass back in as the first arg on all
-    // the calls in the API below.
-    PNV_VOID               pPHYCX;
-
-    PFN_PHY_INIT                pfnInit;
-    PFN_PHY_INIT                pfnInitFast;
-    PFN_PHY_DEINIT                pfnDeinit;
-    PFN_PHY_CLOSE                pfnClose;
-    PFN_GET_LINK_SPEED            pfnGetLinkSpeed;
-    PFN_GET_LINK_MODE            pfnGetLinkMode;
-    PFN_GET_LINK_STATE            pfnGetLinkState;
-    PFN_IS_LINK_INITIALIZING    pfnIsLinkInitializing;
-    PFN_RESET_PHY_INIT_STATE    pfnResetPhyInitState;
-    PFN_FORCE_SPEED_DUPLEX        pfnForceSpeedDuplex;
-    PFN_PHY_POWERDOWN            pfnPowerdown;
-    PFN_SET_LOW_SPEED_FOR_PM    pfnSetLowSpeedForPM;
-}   PHY_API, *PPHY_API;
-/////////////////////////////////////////////////////////////////////////
-
-
-/////////////////////////////////////////////////////////////////////////
-// This is the one function in the PHY interface that is publicly
-// available. The rest of the interface is returned in the pPhyApi;
-// The first argument needs to be cast to a POS_API structure ptr.
-// On input the second argument is a ptr to a PPHY_SUPPORT_API.
-// On output, the second argument should be treated as a ptr to a
-// PPHY_API and set appropriately.
-extern NV_SINT32 PHY_Open (PNV_VOID pvOSApi, PNV_VOID pPhyApi, NV_UINT32 *pulPhyAddr, NV_UINT32 *pulPhyConnected);
-/////////////////////////////////////////////////////////////////////////
-
-
-/////////////////////////////////////////////////////////////////////////
-// Here are the error codes the phy functions can return.
-#define PHYERR_NONE                                 0x0000
-#define PHYERR_COULD_NOT_ALLOC_CONTEXT              0x0001
-#define PHYERR_RESET_NEVER_FINISHED                 0x0002
-#define PHYERR_NO_AVAILABLE_LINK_SPEED              0x0004
-#define PHYERR_INVALID_SETTINGS                     0x0005
-#define PHYERR_READ_FAILED                          0x0006
-#define PHYERR_WRITE_FAILED                         0x0007
-#define PHYERR_NO_PHY                               0x0008
-#define PHYERR_NO_RESOURCE                          0x0009
-#define PHYERR_POWER_ISOLATION_TIMEOUT              0x000A
-#define PHYERR_POWER_DOWN_TIMEOUT                   0x000B
-#define PHYERR_AUTONEG_TIMEOUT                      0x000C
-#define PHYERR_PHY_LINK_SPEED_UNCHANGED             0x000D
-
-#define PHY_INVALID_PHY_ADDR                    0xFFFF;
-
-/////////////////////////////////////////////////////////////////////////
-
-// This value can be used in the ulPhyLinkSpeed field.
-#define PHY_LINK_SPEED_UNKNOWN          0x0FFFFFFFF
-
-//
-// Values used to configure PHY mode.
-//
-#define PHY_MODE_MII    1
-#define PHY_MODE_RGMII  2
-
-typedef NV_VOID (* PTIMER_FUNC) (PNV_VOID pvContext);
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
-
-#endif //_PHY_H_
Index: sys/dev/nve/if_nve.c
===================================================================
--- sys/dev/nve/if_nve.c	(revision 261434)
+++ sys/dev/nve/if_nve.c	(working copy)
@@ -1,1791 +0,0 @@
-/*-
- * Copyright (c) 2005 by David E. O'Brien <obrien at FreeBSD.org>.
- * Copyright (c) 2003,2004 by Quinton Dolan <q at onthenet.com.au>. 
- * All rights reserved.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions 
- * are met: 
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer. 
- * 2. Redistributions in binary form must reproduce the above copyright 
- *    notice, this list of conditions and the following disclaimer in the 
- *    documentation and/or other materials provided with the distribution.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
- * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * 
- * $Id: if_nv.c,v 1.19 2004/08/12 14:00:05 q Exp $
- */
-/*
- * NVIDIA nForce MCP Networking Adapter driver
- * 
- * This is a port of the NVIDIA MCP Linux ethernet driver distributed by NVIDIA
- * through their web site.
- * 
- * All mainstream nForce and nForce2 motherboards are supported. This module
- * is as stable, sometimes more stable, than the linux version. (Recent
- * Linux stability issues seem to be related to some issues with newer
- * distributions using GCC 3.x, however this don't appear to effect FreeBSD
- * 5.x).
- * 
- * In accordance with the NVIDIA distribution license it is necessary to
- * link this module against the nvlibnet.o binary object included in the
- * Linux driver source distribution. The binary component is not modified in
- * any way and is simply linked against a FreeBSD equivalent of the nvnet.c
- * linux kernel module "wrapper".
- * 
- * The Linux driver uses a common code API that is shared between Win32 and
- * i386 Linux. This abstracts the low level driver functions and uses
- * callbacks and hooks to access the underlying hardware device. By using
- * this same API in a FreeBSD kernel module it is possible to support the
- * hardware without breaching the Linux source distributions licensing
- * requirements, or obtaining the hardware programming specifications.
- * 
- * Although not conventional, it works, and given the relatively small
- * amount of hardware centric code, it's hopefully no more buggy than its
- * linux counterpart.
- *
- * NVIDIA now support the nForce3 AMD64 platform, however I have been
- * unable to access such a system to verify support. However, the code is
- * reported to work with little modification when compiled with the AMD64
- * version of the NVIDIA Linux library. All that should be necessary to make
- * the driver work is to link it directly into the kernel, instead of as a
- * module, and apply the docs/amd64.diff patch in this source distribution to
- * the NVIDIA Linux driver source.
- *
- * This driver should work on all versions of FreeBSD since 4.9/5.1 as well
- * as recent versions of DragonFly.
- *
- * Written by Quinton Dolan <q at onthenet.com.au> 
- * Portions based on existing FreeBSD network drivers. 
- * NVIDIA API usage derived from distributed NVIDIA NVNET driver source files.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/sockio.h>
-#include <sys/mbuf.h>
-#include <sys/malloc.h>
-#include <sys/kernel.h>
-#include <sys/socket.h>
-#include <sys/sysctl.h>
-#include <sys/queue.h>
-#include <sys/module.h>
-
-#include <net/if.h>
-#include <net/if_var.h>
-#include <net/if_arp.h>
-#include <net/ethernet.h>
-#include <net/if_dl.h>
-#include <net/if_media.h>
-#include <net/if_types.h>
-#include <net/bpf.h>
-#include <net/if_vlan_var.h>
-
-#include <machine/bus.h>
-#include <machine/resource.h>
-
-#include <vm/vm.h>		/* for vtophys */
-#include <vm/pmap.h>		/* for vtophys */
-#include <sys/bus.h>
-#include <sys/rman.h>
-
-#include <dev/pci/pcireg.h>
-#include <dev/pci/pcivar.h>
-#include <dev/mii/mii.h>
-#include <dev/mii/miivar.h>
-#include "miibus_if.h"
-
-/* Include NVIDIA Linux driver header files */
-#include <contrib/dev/nve/nvenet_version.h>
-#define	linux
-#include <contrib/dev/nve/basetype.h>
-#include <contrib/dev/nve/phy.h>
-#include "os+%DIKED-nve.h"
-#include <contrib/dev/nve/drvinfo.h>
-#include <contrib/dev/nve/adapter.h>
-#undef linux
-
-#include <dev/nve/if_nvereg.h>
-
-MODULE_DEPEND(nve, pci, 1, 1, 1);
-MODULE_DEPEND(nve, ether, 1, 1, 1);
-MODULE_DEPEND(nve, miibus, 1, 1, 1);
-
-static int      nve_probe(device_t);
-static int      nve_attach(device_t);
-static int      nve_detach(device_t);
-static void     nve_init(void *);
-static void     nve_init_locked(struct nve_softc *);
-static void     nve_stop(struct nve_softc *);
-static int      nve_shutdown(device_t);
-static int      nve_init_rings(struct nve_softc *);
-static void     nve_free_rings(struct nve_softc *);
-
-static void     nve_ifstart(struct ifnet *);
-static void     nve_ifstart_locked(struct ifnet *);
-static int      nve_ioctl(struct ifnet *, u_long, caddr_t);
-static void     nve_intr(void *);
-static void     nve_tick(void *);
-static void     nve_setmulti(struct nve_softc *);
-static void     nve_watchdog(struct nve_softc *);
-static void     nve_update_stats(struct nve_softc *);
-
-static int      nve_ifmedia_upd(struct ifnet *);
-static void	nve_ifmedia_upd_locked(struct ifnet *);
-static void     nve_ifmedia_sts(struct ifnet *, struct ifmediareq *);
-static int      nve_miibus_readreg(device_t, int, int);
-static int      nve_miibus_writereg(device_t, int, int, int);
-
-static void     nve_dmamap_cb(void *, bus_dma_segment_t *, int, int);
-static void     nve_dmamap_tx_cb(void *, bus_dma_segment_t *, int, bus_size_t, int);
-
-static NV_API_CALL NV_SINT32 nve_osalloc(PNV_VOID, PMEMORY_BLOCK);
-static NV_API_CALL NV_SINT32 nve_osfree(PNV_VOID, PMEMORY_BLOCK);
-static NV_API_CALL NV_SINT32 nve_osallocex(PNV_VOID, PMEMORY_BLOCKEX);
-static NV_API_CALL NV_SINT32 nve_osfreeex(PNV_VOID, PMEMORY_BLOCKEX);
-static NV_API_CALL NV_SINT32 nve_osclear(PNV_VOID, PNV_VOID, NV_SINT32);
-static NV_API_CALL NV_SINT32 nve_osdelay(PNV_VOID, NV_UINT32);
-static NV_API_CALL NV_SINT32 nve_osallocrxbuf(PNV_VOID, PMEMORY_BLOCK, PNV_VOID *);
-static NV_API_CALL NV_SINT32 nve_osfreerxbuf(PNV_VOID, PMEMORY_BLOCK, PNV_VOID);
-static NV_API_CALL NV_SINT32 nve_ospackettx(PNV_VOID, PNV_VOID, NV_UINT32);
-static NV_API_CALL NV_SINT32 nve_ospacketrx(PNV_VOID, PNV_VOID, NV_UINT32, NV_UINT8 *, NV_UINT8);
-static NV_API_CALL NV_SINT32 nve_oslinkchg(PNV_VOID, NV_SINT32);
-static NV_API_CALL NV_SINT32 nve_osalloctimer(PNV_VOID, PNV_VOID *);
-static NV_API_CALL NV_SINT32 nve_osfreetimer(PNV_VOID, PNV_VOID);
-static NV_API_CALL NV_SINT32 nve_osinittimer(PNV_VOID, PNV_VOID, PTIMER_FUNC, PNV_VOID);
-static NV_API_CALL NV_SINT32 nve_ossettimer(PNV_VOID, PNV_VOID, NV_UINT32);
-static NV_API_CALL NV_SINT32 nve_oscanceltimer(PNV_VOID, PNV_VOID);
-
-static NV_API_CALL NV_SINT32 nve_ospreprocpkt(PNV_VOID, PNV_VOID, PNV_VOID *, NV_UINT8 *, NV_UINT8);
-static NV_API_CALL PNV_VOID  nve_ospreprocpktnopq(PNV_VOID, PNV_VOID);
-static NV_API_CALL NV_SINT32 nve_osindicatepkt(PNV_VOID, PNV_VOID *, NV_UINT32);
-static NV_API_CALL NV_SINT32 nve_oslockalloc(PNV_VOID, NV_SINT32, PNV_VOID *);
-static NV_API_CALL NV_SINT32 nve_oslockacquire(PNV_VOID, NV_SINT32, PNV_VOID);
-static NV_API_CALL NV_SINT32 nve_oslockrelease(PNV_VOID, NV_SINT32, PNV_VOID);
-static NV_API_CALL PNV_VOID  nve_osreturnbufvirt(PNV_VOID, PNV_VOID);
-
-static device_method_t nve_methods[] = {
-	/* Device interface */
-	DEVMETHOD(device_probe, nve_probe),
-	DEVMETHOD(device_attach, nve_attach),
-	DEVMETHOD(device_detach, nve_detach),
-	DEVMETHOD(device_shutdown, nve_shutdown),
-
-	/* MII interface */
-	DEVMETHOD(miibus_readreg, nve_miibus_readreg),
-	DEVMETHOD(miibus_writereg, nve_miibus_writereg),
-
-	DEVMETHOD_END
-};
-
-static driver_t nve_driver = {
-	"nve",
-	nve_methods,
-	sizeof(struct nve_softc)
-};
-
-static devclass_t nve_devclass;
-
-static int      nve_pollinterval = 0;
-SYSCTL_INT(_hw, OID_AUTO, nve_pollinterval, CTLFLAG_RW,
-	   &nve_pollinterval, 0, "delay between interface polls");
-
-DRIVER_MODULE(nve, pci, nve_driver, nve_devclass, 0, 0);
-DRIVER_MODULE(miibus, nve, miibus_driver, miibus_devclass, 0, 0);
-
-static struct nve_type nve_devs[] = {
-	{PCI_VENDOR_NVIDIA, PCI_PRODUCT_NVIDIA_NFORCE_LAN,
-	    "NVIDIA nForce MCP Networking Adapter"},
-	{PCI_VENDOR_NVIDIA, PCI_PRODUCT_NVIDIA_NFORCE2_LAN,
-	    "NVIDIA nForce2 MCP2 Networking Adapter"},
-	{PCI_VENDOR_NVIDIA, PCI_PRODUCT_NVIDIA_NFORCE2_400_LAN1,
-	    "NVIDIA nForce2 400 MCP4 Networking Adapter"},
-	{PCI_VENDOR_NVIDIA, PCI_PRODUCT_NVIDIA_NFORCE2_400_LAN2,
-	    "NVIDIA nForce2 400 MCP5 Networking Adapter"},
-	{PCI_VENDOR_NVIDIA, PCI_PRODUCT_NVIDIA_NFORCE3_LAN1,
-	    "NVIDIA nForce3 MCP3 Networking Adapter"},
-	{PCI_VENDOR_NVIDIA, PCI_PRODUCT_NVIDIA_NFORCE3_250_LAN,
-	    "NVIDIA nForce3 250 MCP6 Networking Adapter"},
-	{PCI_VENDOR_NVIDIA, PCI_PRODUCT_NVIDIA_NFORCE3_LAN4,
-	    "NVIDIA nForce3 MCP7 Networking Adapter"},
-	{PCI_VENDOR_NVIDIA, PCI_PRODUCT_NVIDIA_NFORCE4_LAN1,
-	    "NVIDIA nForce4 CK804 MCP8 Networking Adapter"},
-	{PCI_VENDOR_NVIDIA, PCI_PRODUCT_NVIDIA_NFORCE4_LAN2,
-	    "NVIDIA nForce4 CK804 MCP9 Networking Adapter"},
-	{PCI_VENDOR_NVIDIA, PCI_PRODUCT_NVIDIA_MCP04_LAN1,
-	    "NVIDIA nForce MCP04 Networking Adapter"},		// MCP10
-	{PCI_VENDOR_NVIDIA, PCI_PRODUCT_NVIDIA_MCP04_LAN2,
-	    "NVIDIA nForce MCP04 Networking Adapter"},		// MCP11
-	{PCI_VENDOR_NVIDIA, PCI_PRODUCT_NVIDIA_NFORCE430_LAN1,
-	    "NVIDIA nForce 430 MCP12 Networking Adapter"},
-	{PCI_VENDOR_NVIDIA, PCI_PRODUCT_NVIDIA_NFORCE430_LAN2,
-	    "NVIDIA nForce 430 MCP13 Networking Adapter"},
-	{PCI_VENDOR_NVIDIA, PCI_PRODUCT_NVIDIA_MCP55_LAN1,
-	    "NVIDIA nForce MCP55 Networking Adapter"},
-	{PCI_VENDOR_NVIDIA, PCI_PRODUCT_NVIDIA_MCP55_LAN2,
-	    "NVIDIA nForce MCP55 Networking Adapter"},
-	{PCI_VENDOR_NVIDIA, PCI_PRODUCT_NVIDIA_MCP61_LAN1,
-	    "NVIDIA nForce MCP61 Networking Adapter"},
-	{PCI_VENDOR_NVIDIA, PCI_PRODUCT_NVIDIA_MCP61_LAN2,
-	    "NVIDIA nForce MCP61 Networking Adapter"},
-	{PCI_VENDOR_NVIDIA, PCI_PRODUCT_NVIDIA_MCP61_LAN3,
-	    "NVIDIA nForce MCP61 Networking Adapter"},
-	{PCI_VENDOR_NVIDIA, PCI_PRODUCT_NVIDIA_MCP61_LAN4,
-	    "NVIDIA nForce MCP61 Networking Adapter"},
-	{PCI_VENDOR_NVIDIA, PCI_PRODUCT_NVIDIA_MCP65_LAN1,
-	    "NVIDIA nForce MCP65 Networking Adapter"},
-	{PCI_VENDOR_NVIDIA, PCI_PRODUCT_NVIDIA_MCP65_LAN2,
-	    "NVIDIA nForce MCP65 Networking Adapter"},
-	{PCI_VENDOR_NVIDIA, PCI_PRODUCT_NVIDIA_MCP65_LAN3,
-	    "NVIDIA nForce MCP65 Networking Adapter"},
-	{PCI_VENDOR_NVIDIA, PCI_PRODUCT_NVIDIA_MCP65_LAN4,
-	    "NVIDIA nForce MCP65 Networking Adapter"},
-	{0, 0, NULL}
-};
-
-/* DMA MEM map callback function to get data segment physical address */
-static void
-nve_dmamap_cb(void *arg, bus_dma_segment_t * segs, int nsegs, int error)
-{
-	if (error)
-		return;
-
-	KASSERT(nsegs == 1,
-	    ("Too many DMA segments returned when mapping DMA memory"));
-	*(bus_addr_t *)arg = segs->ds_addr;
-}
-
-/* DMA RX map callback function to get data segment physical address */
-static void
-nve_dmamap_rx_cb(void *arg, bus_dma_segment_t * segs, int nsegs,
-    bus_size_t mapsize, int error)
-{
-	if (error)
-		return;
-	*(bus_addr_t *)arg = segs->ds_addr;
-}
-
-/*
- * DMA TX buffer callback function to allocate fragment data segment
- * addresses
- */
-static void
-nve_dmamap_tx_cb(void *arg, bus_dma_segment_t * segs, int nsegs, bus_size_t mapsize, int error)
-{
-	struct nve_tx_desc *info;
-
-	info = arg;
-	if (error)
-		return;
-	KASSERT(nsegs < NV_MAX_FRAGS,
-	    ("Too many DMA segments returned when mapping mbuf"));
-	info->numfrags = nsegs;
-	bcopy(segs, info->frags, nsegs * sizeof(bus_dma_segment_t));
-}
-
-/* Probe for supported hardware ID's */
-static int
-nve_probe(device_t dev)
-{
-	struct nve_type *t;
-
-	t = nve_devs;
-	/* Check for matching PCI DEVICE ID's */
-	while (t->name != NULL) {
-		if ((pci_get_vendor(dev) == t->vid_id) &&
-		    (pci_get_device(dev) == t->dev_id)) {
-			device_set_desc(dev, t->name);
-			return (BUS_PROBE_LOW_PRIORITY);
-		}
-		t++;
-	}
-
-	return (ENXIO);
-}
-
-/* Attach driver and initialise hardware for use */
-static int
-nve_attach(device_t dev)
-{
-	u_char			eaddr[ETHER_ADDR_LEN];
-	struct nve_softc	*sc;
-	struct ifnet		*ifp;
-	OS_API			*osapi;
-	ADAPTER_OPEN_PARAMS	OpenParams;
-	int			error = 0, i, rid;
-
-	if (bootverbose)
-		device_printf(dev, "nvenetlib.o version %s\n", DRIVER_VERSION);
-
-	DEBUGOUT(NVE_DEBUG_INIT, "nve: nve_attach - entry\n");
-
-	sc = device_get_softc(dev);
-
-	/* Allocate mutex */
-	mtx_init(&sc->mtx, device_get_nameunit(dev), MTX_NETWORK_LOCK,
-	    MTX_DEF);
-	callout_init_mtx(&sc->stat_callout, &sc->mtx, 0);
-
-	sc->dev = dev;
-
-	/* Preinitialize data structures */
-	bzero(&OpenParams, sizeof(ADAPTER_OPEN_PARAMS));
-
-	/* Enable bus mastering */
-	pci_enable_busmaster(dev);
-
-	/* Allocate memory mapped address space */
-	rid = NV_RID;
-	sc->res = bus_alloc_resource(dev, SYS_RES_MEMORY, &rid, 0, ~0, 1,
-	    RF_ACTIVE);
-
-	if (sc->res == NULL) {
-		device_printf(dev, "couldn't map memory\n");
-		error = ENXIO;
-		goto fail;
-	}
-	sc->sc_st = rman_get_bustag(sc->res);
-	sc->sc_sh = rman_get_bushandle(sc->res);
-
-	/* Allocate interrupt */
-	rid = 0;
-	sc->irq = bus_alloc_resource(dev, SYS_RES_IRQ, &rid, 0, ~0, 1,
-	    RF_SHAREABLE | RF_ACTIVE);
-
-	if (sc->irq == NULL) {
-		device_printf(dev, "couldn't map interrupt\n");
-		error = ENXIO;
-		goto fail;
-	}
-	/* Allocate DMA tags */
-	error = bus_dma_tag_create(bus_get_dma_tag(dev),
-		     4, 0, BUS_SPACE_MAXADDR_32BIT,
-		     BUS_SPACE_MAXADDR, NULL, NULL, MCLBYTES * NV_MAX_FRAGS,
-				   NV_MAX_FRAGS, MCLBYTES, 0,
-				   busdma_lock_mutex, &Giant,
-				   &sc->mtag);
-	if (error) {
-		device_printf(dev, "couldn't allocate dma tag\n");
-		goto fail;
-	}
-	error = bus_dma_tag_create(bus_get_dma_tag(dev),
-	    4, 0, BUS_SPACE_MAXADDR_32BIT,
-	    BUS_SPACE_MAXADDR, NULL, NULL,
-	    sizeof(struct nve_rx_desc) * RX_RING_SIZE, 1,
-	    sizeof(struct nve_rx_desc) * RX_RING_SIZE, 0,
-	    busdma_lock_mutex, &Giant,
-	    &sc->rtag);
-	if (error) {
-		device_printf(dev, "couldn't allocate dma tag\n");
-		goto fail;
-	}
-	error = bus_dma_tag_create(bus_get_dma_tag(dev),
-	    4, 0, BUS_SPACE_MAXADDR_32BIT,
-	    BUS_SPACE_MAXADDR, NULL, NULL,
-	    sizeof(struct nve_tx_desc) * TX_RING_SIZE, 1,
-	    sizeof(struct nve_tx_desc) * TX_RING_SIZE, 0,
-	    busdma_lock_mutex, &Giant,
-	    &sc->ttag);
-	if (error) {
-		device_printf(dev, "couldn't allocate dma tag\n");
-		goto fail;
-	}
-	/* Allocate DMA safe memory and get the DMA addresses. */
-	error = bus_dmamem_alloc(sc->ttag, (void **)&sc->tx_desc,
-	    BUS_DMA_WAITOK, &sc->tmap);
-	if (error) {
-		device_printf(dev, "couldn't allocate dma memory\n");
-		goto fail;
-	}
-	bzero(sc->tx_desc, sizeof(struct nve_tx_desc) * TX_RING_SIZE);
-	error = bus_dmamap_load(sc->ttag, sc->tmap, sc->tx_desc,
-		    sizeof(struct nve_tx_desc) * TX_RING_SIZE, nve_dmamap_cb,
-		    &sc->tx_addr, 0);
-	if (error) {
-		device_printf(dev, "couldn't map dma memory\n");
-		goto fail;
-	}
-	error = bus_dmamem_alloc(sc->rtag, (void **)&sc->rx_desc,
-	    BUS_DMA_WAITOK, &sc->rmap);
-	if (error) {
-		device_printf(dev, "couldn't allocate dma memory\n");
-		goto fail;
-	}
-	bzero(sc->rx_desc, sizeof(struct nve_rx_desc) * RX_RING_SIZE);
-	error = bus_dmamap_load(sc->rtag, sc->rmap, sc->rx_desc,
-	    sizeof(struct nve_rx_desc) * RX_RING_SIZE, nve_dmamap_cb,
-	    &sc->rx_addr, 0);
-	if (error) {
-		device_printf(dev, "couldn't map dma memory\n");
-		goto fail;
-	}
-	/* Initialize rings. */
-	if (nve_init_rings(sc)) {
-		device_printf(dev, "failed to init rings\n");
-		error = ENXIO;
-		goto fail;
-	}
-	/* Setup NVIDIA API callback routines */
-	osapi				= &sc->osapi;
-	osapi->pOSCX			= sc;
-	osapi->pfnAllocMemory		= nve_osalloc;
-	osapi->pfnFreeMemory		= nve_osfree;
-	osapi->pfnAllocMemoryEx		= nve_osallocex;
-	osapi->pfnFreeMemoryEx		= nve_osfreeex;
-	osapi->pfnClearMemory		= nve_osclear;
-	osapi->pfnStallExecution	= nve_osdelay;
-	osapi->pfnAllocReceiveBuffer	= nve_osallocrxbuf;
-	osapi->pfnFreeReceiveBuffer	= nve_osfreerxbuf;
-	osapi->pfnPacketWasSent		= nve_ospackettx;
-	osapi->pfnPacketWasReceived	= nve_ospacketrx;
-	osapi->pfnLinkStateHasChanged	= nve_oslinkchg;
-	osapi->pfnAllocTimer		= nve_osalloctimer;
-	osapi->pfnFreeTimer		= nve_osfreetimer;
-	osapi->pfnInitializeTimer	= nve_osinittimer;
-	osapi->pfnSetTimer		= nve_ossettimer;
-	osapi->pfnCancelTimer		= nve_oscanceltimer;
-	osapi->pfnPreprocessPacket	= nve_ospreprocpkt;
-	osapi->pfnPreprocessPacketNopq	= nve_ospreprocpktnopq;
-	osapi->pfnIndicatePackets	= nve_osindicatepkt;
-	osapi->pfnLockAlloc		= nve_oslockalloc;
-	osapi->pfnLockAcquire		= nve_oslockacquire;
-	osapi->pfnLockRelease		= nve_oslockrelease;
-	osapi->pfnReturnBufferVirtual	= nve_osreturnbufvirt;
-
-	sc->linkup = FALSE;
-	sc->max_frame_size = ETHERMTU + ETHER_HDR_LEN + FCS_LEN;
-
-	/* TODO - We don't support hardware offload yet */
-	sc->hwmode = 1;
-	sc->media = 0;
-
-	/* Set NVIDIA API startup parameters */
-	OpenParams.MaxDpcLoop = 2;
-	OpenParams.MaxRxPkt = RX_RING_SIZE;
-	OpenParams.MaxTxPkt = TX_RING_SIZE;
-	OpenParams.SentPacketStatusSuccess = 1;
-	OpenParams.SentPacketStatusFailure = 0;
-	OpenParams.MaxRxPktToAccumulate = 6;
-	OpenParams.ulPollInterval = nve_pollinterval;
-	OpenParams.SetForcedModeEveryNthRxPacket = 0;
-	OpenParams.SetForcedModeEveryNthTxPacket = 0;
-	OpenParams.RxForcedInterrupt = 0;
-	OpenParams.TxForcedInterrupt = 0;
-	OpenParams.pOSApi = osapi;
-	OpenParams.pvHardwareBaseAddress = rman_get_virtual(sc->res);
-	OpenParams.bASFEnabled = 0;
-	OpenParams.ulDescriptorVersion = sc->hwmode;
-	OpenParams.ulMaxPacketSize = sc->max_frame_size;
-	OpenParams.DeviceId = pci_get_device(dev);
-
-	/* Open NVIDIA Hardware API */
-	error = ADAPTER_Open(&OpenParams, (void **)&(sc->hwapi), &sc->phyaddr);
-	if (error) {
-		device_printf(dev,
-		    "failed to open NVIDIA Hardware API: 0x%x\n", error);
-		goto fail;
-	}
-	
-	/* TODO - Add support for MODE2 hardware offload */ 
-	
-	bzero(&sc->adapterdata, sizeof(sc->adapterdata));
-	
-	sc->adapterdata.ulMediaIF = sc->media;
-	sc->adapterdata.ulModeRegTxReadCompleteEnable = 1;
-	sc->hwapi->pfnSetCommonData(sc->hwapi->pADCX, &sc->adapterdata);
-	
-	/* MAC is loaded backwards into h/w reg */
-	sc->hwapi->pfnGetNodeAddress(sc->hwapi->pADCX, sc->original_mac_addr);
-	for (i = 0; i < 6; i++) {
-		eaddr[i] = sc->original_mac_addr[5 - i];
-	}
-	sc->hwapi->pfnSetNodeAddress(sc->hwapi->pADCX, eaddr);
-
-	/* Display ethernet address ,... */
-	device_printf(dev, "Ethernet address %6D\n", eaddr, ":");
-
-	/* Allocate interface structures */
-	ifp = sc->ifp = if_alloc(IFT_ETHER);
-	if (ifp == NULL) {
-		device_printf(dev, "can not if_alloc()\n");
-		error = ENOSPC;
-		goto fail;
-	}
-
-	/* Setup interface parameters */
-	ifp->if_softc = sc;
-	if_initname(ifp, device_get_name(dev), device_get_unit(dev));
-	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
-	ifp->if_ioctl = nve_ioctl;
-	ifp->if_start = nve_ifstart;
-	ifp->if_init = nve_init;
-	ifp->if_baudrate = IF_Mbps(100);
-	IFQ_SET_MAXLEN(&ifp->if_snd, TX_RING_SIZE - 1);
-	ifp->if_snd.ifq_drv_maxlen = TX_RING_SIZE - 1;
-	IFQ_SET_READY(&ifp->if_snd);
-	ifp->if_capabilities |= IFCAP_VLAN_MTU;
-	ifp->if_capenable |= IFCAP_VLAN_MTU;
-
-	/* Attach device for MII interface to PHY */
-	DEBUGOUT(NVE_DEBUG_INIT, "nve: do mii_attach\n");
-	error = mii_attach(dev, &sc->miibus, ifp, nve_ifmedia_upd,
-	    nve_ifmedia_sts, BMSR_DEFCAPMASK, MII_PHY_ANY, MII_OFFSET_ANY, 0);
-	if (error != 0) {
-		device_printf(dev, "attaching PHYs failed\n");
-		goto fail;
-	}
-
-	/* Attach to OS's managers. */
-	ether_ifattach(ifp, eaddr);
-
-	/* Activate our interrupt handler. - attach last to avoid lock */
-	error = bus_setup_intr(dev, sc->irq, INTR_TYPE_NET | INTR_MPSAFE,
-	    NULL, nve_intr, sc, &sc->sc_ih);
-	if (error) {
-		device_printf(dev, "couldn't set up interrupt handler\n");
-		goto fail;
-	}
-	DEBUGOUT(NVE_DEBUG_INIT, "nve: nve_attach - exit\n");
-
-fail:
-	if (error)
-		nve_detach(dev);
-
-	return (error);
-}
-
-/* Detach interface for module unload */
-static int
-nve_detach(device_t dev)
-{
-	struct nve_softc *sc = device_get_softc(dev);
-	struct ifnet *ifp;
-
-	KASSERT(mtx_initialized(&sc->mtx), ("mutex not initialized"));
-
-	DEBUGOUT(NVE_DEBUG_DEINIT, "nve: nve_detach - entry\n");
-
-	ifp = sc->ifp;
-
-	if (device_is_attached(dev)) {
-		ether_ifdetach(ifp);
-		NVE_LOCK(sc);
-		nve_stop(sc);
-		NVE_UNLOCK(sc);
-		callout_drain(&sc->stat_callout);
-	}
-
-	if (sc->miibus)
-		device_delete_child(dev, sc->miibus);
-	bus_generic_detach(dev);
-
-	/* Reload unreversed address back into MAC in original state */
-	if (sc->original_mac_addr)
-		sc->hwapi->pfnSetNodeAddress(sc->hwapi->pADCX,
-		    sc->original_mac_addr);
-
-	DEBUGOUT(NVE_DEBUG_DEINIT, "nve: do pfnClose\n");
-	/* Detach from NVIDIA hardware API */
-	if (sc->hwapi->pfnClose)
-		sc->hwapi->pfnClose(sc->hwapi->pADCX, FALSE);
-	/* Release resources */
-	if (sc->sc_ih)
-		bus_teardown_intr(sc->dev, sc->irq, sc->sc_ih);
-	if (sc->irq)
-		bus_release_resource(sc->dev, SYS_RES_IRQ, 0, sc->irq);
-	if (sc->res)
-		bus_release_resource(sc->dev, SYS_RES_MEMORY, NV_RID, sc->res);
-
-	nve_free_rings(sc);
-
-	if (sc->tx_desc) {
-		bus_dmamap_unload(sc->rtag, sc->rmap);
-		bus_dmamem_free(sc->rtag, sc->rx_desc, sc->rmap);
-		bus_dmamap_destroy(sc->rtag, sc->rmap);
-	}
-	if (sc->mtag)
-		bus_dma_tag_destroy(sc->mtag);
-	if (sc->ttag)
-		bus_dma_tag_destroy(sc->ttag);
-	if (sc->rtag)
-		bus_dma_tag_destroy(sc->rtag);
-
-	if (ifp)
-		if_free(ifp);
-	mtx_destroy(&sc->mtx);
-
-	DEBUGOUT(NVE_DEBUG_DEINIT, "nve: nve_detach - exit\n");
-
-	return (0);
-}
-
-/* Initialise interface and start it "RUNNING" */
-static void
-nve_init(void *xsc)
-{
-	struct nve_softc *sc = xsc;
-
-	NVE_LOCK(sc);
-	nve_init_locked(sc);
-	NVE_UNLOCK(sc);
-}
-
-static void
-nve_init_locked(struct nve_softc *sc)
-{
-	struct ifnet *ifp;
-	int error;
-
-	NVE_LOCK_ASSERT(sc);
-	DEBUGOUT(NVE_DEBUG_INIT, "nve: nve_init - entry (%d)\n", sc->linkup);
-
-	ifp = sc->ifp;
-
-	/* Do nothing if already running */
-	if (ifp->if_drv_flags & IFF_DRV_RUNNING)
-		return;
-
-	nve_stop(sc);
-	DEBUGOUT(NVE_DEBUG_INIT, "nve: do pfnInit\n");
-
-	nve_ifmedia_upd_locked(ifp);
-
-	/* Setup Hardware interface and allocate memory structures */
-	error = sc->hwapi->pfnInit(sc->hwapi->pADCX, 
-	    0, /* force speed */ 
-	    0, /* force full duplex */
-	    0, /* force mode */
-	    0, /* force async mode */
-	    &sc->linkup);
-
-	if (error) {
-		device_printf(sc->dev,
-		    "failed to start NVIDIA Hardware interface\n");
-		return;
-	}
-	/* Set the MAC address */
-	sc->hwapi->pfnSetNodeAddress(sc->hwapi->pADCX, IF_LLADDR(sc->ifp));
-	sc->hwapi->pfnEnableInterrupts(sc->hwapi->pADCX);
-	sc->hwapi->pfnStart(sc->hwapi->pADCX);
-
-	/* Setup multicast filter */
-	nve_setmulti(sc);
-
-	/* Update interface parameters */
-	ifp->if_drv_flags |= IFF_DRV_RUNNING;
-	ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-
-	callout_reset(&sc->stat_callout, hz, nve_tick, sc);
-
-	DEBUGOUT(NVE_DEBUG_INIT, "nve: nve_init - exit\n");
-
-	return;
-}
-
-/* Stop interface activity ie. not "RUNNING" */
-static void
-nve_stop(struct nve_softc *sc)
-{
-	struct ifnet *ifp;
-
-	NVE_LOCK_ASSERT(sc);
-
-	DEBUGOUT(NVE_DEBUG_RUNNING, "nve: nve_stop - entry\n");
-
-	ifp = sc->ifp;
-	sc->tx_timer = 0;
-
-	/* Cancel tick timer */
-	callout_stop(&sc->stat_callout);
-
-	/* Stop hardware activity */
-	sc->hwapi->pfnDisableInterrupts(sc->hwapi->pADCX);
-	sc->hwapi->pfnStop(sc->hwapi->pADCX, 0);
-
-	DEBUGOUT(NVE_DEBUG_DEINIT, "nve: do pfnDeinit\n");
-	/* Shutdown interface and deallocate memory buffers */
-	if (sc->hwapi->pfnDeinit)
-		sc->hwapi->pfnDeinit(sc->hwapi->pADCX, 0);
-
-	sc->linkup = 0;
-	sc->cur_rx = 0;
-	sc->pending_rxs = 0;
-	sc->pending_txs = 0;
-
-	ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
-
-	DEBUGOUT(NVE_DEBUG_RUNNING, "nve: nve_stop - exit\n");
-
-	return;
-}
-
-/* Shutdown interface for unload/reboot */
-static int
-nve_shutdown(device_t dev)
-{
-	struct nve_softc *sc;
-
-	DEBUGOUT(NVE_DEBUG_DEINIT, "nve: nve_shutdown\n");
-
-	sc = device_get_softc(dev);
-
-	/* Stop hardware activity */
-	NVE_LOCK(sc);
-	nve_stop(sc);
-	NVE_UNLOCK(sc);
-
-	return (0);
-}
-
-/* Allocate TX ring buffers */
-static int
-nve_init_rings(struct nve_softc *sc)
-{
-	int error, i;
-
-	DEBUGOUT(NVE_DEBUG_INIT, "nve: nve_init_rings - entry\n");
-
-	sc->cur_rx = sc->cur_tx = sc->pending_rxs = sc->pending_txs = 0;
-	/* Initialise RX ring */
-	for (i = 0; i < RX_RING_SIZE; i++) {
-		struct nve_rx_desc *desc = sc->rx_desc + i;
-		struct nve_map_buffer *buf = &desc->buf;
-
-		buf->mbuf = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR);
-		if (buf->mbuf == NULL) {
-			device_printf(sc->dev, "couldn't allocate mbuf\n");
-			nve_free_rings(sc);
-			return (ENOBUFS);
-		}
-		buf->mbuf->m_len = buf->mbuf->m_pkthdr.len = MCLBYTES;
-		m_adj(buf->mbuf, ETHER_ALIGN);
-
-		error = bus_dmamap_create(sc->mtag, 0, &buf->map);
-		if (error) {
-			device_printf(sc->dev, "couldn't create dma map\n");
-			nve_free_rings(sc);
-			return (error);
-		}
-		error = bus_dmamap_load_mbuf(sc->mtag, buf->map, buf->mbuf,
-					  nve_dmamap_rx_cb, &desc->paddr, 0);
-		if (error) {
-			device_printf(sc->dev, "couldn't dma map mbuf\n");
-			nve_free_rings(sc);
-			return (error);
-		}
-		bus_dmamap_sync(sc->mtag, buf->map, BUS_DMASYNC_PREREAD);
-
-		desc->buflength = buf->mbuf->m_len;
-		desc->vaddr = mtod(buf->mbuf, caddr_t);
-	}
-	bus_dmamap_sync(sc->rtag, sc->rmap,
-	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
-
-	/* Initialize TX ring */
-	for (i = 0; i < TX_RING_SIZE; i++) {
-		struct nve_tx_desc *desc = sc->tx_desc + i;
-		struct nve_map_buffer *buf = &desc->buf;
-
-		buf->mbuf = NULL;
-
-		error = bus_dmamap_create(sc->mtag, 0, &buf->map);
-		if (error) {
-			device_printf(sc->dev, "couldn't create dma map\n");
-			nve_free_rings(sc);
-			return (error);
-		}
-	}
-	bus_dmamap_sync(sc->ttag, sc->tmap,
-	    BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
-
-	DEBUGOUT(NVE_DEBUG_INIT, "nve: nve_init_rings - exit\n");
-
-	return (error);
-}
-
-/* Free the TX ring buffers */
-static void
-nve_free_rings(struct nve_softc *sc)
-{
-	int i;
-
-	DEBUGOUT(NVE_DEBUG_DEINIT, "nve: nve_free_rings - entry\n");
-
-	for (i = 0; i < RX_RING_SIZE; i++) {
-		struct nve_rx_desc *desc = sc->rx_desc + i;
-		struct nve_map_buffer *buf = &desc->buf;
-
-		if (buf->mbuf) {
-			bus_dmamap_unload(sc->mtag, buf->map);
-			bus_dmamap_destroy(sc->mtag, buf->map);
-			m_freem(buf->mbuf);
-		}
-		buf->mbuf = NULL;
-	}
-
-	for (i = 0; i < TX_RING_SIZE; i++) {
-		struct nve_tx_desc *desc = sc->tx_desc + i;
-		struct nve_map_buffer *buf = &desc->buf;
-
-		if (buf->mbuf) {
-			bus_dmamap_unload(sc->mtag, buf->map);
-			bus_dmamap_destroy(sc->mtag, buf->map);
-			m_freem(buf->mbuf);
-		}
-		buf->mbuf = NULL;
-	}
-
-	DEBUGOUT(NVE_DEBUG_DEINIT, "nve: nve_free_rings - exit\n");
-}
-
-/* Main loop for sending packets from OS to interface */
-static void
-nve_ifstart(struct ifnet *ifp)
-{
-	struct nve_softc *sc = ifp->if_softc;
-
-	NVE_LOCK(sc);
-	nve_ifstart_locked(ifp);
-	NVE_UNLOCK(sc);
-}
-
-static void
-nve_ifstart_locked(struct ifnet *ifp)
-{
-	struct nve_softc *sc = ifp->if_softc;
-	struct nve_map_buffer *buf;
-	struct mbuf    *m0, *m;
-	struct nve_tx_desc *desc;
-	ADAPTER_WRITE_DATA txdata;
-	int error, i;
-
-	DEBUGOUT(NVE_DEBUG_RUNNING, "nve: nve_ifstart - entry\n");
-
-	NVE_LOCK_ASSERT(sc);
-
-	/* If link is down/busy or queue is empty do nothing */
-	if (ifp->if_drv_flags & IFF_DRV_OACTIVE ||
-	    IFQ_DRV_IS_EMPTY(&ifp->if_snd))
-		return;
-
-	/* Transmit queued packets until sent or TX ring is full */
-	while (sc->pending_txs < TX_RING_SIZE) {
-		desc = sc->tx_desc + sc->cur_tx;
-		buf = &desc->buf;
-
-		/* Get next packet to send. */
-		IFQ_DRV_DEQUEUE(&ifp->if_snd, m0);
-
-		/* If nothing to send, return. */
-		if (m0 == NULL)
-			return;
-
-		/*
-		 * On nForce4, the chip doesn't interrupt on transmit,
-		 * so try to flush transmitted packets from the queue
-		 * if it's getting large (see note in nve_watchdog).
-		 */
-		if (sc->pending_txs > TX_RING_SIZE/2) {
-			sc->hwapi->pfnDisableInterrupts(sc->hwapi->pADCX);
-			sc->hwapi->pfnHandleInterrupt(sc->hwapi->pADCX);
-			sc->hwapi->pfnEnableInterrupts(sc->hwapi->pADCX);
-		}
-
-		/* Map MBUF for DMA access */
-		error = bus_dmamap_load_mbuf(sc->mtag, buf->map, m0,
-		    nve_dmamap_tx_cb, desc, BUS_DMA_NOWAIT);
-
-		if (error && error != EFBIG) {
-			m_freem(m0);
-			sc->tx_errors++;
-			continue;
-		}
-		/*
-		 * Packet has too many fragments - defrag into new mbuf
-		 * cluster
-		 */
-		if (error) {
-			m = m_defrag(m0, M_NOWAIT);
-			if (m == NULL) {
-				m_freem(m0);
-				sc->tx_errors++;
-				continue;
-			}
-			m0 = m;
-
-			error = bus_dmamap_load_mbuf(sc->mtag, buf->map, m,
-			    nve_dmamap_tx_cb, desc, BUS_DMA_NOWAIT);
-			if (error) {
-				m_freem(m);
-				sc->tx_errors++;
-				continue;
-			}
-		}
-		/* Do sync on DMA bounce buffer */
-		bus_dmamap_sync(sc->mtag, buf->map, BUS_DMASYNC_PREWRITE);
-
-		buf->mbuf = m0;
-		txdata.ulNumberOfElements = desc->numfrags;
-		txdata.pvID = (PVOID)desc;
-
-		/* Put fragments into API element list */
-		txdata.ulTotalLength = buf->mbuf->m_len;
-		for (i = 0; i < desc->numfrags; i++) {
-			txdata.sElement[i].ulLength =
-			    (ulong)desc->frags[i].ds_len;
-			txdata.sElement[i].pPhysical =
-			    (PVOID)desc->frags[i].ds_addr;
-		}
-
-		/* Send packet to Nvidia API for transmission */
-		error = sc->hwapi->pfnWrite(sc->hwapi->pADCX, &txdata);
-
-		switch (error) {
-		case ADAPTERERR_NONE:
-			/* Packet was queued in API TX queue successfully */
-			sc->pending_txs++;
-			sc->cur_tx = (sc->cur_tx + 1) % TX_RING_SIZE;
-			break;
-
-		case ADAPTERERR_TRANSMIT_QUEUE_FULL:
-			/* The API TX queue is full - requeue the packet */
-			device_printf(sc->dev,
-			    "nve_ifstart: transmit queue is full\n");
-			ifp->if_drv_flags |= IFF_DRV_OACTIVE;
-			bus_dmamap_unload(sc->mtag, buf->map);
-			IFQ_DRV_PREPEND(&ifp->if_snd, buf->mbuf);
-			buf->mbuf = NULL;
-			return;
-
-		default:
-			/* The API failed to queue/send the packet so dump it */
-			device_printf(sc->dev, "nve_ifstart: transmit error\n");
-			bus_dmamap_unload(sc->mtag, buf->map);
-			m_freem(buf->mbuf);
-			buf->mbuf = NULL;
-			sc->tx_errors++;
-			return;
-		}
-		/* Set watchdog timer. */
-		sc->tx_timer = 8;
-
-		/* Copy packet to BPF tap */
-		BPF_MTAP(ifp, m0);
-	}
-	ifp->if_drv_flags |= IFF_DRV_OACTIVE;
-
-	DEBUGOUT(NVE_DEBUG_RUNNING, "nve: nve_ifstart - exit\n");
-}
-
-/* Handle IOCTL events */
-static int
-nve_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
-{
-	struct nve_softc *sc = ifp->if_softc;
-	struct ifreq *ifr = (struct ifreq *) data;
-	struct mii_data *mii;
-	int error = 0;
-
-	DEBUGOUT(NVE_DEBUG_IOCTL, "nve: nve_ioctl - entry\n");
-
-	switch (command) {
-	case SIOCSIFMTU:
-		/* Set MTU size */
-		NVE_LOCK(sc);
-		if (ifp->if_mtu == ifr->ifr_mtu) {
-			NVE_UNLOCK(sc);
-			break;
-		}
-		if (ifr->ifr_mtu + ifp->if_hdrlen <= MAX_PACKET_SIZE_1518) {
-			ifp->if_mtu = ifr->ifr_mtu;
-			nve_stop(sc);
-			nve_init_locked(sc);
-		} else
-			error = EINVAL;
-		NVE_UNLOCK(sc);
-		break;
-
-	case SIOCSIFFLAGS:
-		/* Setup interface flags */
-		NVE_LOCK(sc);
-		if (ifp->if_flags & IFF_UP) {
-			if ((ifp->if_drv_flags & IFF_DRV_RUNNING) == 0) {
-				nve_init_locked(sc);
-				NVE_UNLOCK(sc);
-				break;
-			}
-		} else {
-			if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
-				nve_stop(sc);
-				NVE_UNLOCK(sc);
-				break;
-			}
-		}
-		/* Handle IFF_PROMISC and IFF_ALLMULTI flags. */
-		nve_setmulti(sc);
-		NVE_UNLOCK(sc);
-		break;
-
-	case SIOCADDMULTI:
-	case SIOCDELMULTI:
-		/* Setup multicast filter */
-		NVE_LOCK(sc);
-		if (ifp->if_drv_flags & IFF_DRV_RUNNING) {
-			nve_setmulti(sc);
-		}
-		NVE_UNLOCK(sc);
-		break;
-
-	case SIOCGIFMEDIA:
-	case SIOCSIFMEDIA:
-		/* Get/Set interface media parameters */
-		mii = device_get_softc(sc->miibus);
-		error = ifmedia_ioctl(ifp, ifr, &mii->mii_media, command);
-		break;
-
-	default:
-		/* Everything else we forward to generic ether ioctl */
-		error = ether_ioctl(ifp, command, data);
-		break;
-	}
-
-	DEBUGOUT(NVE_DEBUG_IOCTL, "nve: nve_ioctl - exit\n");
-
-	return (error);
-}
-
-/* Interrupt service routine */
-static void
-nve_intr(void *arg)
-{
-	struct nve_softc *sc = arg;
-	struct ifnet *ifp = sc->ifp;
-
-	DEBUGOUT(NVE_DEBUG_INTERRUPT, "nve: nve_intr - entry\n");
-
-	NVE_LOCK(sc);
-	if (!ifp->if_flags & IFF_UP) {
-		nve_stop(sc);
-		NVE_UNLOCK(sc);
-		return;
-	}
-	/* Handle interrupt event */
-	if (sc->hwapi->pfnQueryInterrupt(sc->hwapi->pADCX)) {
-		sc->hwapi->pfnHandleInterrupt(sc->hwapi->pADCX);
-		sc->hwapi->pfnEnableInterrupts(sc->hwapi->pADCX);
-	}
-	if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
-		nve_ifstart_locked(ifp);
-
-	/* If no pending packets we don't need a timeout */
-	if (sc->pending_txs == 0)
-		sc->tx_timer = 0;
-	NVE_UNLOCK(sc);
-
-	DEBUGOUT(NVE_DEBUG_INTERRUPT, "nve: nve_intr - exit\n");
-
-	return;
-}
-
-/* Setup multicast filters */
-static void
-nve_setmulti(struct nve_softc *sc)
-{
-	struct ifnet *ifp;
-	struct ifmultiaddr *ifma;
-	PACKET_FILTER hwfilter;
-	int i;
-	u_int8_t andaddr[6], oraddr[6];
-
-	NVE_LOCK_ASSERT(sc);
-
-	DEBUGOUT(NVE_DEBUG_RUNNING, "nve: nve_setmulti - entry\n");
-
-	ifp = sc->ifp;
-
-	/* Initialize filter */
-	hwfilter.ulFilterFlags = 0;
-	for (i = 0; i < 6; i++) {
-		hwfilter.acMulticastAddress[i] = 0;
-		hwfilter.acMulticastMask[i] = 0;
-	}
-
-	if (ifp->if_flags & (IFF_PROMISC | IFF_ALLMULTI)) {
-		/* Accept all packets */
-		hwfilter.ulFilterFlags |= ACCEPT_ALL_PACKETS;
-		sc->hwapi->pfnSetPacketFilter(sc->hwapi->pADCX, &hwfilter);
-		return;
-	}
-	/* Setup multicast filter */
-	if_maddr_rlock(ifp);
-	TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
-		u_char *addrp;
-
-		if (ifma->ifma_addr->sa_family != AF_LINK)
-			continue;
-
-		addrp = LLADDR((struct sockaddr_dl *) ifma->ifma_addr);
-		for (i = 0; i < 6; i++) {
-			u_int8_t mcaddr = addrp[i];
-			andaddr[i] &= mcaddr;
-			oraddr[i] |= mcaddr;
-		}
-	}
-	if_maddr_runlock(ifp);
-	for (i = 0; i < 6; i++) {
-		hwfilter.acMulticastAddress[i] = andaddr[i] & oraddr[i];
-		hwfilter.acMulticastMask[i] = andaddr[i] | (~oraddr[i]);
-	}
-
-	/* Send filter to NVIDIA API */
-	sc->hwapi->pfnSetPacketFilter(sc->hwapi->pADCX, &hwfilter);
-
-	DEBUGOUT(NVE_DEBUG_RUNNING, "nve: nve_setmulti - exit\n");
-
-	return;
-}
-
-/* Change the current media/mediaopts */
-static int
-nve_ifmedia_upd(struct ifnet *ifp)
-{
-	struct nve_softc *sc = ifp->if_softc;
-
-	NVE_LOCK(sc);
-	nve_ifmedia_upd_locked(ifp);
-	NVE_UNLOCK(sc);
-	return (0);
-}
-
-static void
-nve_ifmedia_upd_locked(struct ifnet *ifp)
-{
-	struct nve_softc *sc = ifp->if_softc;
-	struct mii_data *mii;
-	struct mii_softc *miisc;
-
-	DEBUGOUT(NVE_DEBUG_MII, "nve: nve_ifmedia_upd\n");
-
-	NVE_LOCK_ASSERT(sc);
-	mii = device_get_softc(sc->miibus);
-
-	LIST_FOREACH(miisc, &mii->mii_phys, mii_list)
-		PHY_RESET(miisc);
-	mii_mediachg(mii);
-}
-
-/* Update current miibus PHY status of media */
-static void
-nve_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr)
-{
-	struct nve_softc *sc;
-	struct mii_data *mii;
-
-	DEBUGOUT(NVE_DEBUG_MII, "nve: nve_ifmedia_sts\n");
-
-	sc = ifp->if_softc;
-	NVE_LOCK(sc);
-	mii = device_get_softc(sc->miibus);
-	mii_pollstat(mii);
-
-	ifmr->ifm_active = mii->mii_media_active;
-	ifmr->ifm_status = mii->mii_media_status;
-	NVE_UNLOCK(sc);
-
-	return;
-}
-
-/* miibus tick timer - maintain link status */
-static void
-nve_tick(void *xsc)
-{
-	struct nve_softc *sc = xsc;
-	struct mii_data *mii;
-	struct ifnet *ifp;
-
-	NVE_LOCK_ASSERT(sc);
-
-	ifp = sc->ifp;
-	nve_update_stats(sc);
-
-	mii = device_get_softc(sc->miibus);
-	mii_tick(mii);
-
-	if (mii->mii_media_status & IFM_ACTIVE &&
-	    IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE) {
-		if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
-			nve_ifstart_locked(ifp);
-	}
-
-	if (sc->tx_timer > 0 && --sc->tx_timer == 0)
-		nve_watchdog(sc);
-	callout_reset(&sc->stat_callout, hz, nve_tick, sc);
-
-	return;
-}
-
-/* Update ifnet data structure with collected interface stats from API */
-static void
-nve_update_stats(struct nve_softc *sc)
-{
-	struct ifnet *ifp = sc->ifp;
-	ADAPTER_STATS stats;
-
-	NVE_LOCK_ASSERT(sc);
-
-	if (sc->hwapi) {
-		sc->hwapi->pfnGetStatistics(sc->hwapi->pADCX, &stats);
-
-		ifp->if_ipackets = stats.ulSuccessfulReceptions;
-		ifp->if_ierrors = stats.ulMissedFrames +
-			stats.ulFailedReceptions +
-			stats.ulCRCErrors +
-			stats.ulFramingErrors +
-			stats.ulOverFlowErrors;
-
-		ifp->if_opackets = stats.ulSuccessfulTransmissions;
-		ifp->if_oerrors = sc->tx_errors +
-			stats.ulFailedTransmissions +
-			stats.ulRetryErrors +
-			stats.ulUnderflowErrors +
-			stats.ulLossOfCarrierErrors +
-			stats.ulLateCollisionErrors;
-
-		ifp->if_collisions = stats.ulLateCollisionErrors;
-	}
-
-	return;
-}
-
-/* miibus Read PHY register wrapper - calls Nvidia API entry point */
-static int
-nve_miibus_readreg(device_t dev, int phy, int reg)
-{
-	struct nve_softc *sc = device_get_softc(dev);
-	ULONG data;
-
-	DEBUGOUT(NVE_DEBUG_MII, "nve: nve_miibus_readreg - entry\n");
-
-	ADAPTER_ReadPhy(sc->hwapi->pADCX, phy, reg, &data);
-
-	DEBUGOUT(NVE_DEBUG_MII, "nve: nve_miibus_readreg - exit\n");
-
-	return (data);
-}
-
-/* miibus Write PHY register wrapper - calls Nvidia API entry point */
-static int
-nve_miibus_writereg(device_t dev, int phy, int reg, int data)
-{
-	struct nve_softc *sc = device_get_softc(dev);
-
-	DEBUGOUT(NVE_DEBUG_MII, "nve: nve_miibus_writereg - entry\n");
-
-	ADAPTER_WritePhy(sc->hwapi->pADCX, phy, reg, (ulong)data);
-
-	DEBUGOUT(NVE_DEBUG_MII, "nve: nve_miibus_writereg - exit\n");
-
-	return 0;
-}
-
-/* Watchdog timer to prevent PHY lockups */
-static void
-nve_watchdog(struct nve_softc *sc)
-{
-	struct ifnet *ifp;
-	int pending_txs_start;
-
-	NVE_LOCK_ASSERT(sc);
-	ifp = sc->ifp;
-
-	/*
-	 * The nvidia driver blob defers tx completion notifications.
-	 * Thus, sometimes the watchdog timer will go off when the
-	 * tx engine is fine, but the tx completions are just deferred.
-	 * Try kicking the driver blob to clear out any pending tx
-	 * completions.  If that clears up any of the pending tx
-	 * operations, then just return without printing the warning
-	 * message or resetting the adapter, as we can then conclude
-	 * the chip hasn't actually crashed (it's still sending packets).
-	 */
-	pending_txs_start = sc->pending_txs;
-	sc->hwapi->pfnDisableInterrupts(sc->hwapi->pADCX);
-	sc->hwapi->pfnHandleInterrupt(sc->hwapi->pADCX);
-	sc->hwapi->pfnEnableInterrupts(sc->hwapi->pADCX);
-	if (sc->pending_txs < pending_txs_start)
-		return;
-
-	device_printf(sc->dev, "device timeout (%d)\n", sc->pending_txs);
-
-	sc->tx_errors++;
-
-	nve_stop(sc);
-	nve_init_locked(sc);
-
-	if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd))
-		nve_ifstart_locked(ifp);
-}
-
-/* --- Start of NVOSAPI interface --- */
-
-/* Allocate DMA enabled general use memory for API */
-static NV_API_CALL NV_SINT32
-nve_osalloc(PNV_VOID ctx, PMEMORY_BLOCK mem)
-{
-	struct nve_softc *sc;
-	bus_addr_t mem_physical;
-
-	DEBUGOUT(NVE_DEBUG_API, "nve: nve_osalloc - %d\n", mem->uiLength);
-
-	sc = (struct nve_softc *)ctx;
-
-	mem->pLogical = (PVOID)contigmalloc(mem->uiLength, M_DEVBUF,
-	    M_NOWAIT | M_ZERO, 0, 0xffffffff, PAGE_SIZE, 0);
-
-	if (!mem->pLogical) {
-		device_printf(sc->dev, "memory allocation failed\n");
-		return (0);
-	}
-	memset(mem->pLogical, 0, (ulong)mem->uiLength);
-	mem_physical = vtophys(mem->pLogical);
-	mem->pPhysical = (PVOID)mem_physical;
-
-	DEBUGOUT(NVE_DEBUG_API, "nve: nve_osalloc 0x%x/0x%x - %d\n",
-	    (uint)mem->pLogical, (uint)mem->pPhysical, (uint)mem->uiLength);
-
-	return (1);
-}
-
-/* Free allocated memory */
-static NV_API_CALL NV_SINT32
-nve_osfree(PNV_VOID ctx, PMEMORY_BLOCK mem)
-{
-	DEBUGOUT(NVE_DEBUG_API, "nve: nve_osfree - 0x%x - %d\n",
-	    (uint)mem->pLogical, (uint) mem->uiLength);
-
-	contigfree(mem->pLogical, PAGE_SIZE, M_DEVBUF);
-	return (1);
-}
-
-/* Copied directly from nvnet.c */
-static NV_API_CALL NV_SINT32
-nve_osallocex(PNV_VOID ctx, PMEMORY_BLOCKEX mem_block_ex)
-{
-	MEMORY_BLOCK mem_block;
-
-	DEBUGOUT(NVE_DEBUG_API, "nve: nve_osallocex\n");
-
-	mem_block_ex->pLogical = NULL;
-	mem_block_ex->uiLengthOrig = mem_block_ex->uiLength;
-
-	if ((mem_block_ex->AllocFlags & ALLOC_MEMORY_ALIGNED) &&
-	    (mem_block_ex->AlignmentSize > 1)) {
-		DEBUGOUT(NVE_DEBUG_API, "     aligning on %d\n",
-		    mem_block_ex->AlignmentSize);
-		mem_block_ex->uiLengthOrig += mem_block_ex->AlignmentSize;
-	}
-	mem_block.uiLength = mem_block_ex->uiLengthOrig;
-
-	if (nve_osalloc(ctx, &mem_block) == 0) {
-		return (0);
-	}
-	mem_block_ex->pLogicalOrig = mem_block.pLogical;
-	mem_block_ex->pPhysicalOrigLow = (unsigned long)mem_block.pPhysical;
-	mem_block_ex->pPhysicalOrigHigh = 0;
-
-	mem_block_ex->pPhysical = mem_block.pPhysical;
-	mem_block_ex->pLogical = mem_block.pLogical;
-
-	if (mem_block_ex->uiLength != mem_block_ex->uiLengthOrig) {
-		unsigned int offset;
-		offset = mem_block_ex->pPhysicalOrigLow &
-		    (mem_block_ex->AlignmentSize - 1);
-
-		if (offset) {
-			mem_block_ex->pPhysical =
-			    (PVOID)((ulong)mem_block_ex->pPhysical +
-			    mem_block_ex->AlignmentSize - offset);
-			mem_block_ex->pLogical =
-			    (PVOID)((ulong)mem_block_ex->pLogical +
-			    mem_block_ex->AlignmentSize - offset);
-		} /* if (offset) */
-	} /* if (mem_block_ex->uiLength != *mem_block_ex->uiLengthOrig) */
-	return (1);
-}
-
-/* Copied directly from nvnet.c */
-static NV_API_CALL NV_SINT32
-nve_osfreeex(PNV_VOID ctx, PMEMORY_BLOCKEX mem_block_ex)
-{
-	MEMORY_BLOCK mem_block;
-
-	DEBUGOUT(NVE_DEBUG_API, "nve: nve_osfreeex\n");
-
-	mem_block.pLogical = mem_block_ex->pLogicalOrig;
-	mem_block.pPhysical = (PVOID)((ulong)mem_block_ex->pPhysicalOrigLow);
-	mem_block.uiLength = mem_block_ex->uiLengthOrig;
-
-	return (nve_osfree(ctx, &mem_block));
-}
-
-/* Clear memory region */
-static NV_API_CALL NV_SINT32
-nve_osclear(PNV_VOID ctx, PNV_VOID mem, NV_SINT32 length)
-{
-	DEBUGOUT(NVE_DEBUG_API, "nve: nve_osclear\n");
-	memset(mem, 0, length);
-	return (1);
-}
-
-/* Sleep for a tick */
-static NV_API_CALL NV_SINT32
-nve_osdelay(PNV_VOID ctx, NV_UINT32 usec)
-{
-	DELAY(usec);
-	return (1);
-}
-
-/* Allocate memory for rx buffer */
-static NV_API_CALL NV_SINT32
-nve_osallocrxbuf(PNV_VOID ctx, PMEMORY_BLOCK mem, PNV_VOID *id)
-{
-	struct nve_softc *sc = ctx;
-	struct nve_rx_desc *desc;
-	struct nve_map_buffer *buf;
-	int error;
-
-	if (device_is_attached(sc->dev))
-		NVE_LOCK_ASSERT(sc);
-
-	DEBUGOUT(NVE_DEBUG_API, "nve: nve_osallocrxbuf\n");
-
-	if (sc->pending_rxs == RX_RING_SIZE) {
-		device_printf(sc->dev, "rx ring buffer is full\n");
-		goto fail;
-	}
-	desc = sc->rx_desc + sc->cur_rx;
-	buf = &desc->buf;
-
-	if (buf->mbuf == NULL) {
-		buf->mbuf = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR);
-		if (buf->mbuf == NULL) {
-			device_printf(sc->dev, "failed to allocate memory\n");
-			goto fail;
-		}
-		buf->mbuf->m_len = buf->mbuf->m_pkthdr.len = MCLBYTES;
-		m_adj(buf->mbuf, ETHER_ALIGN);
-
-		error = bus_dmamap_load_mbuf(sc->mtag, buf->map, buf->mbuf,
-		    nve_dmamap_rx_cb, &desc->paddr, 0);
-		if (error) {
-			device_printf(sc->dev, "failed to dmamap mbuf\n");
-			m_freem(buf->mbuf);
-			buf->mbuf = NULL;
-			goto fail;
-		}
-		bus_dmamap_sync(sc->mtag, buf->map, BUS_DMASYNC_PREREAD);
-		desc->buflength = buf->mbuf->m_len;
-		desc->vaddr = mtod(buf->mbuf, caddr_t);
-	}
-	sc->pending_rxs++;
-	sc->cur_rx = (sc->cur_rx + 1) % RX_RING_SIZE;
-
-	mem->pLogical = (void *)desc->vaddr;
-	mem->pPhysical = (void *)desc->paddr;
-	mem->uiLength = desc->buflength;
-	*id = (void *)desc;
-
-	return (1);
-	
-fail:
-	return (0);
-}
-
-/* Free the rx buffer */
-static NV_API_CALL NV_SINT32
-nve_osfreerxbuf(PNV_VOID ctx, PMEMORY_BLOCK mem, PNV_VOID id)
-{
-	struct nve_softc *sc = ctx;
-	struct nve_rx_desc *desc;
-	struct nve_map_buffer *buf;
-
-	DEBUGOUT(NVE_DEBUG_API, "nve: nve_osfreerxbuf\n");
-
-	desc = (struct nve_rx_desc *) id;
-	buf = &desc->buf;
-
-	if (buf->mbuf) {
-		bus_dmamap_unload(sc->mtag, buf->map);
-		bus_dmamap_destroy(sc->mtag, buf->map);
-		m_freem(buf->mbuf);
-	}
-	sc->pending_rxs--;
-	buf->mbuf = NULL;
-
-	return (1);
-}
-
-/* This gets called by the Nvidia API after our TX packet has been sent */
-static NV_API_CALL NV_SINT32
-nve_ospackettx(PNV_VOID ctx, PNV_VOID id, NV_UINT32 success)
-{
-	struct nve_softc *sc = ctx;
-	struct nve_map_buffer *buf;
-	struct nve_tx_desc *desc = (struct nve_tx_desc *) id;
-	struct ifnet *ifp;
-
-	NVE_LOCK_ASSERT(sc);
-
-	DEBUGOUT(NVE_DEBUG_API, "nve: nve_ospackettx\n");
-
-	ifp = sc->ifp;
-	buf = &desc->buf;
-	sc->pending_txs--;
-
-	/* Unload and free mbuf cluster */
-	if (buf->mbuf == NULL)
-		goto fail;
-
-	bus_dmamap_sync(sc->mtag, buf->map, BUS_DMASYNC_POSTWRITE);
-	bus_dmamap_unload(sc->mtag, buf->map);
-	m_freem(buf->mbuf);
-	buf->mbuf = NULL;
-
-	/* Send more packets if we have them */
-	if (sc->pending_txs < TX_RING_SIZE)
-		sc->ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
-
-	if (!IFQ_DRV_IS_EMPTY(&ifp->if_snd) && sc->pending_txs < TX_RING_SIZE)
-		nve_ifstart_locked(ifp);
-
-fail:
-
-	return (1);
-}
-
-/* This gets called by the Nvidia API when a new packet has been received */
-/* XXX What is newbuf used for? XXX */
-static NV_API_CALL NV_SINT32
-nve_ospacketrx(PNV_VOID ctx, PNV_VOID data, NV_UINT32 success, NV_UINT8 *newbuf,
-    NV_UINT8 priority)
-{
-	struct nve_softc *sc = ctx;
-	struct ifnet *ifp;
-	struct nve_rx_desc *desc;
-	struct nve_map_buffer *buf;
-	ADAPTER_READ_DATA *readdata;
-	struct mbuf *m;
-
-	NVE_LOCK_ASSERT(sc);
-
-	DEBUGOUT(NVE_DEBUG_API, "nve: nve_ospacketrx\n");
-
-	ifp = sc->ifp;
-
-	readdata = (ADAPTER_READ_DATA *) data;
-	desc = readdata->pvID;
-	buf = &desc->buf;
-	bus_dmamap_sync(sc->mtag, buf->map, BUS_DMASYNC_POSTREAD);
-
-	if (success) {
-		/* Sync DMA bounce buffer. */
-		bus_dmamap_sync(sc->mtag, buf->map, BUS_DMASYNC_POSTREAD);
-
-		/* First mbuf in packet holds the ethernet and packet headers */
-		buf->mbuf->m_pkthdr.rcvif = ifp;
-		buf->mbuf->m_pkthdr.len = buf->mbuf->m_len =
-		    readdata->ulTotalLength;
-
-		bus_dmamap_unload(sc->mtag, buf->map);
-
-		/* Blat the mbuf pointer, kernel will free the mbuf cluster */
-		m = buf->mbuf;
-		buf->mbuf = NULL;
-
-		/* Give mbuf to OS. */
-		NVE_UNLOCK(sc);
-		(*ifp->if_input)(ifp, m);
-		NVE_LOCK(sc);
-		if (readdata->ulFilterMatch & ADREADFL_MULTICAST_MATCH)
-			ifp->if_imcasts++;
-
-	} else {
-		bus_dmamap_sync(sc->mtag, buf->map, BUS_DMASYNC_POSTREAD);
-		bus_dmamap_unload(sc->mtag, buf->map);
-		m_freem(buf->mbuf);
-		buf->mbuf = NULL;
-	}
-
-	sc->cur_rx = desc - sc->rx_desc;
-	sc->pending_rxs--;
-
-	return (1);
-}
-
-/* This gets called by NVIDIA API when the PHY link state changes */
-static NV_API_CALL NV_SINT32
-nve_oslinkchg(PNV_VOID ctx, NV_SINT32 enabled)
-{
-
-	DEBUGOUT(NVE_DEBUG_API, "nve: nve_oslinkchg\n");
-
-	return (1);
-}
-
-/* Setup a watchdog timer */
-static NV_API_CALL NV_SINT32
-nve_osalloctimer(PNV_VOID ctx, PNV_VOID *timer)
-{
-	struct nve_softc *sc = (struct nve_softc *)ctx;
-
-	DEBUGOUT(NVE_DEBUG_BROKEN, "nve: nve_osalloctimer\n");
-
-	callout_init(&sc->ostimer, CALLOUT_MPSAFE);
-	*timer = &sc->ostimer;
-
-	return (1);
-}
-
-/* Free the timer */
-static NV_API_CALL NV_SINT32
-nve_osfreetimer(PNV_VOID ctx, PNV_VOID timer)
-{
-
-	DEBUGOUT(NVE_DEBUG_BROKEN, "nve: nve_osfreetimer\n");
-
-	callout_drain((struct callout *)timer);
-
-	return (1);
-}
-
-/* Setup timer parameters */
-static NV_API_CALL NV_SINT32
-nve_osinittimer(PNV_VOID ctx, PNV_VOID timer, PTIMER_FUNC func, PNV_VOID parameters)
-{
-	struct nve_softc *sc = (struct nve_softc *)ctx;
-
-	DEBUGOUT(NVE_DEBUG_BROKEN, "nve: nve_osinittimer\n");
-
-	sc->ostimer_func = func;
-	sc->ostimer_params = parameters;
-
-	return (1);
-}
-
-/* Set the timer to go off */
-static NV_API_CALL NV_SINT32
-nve_ossettimer(PNV_VOID ctx, PNV_VOID timer, NV_UINT32 delay)
-{
-	struct nve_softc *sc = ctx;
-
-	DEBUGOUT(NVE_DEBUG_BROKEN, "nve: nve_ossettimer\n");
-
-	callout_reset((struct callout *)timer, delay, sc->ostimer_func,
-	    sc->ostimer_params);
-
-	return (1);
-}
-
-/* Cancel the timer */
-static NV_API_CALL NV_SINT32
-nve_oscanceltimer(PNV_VOID ctx, PNV_VOID timer)
-{
-
-	DEBUGOUT(NVE_DEBUG_BROKEN, "nve: nve_oscanceltimer\n");
-
-	callout_stop((struct callout *)timer);
-
-	return (1);
-}
-
-static NV_API_CALL NV_SINT32
-nve_ospreprocpkt(PNV_VOID ctx, PNV_VOID readdata, PNV_VOID *id,
-    NV_UINT8 *newbuffer, NV_UINT8 priority)
-{
-
-	/* Not implemented */
-	DEBUGOUT(NVE_DEBUG_BROKEN, "nve: nve_ospreprocpkt\n");
-
-	return (1);
-}
-
-static NV_API_CALL PNV_VOID
-nve_ospreprocpktnopq(PNV_VOID ctx, PNV_VOID readdata)
-{
-
-	/* Not implemented */
-	DEBUGOUT(NVE_DEBUG_BROKEN, "nve: nve_ospreprocpkt\n");
-
-	return (NULL);
-}
-
-static NV_API_CALL NV_SINT32
-nve_osindicatepkt(PNV_VOID ctx, PNV_VOID *id, NV_UINT32 pktno)
-{
-
-	/* Not implemented */
-	DEBUGOUT(NVE_DEBUG_BROKEN, "nve: nve_osindicatepkt\n");
-
-	return (1);
-}
-
-/* Allocate mutex context (already done in nve_attach) */
-static NV_API_CALL NV_SINT32
-nve_oslockalloc(PNV_VOID ctx, NV_SINT32 type, PNV_VOID *pLock)
-{
-	struct nve_softc *sc = (struct nve_softc *)ctx;
-
-	DEBUGOUT(NVE_DEBUG_LOCK, "nve: nve_oslockalloc\n");
-
-	*pLock = (void **)sc;
-
-	return (1);
-}
-
-/* Obtain a spin lock */
-static NV_API_CALL NV_SINT32
-nve_oslockacquire(PNV_VOID ctx, NV_SINT32 type, PNV_VOID lock)
-{
-
-	DEBUGOUT(NVE_DEBUG_LOCK, "nve: nve_oslockacquire\n");
-
-	return (1);
-}
-
-/* Release lock */
-static NV_API_CALL NV_SINT32
-nve_oslockrelease(PNV_VOID ctx, NV_SINT32 type, PNV_VOID lock)
-{
-
-	DEBUGOUT(NVE_DEBUG_LOCK, "nve: nve_oslockrelease\n");
-
-	return (1);
-}
-
-/* I have no idea what this is for */
-static NV_API_CALL PNV_VOID
-nve_osreturnbufvirt(PNV_VOID ctx, PNV_VOID readdata)
-{
-
-	/* Not implemented */
-	DEBUGOUT(NVE_DEBUG_LOCK, "nve: nve_osreturnbufvirt\n");
-	panic("nve: nve_osreturnbufvirtual not implemented\n");
-
-	return (NULL);
-}
-
-/* --- End on NVOSAPI interface --- */
Index: sys/dev/nve/if_nvereg.h
===================================================================
--- sys/dev/nve/if_nvereg.h	(revision 261434)
+++ sys/dev/nve/if_nvereg.h	(working copy)
@@ -1,193 +0,0 @@
-/*
- * Copyright (c) 2005 by David E. O'Brien <obrien at FreeBSD.org>.
- * Copyright (c) 2003 by Quinton Dolan <q at onthenet.com.au>.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS `AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 
- * SUCH DAMAGE.
- *
- * $Id: if_nvreg.h,v 1.6 2004/08/12 14:00:05 q Exp $
- * $FreeBSD$
- */
- 
-#ifndef _IF_NVEREG_H_
-#define _IF_NVEREG_H_
-
-#ifndef PCI_VENDOR_NVIDIA
-#define	PCI_VENDOR_NVIDIA 0x10DE
-#endif
-
-#define	PCI_PRODUCT_NVIDIA_NFORCE_LAN		0x01C3
-#define	PCI_PRODUCT_NVIDIA_NFORCE2_LAN		0x0066
-#define	PCI_PRODUCT_NVIDIA_NFORCE3_LAN1		0x00D6
-#define	PCI_PRODUCT_NVIDIA_NFORCE2_400_LAN1	0x0086
-#define	PCI_PRODUCT_NVIDIA_NFORCE2_400_LAN2	0x008C
-#define	PCI_PRODUCT_NVIDIA_NFORCE3_250_LAN	0x00E6
-#define	PCI_PRODUCT_NVIDIA_NFORCE3_LAN4		0x00DF
-#define	PCI_PRODUCT_NVIDIA_NFORCE4_LAN1		0x0056
-#define	PCI_PRODUCT_NVIDIA_NFORCE4_LAN2		0x0057
-#define	PCI_PRODUCT_NVIDIA_MCP04_LAN1		0x0037
-#define	PCI_PRODUCT_NVIDIA_MCP04_LAN2		0x0038
-#define	PCI_PRODUCT_NVIDIA_NFORCE430_LAN1	0x0268
-#define	PCI_PRODUCT_NVIDIA_NFORCE430_LAN2	0x0269
-#define	PCI_PRODUCT_NVIDIA_MCP55_LAN1		0x0372
-#define	PCI_PRODUCT_NVIDIA_MCP55_LAN2		0x0373
-#define	PCI_PRODUCT_NVIDIA_MCP61_LAN1		0x03e5
-#define	PCI_PRODUCT_NVIDIA_MCP61_LAN2		0x03e6
-#define	PCI_PRODUCT_NVIDIA_MCP61_LAN3		0x03ee
-#define	PCI_PRODUCT_NVIDIA_MCP61_LAN4		0x03ef
-#define	PCI_PRODUCT_NVIDIA_MCP65_LAN1		0x0450
-#define	PCI_PRODUCT_NVIDIA_MCP65_LAN2		0x0451
-#define	PCI_PRODUCT_NVIDIA_MCP65_LAN3		0x0452
-#define	PCI_PRODUCT_NVIDIA_MCP65_LAN4		0x0453
-
-#define	PCI_PRODUCT_NVIDIA_NFORCE3_LAN2	PCI_PRODUCT_NVIDIA_NFORCE2_400_LAN1
-#define	PCI_PRODUCT_NVIDIA_NFORCE3_LAN3	PCI_PRODUCT_NVIDIA_NFORCE2_400_LAN2
-#define	PCI_PRODUCT_NVIDIA_NFORCE3_LAN5	PCI_PRODUCT_NVIDIA_NFORCE3_250_LAN
-#define	PCI_PRODUCT_NVIDIA_CK804_LAN1	PCI_PRODUCT_NVIDIA_NFORCE4_LAN1
-#define	PCI_PRODUCT_NVIDIA_CK804_LAN2	PCI_PRODUCT_NVIDIA_NFORCE4_LAN2
-#define	PCI_PRODUCT_NVIDIA_MCP51_LAN1	PCI_PRODUCT_NVIDIA_NFORCE430_LAN1
-#define	PCI_PRODUCT_NVIDIA_MCP51_LAN2	PCI_PRODUCT_NVIDIA_NFORCE430_LAN2
-
-#define	NV_RID		0x10
-
-#define	TX_RING_SIZE	64
-#define	RX_RING_SIZE	64
-#define	NV_MAX_FRAGS	32	// match adapter.h:ADAPTER_WRITE_DATA.sElement[]
-
-#define	FCS_LEN 4
-
-#define	NVE_DEBUG		0x0000
-#define	NVE_DEBUG_INIT		0x0001
-#define	NVE_DEBUG_RUNNING	0x0002
-#define	NVE_DEBUG_DEINIT 	0x0004
-#define	NVE_DEBUG_IOCTL		0x0008
-#define	NVE_DEBUG_INTERRUPT	0x0010
-#define	NVE_DEBUG_API		0x0020
-#define	NVE_DEBUG_LOCK		0x0040
-#define	NVE_DEBUG_BROKEN	0x0080
-#define	NVE_DEBUG_MII		0x0100
-#define	NVE_DEBUG_ALL		0xFFFF
-
-#if NVE_DEBUG
-#define	DEBUGOUT(level, fmt, args...) if (NVE_DEBUG & level) \
-    printf(fmt, ## args)
-#else
-#define	DEBUGOUT(level, fmt, args...)
-#endif
-
-typedef unsigned long	ulong;
-
-struct nve_map_buffer {
-	struct mbuf *mbuf;	/* mbuf receiving packet */
-	bus_dmamap_t map;	/* DMA map */	
-};
-
-struct nve_dma_info {
-	bus_dma_tag_t tag;
-	struct nve_map_buffer buf;
-	u_int16_t buflength;
-	caddr_t vaddr;		/* Virtual memory address */
-	bus_addr_t paddr;	/* DMA physical address */
-};
-
-struct nve_rx_desc {
-	struct nve_rx_desc *next;
-	struct nve_map_buffer buf;
-	u_int16_t buflength;
-	caddr_t vaddr;
-	bus_addr_t paddr;
-};
-
-struct nve_tx_desc {
-	/* Don't add anything above this structure */
-	TX_INFO_ADAP TxInfoAdap;
-	struct nve_tx_desc *next;
-	struct nve_map_buffer buf;
-	u_int16_t buflength;
-	u_int32_t numfrags;
-	bus_dma_segment_t frags[NV_MAX_FRAGS];
-};
-
-struct nve_softc {
-	struct ifnet *ifp;	/* interface info */
-	struct resource *res;
-	struct resource *irq;
-
-	ADAPTER_API *hwapi;
-	OS_API osapi;
-		
-	device_t miibus;
-	device_t dev;
-	struct callout stat_callout;
-	int tx_timer;
-
-	void *sc_ih;
-	bus_space_tag_t sc_st;
-	bus_space_handle_t sc_sh;
-	bus_dma_tag_t mtag;
-	bus_dma_tag_t rtag;
-	bus_dmamap_t rmap;
-	bus_dma_tag_t ttag;
-	bus_dmamap_t tmap;
-
-	struct nve_rx_desc *rx_desc;
-	struct nve_tx_desc *tx_desc;
-	bus_addr_t rx_addr;
-	bus_addr_t tx_addr;
-	u_int16_t rx_ring_full;
-	u_int16_t tx_ring_full;
-	u_int32_t cur_rx;
-	u_int32_t cur_tx;
-	u_int32_t pending_rxs;
-	u_int32_t pending_txs;
-
-	struct mtx mtx;
-
-	/* Stuff for dealing with the NVIDIA OS API */
-	struct callout ostimer;
-	PTIMER_FUNC ostimer_func;
-	void *ostimer_params;
-	int linkup;
-	ulong tx_errors;
-	NV_UINT32 hwmode;
-	NV_UINT32 max_frame_size;
-	NV_UINT32 phyaddr;
-	NV_UINT32 media;
-	CMNDATA_OS_ADAPTER adapterdata;
-	unsigned char original_mac_addr[6];
-};
-
-struct nve_type {
-	u_int16_t	vid_id;
-	u_int16_t	dev_id;
-	char		*name;
-};
-
-#define NVE_LOCK(_sc)		mtx_lock(&(_sc)->mtx)
-#define NVE_UNLOCK(_sc)		mtx_unlock(&(_sc)->mtx)
-#define NVE_LOCK_ASSERT(_sc)	mtx_assert(&(_sc)->mtx, MA_OWNED)
-
-extern int ADAPTER_ReadPhy (PVOID pContext, ULONG ulPhyAddr, ULONG ulReg, ULONG *pulVal);
-extern int ADAPTER_WritePhy (PVOID pContext, ULONG ulPhyAddr, ULONG ulReg, ULONG ulVal);
-extern int ADAPTER_Init (PVOID pContext, USHORT usForcedSpeed, UCHAR ucForceDpx, UCHAR ucForceMode, UINT *puiLinkState);
-
-#endif	/* _IF_NVEREG_H_ */
Index: sys/i386/conf/GENERIC
===================================================================
--- sys/i386/conf/GENERIC	(revision 261434)
+++ sys/i386/conf/GENERIC	(working copy)
@@ -245,7 +245,6 @@
 device		msk		# Marvell/SysKonnect Yukon II Gigabit Ethernet
 device		nfe		# nVidia nForce MCP on-board Ethernet
 device		nge		# NatSemi DP83820 gigabit Ethernet
-#device		nve		# nVidia nForce MCP on-board Ethernet Networking
 device		pcn		# AMD Am79C97x PCI 10/100 (precedence over 'le')
 device		re		# RealTek 8139C+/8169/8169S/8110S
 device		rl		# RealTek 8129/8139
Index: sys/i386/conf/NOTES
===================================================================
--- sys/i386/conf/NOTES	(revision 261434)
+++ sys/i386/conf/NOTES	(working copy)
@@ -581,7 +581,6 @@
 # mlxen: Mellanox ConnectX HCA Ethernet
 # mthca: Mellanox HCA InfiniBand
 # nfe:	nVidia nForce MCP on-board Ethernet Networking (BSD open source)
-# nve:	nVidia nForce MCP on-board Ethernet Networking
 # sbni: Granch SBNI12-xx ISA and PCI adapters
 # vmx:	VMware VMXNET3 Ethernet (BSD open source)
 # wl:   Lucent Wavelan (ISA card only).
@@ -628,7 +627,6 @@
 device  	mlxen		# Mellanox ConnectX HCA Ethernet
 device  	mthca		# Mellanox HCA InfiniBand
 device		nfe		# nVidia nForce MCP on-board Ethernet
-device		nve		# nVidia nForce MCP on-board Ethernet Networking
 device		sbni
 hint.sbni.0.at="isa"
 hint.sbni.0.port="0x210"
Index: sys/i386/conf/PAE
===================================================================
--- sys/i386/conf/PAE	(revision 261434)
+++ sys/i386/conf/PAE	(working copy)
@@ -54,7 +54,6 @@
 nodevice	txp
 nodevice	vx
 
-nodevice	nve
 nodevice	pcn
 nodevice	sf
 nodevice	sis
Index: sys/i386/conf/XEN
===================================================================
--- sys/i386/conf/XEN	(revision 261434)
+++ sys/i386/conf/XEN	(working copy)
@@ -7,7 +7,7 @@
 ident		XEN
 
 makeoptions	DEBUG=-g		# Build kernel with gdb(1) debug symbols
-makeoptions	WITHOUT_MODULES="aha ahb amd ctl cxgb dpt drm drm2 hptnr hptmv ida malo mps mwl nve rdma sound sym trm xfs"
+makeoptions	WITHOUT_MODULES="aha ahb amd ctl cxgb dpt drm drm2 hptnr hptmv ida malo mps mwl rdma sound sym trm xfs"
 
 options 	SCHED_ULE		# ULE scheduler
 options 	PREEMPTION		# Enable kernel thread preemption
Index: sys/mips/conf/OCTEON1
===================================================================
--- sys/mips/conf/OCTEON1	(revision 261434)
+++ sys/mips/conf/OCTEON1	(working copy)
@@ -218,7 +218,6 @@
 device		lge		# Level 1 LXT1001 gigabit Ethernet
 device		msk		# Marvell/SysKonnect Yukon II Gigabit Ethernet
 device		nge		# NatSemi DP83820 gigabit Ethernet
-#device		nve		# nVidia nForce MCP on-board Ethernet Networking
 device		pcn		# AMD Am79C97x PCI 10/100 (precedence over 'le')
 device		re		# RealTek 8139C+/8169/8169S/8110S
 device		rl		# RealTek 8129/8139
Index: sys/modules/Makefile
===================================================================
--- sys/modules/Makefile	(revision 261434)
+++ sys/modules/Makefile	(working copy)
@@ -251,7 +251,6 @@
 	nullfs \
 	${_ntb} \
 	${_nvd} \
-	${_nve} \
 	${_nvme} \
 	${_nvram} \
 	${_nxge} \
@@ -609,9 +608,6 @@
 _mly=		mly
 _nfe=		nfe
 _nvd=		nvd
-.if ${MK_SOURCELESS_HOST} != "no"
-_nve=		nve
-.endif
 _nvme=		nvme
 _nvram=		nvram
 _nxge=		nxge
@@ -730,9 +726,6 @@
 _nfe=		nfe
 _ntb=		ntb
 _nvd=		nvd
-.if ${MK_SOURCELESS_HOST} != "no"
-_nve=		nve
-.endif
 _nvme=		nvme
 _nvram=		nvram
 _nxge=		nxge
Index: sys/modules/nve/Makefile
===================================================================
--- sys/modules/nve/Makefile	(revision 261434)
+++ sys/modules/nve/Makefile	(working copy)
@@ -1,20 +0,0 @@
-# $FreeBSD$
-
-.PATH: ${.CURDIR}/../../dev/nve
-
-KMOD=	if_nve
-SRCS=	if_nve.c if_nvereg.h miidevs.h \
-	device_if.h bus_if.h pci_if.h miibus_if.h \
-	os+%DIKED-nve.h
-OBJS+=	nvenetlib.o
-WERROR=
-
-CLEANFILES+=	nvenetlib.o os+%DIKED-nve.h
-nvenetlib.o: ${.CURDIR}/../../contrib/dev/nve/${MACHINE}/${.TARGET}.bz2.uu
-	uudecode < ${.CURDIR}/../../contrib/dev/nve/${MACHINE}/${.TARGET}.bz2.uu
-	bzip2 -df ${.TARGET}.bz2
-
-os+%DIKED-nve.h: ${.CURDIR}/../../contrib/dev/nve/os.h
-	sed -e 's/^.*#include.*phy\.h.*$$//' ${.OODATE} > ${.TARGET}
-
-.include <bsd.kmod.mk>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 1036 bytes
Desc: OpenPGP digital signature
URL: <http://lists.freebsd.org/pipermail/freebsd-stable/attachments/20140204/dbc6b7b7/attachment-0001.sig>


More information about the freebsd-stable mailing list