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
-bl2envbuoZ32+6l7UqAC3Z7vc94Or3e71IAA8D6+8zp9Pb2cpz25cy8899HK75hzz68d9fKfZ93z
-u9ze3vrw+hRSIffLl3Nd7OXbuFTV73dzoyVHba69t98z7b77dV6ejnXt729noPPc869rl6u9bvrd
-ffF7bw3nmPHsD3tY7dmR7Fdua3ZezWgE73uldi+7wLkRt6H3vd76++9o+3ci3rr2zNN6uK++CPvR
-5B4YaEQmgATTRoGgIwBMENM0TTBMRiTGk2jRTyYmAmRo0xNMKaMmNMEnpPRpPQp+jUaeUaeowyaU
-/VPGIU9NPTU2VPJtR6npHpHqeSZNPFHpqINCE0ACAmmEGhoTJppiYTTVPDQU2CMGpk1T2U2ptQ9U
-8mRpqPNJPU/VPGiniCeTJp6p+qG1PTQ0gemgYUbZTSH6ptE9I08jQj1DCepoDQBpo0EpoQhBGkw0
-Jqep6mJMo/SYTaJPU9I8mp6T02qeKe1T8jSPIeqn6p7VNpqaeptTNTR6m1PSGj1AB6mj1DaT1DZQ
-HqDRoZGnqHqNG1A9Jo08po0ZAAA0AZAk0kSImmiYUbQmgp4NJ6myp7TUyNTDU/TU1PRqHpPU9TGi
-aepkaZG1NPUPTUB5TQPSepoyaBpkAAAaA00BoaHpAHqaaAAAAyAAAYpCT1NPVR7VDNJ5T1PRpPU2
-o9Awp40po8jKB6mQ09T0mI9QPUNqbKaPU9TR6TyaJ6gA9T1HqPKD01G1NqPU9R6mTRppozUBkzU9
-J6m1D0RkGnqNBp6h6mj1D0jGoJEiEAJoATCnpiZTwk8pg1MEU9ppqbJpiKeTZJ6Knp5KftJtGgp+
-VPR6VPeqn6ps01TZT0aTzUT9T0pnkk2aTU08pp+qaAeU09qmBNlNPCRp6aZCGjTQ9Q0DQd8ssO5h
-vAz8/gqHlJiqlbkKQeWmWEv4AKp5389QWX755RUTliUQIlUUBJzvOWQ/dBn0FK7qi9BFQVGcLDJS
-qpnSQsek+Gia16cd8J1fFMT1vNdzKgSAkJwfPE5cxTXvelz7OlHJONaHhLUDaNTb7ne7/Uj6q11n
-J5Xt/c/mcvt+4gu72wBTB2mXdUNvKDovb83x0rZj8qfvmZG+OXW0J9WzWsmU932Wr2sGzpLDz+ai
-vyKRTxwZxALmGlECIEVBh8i5tpIDBaHG9rhH0v69LptFABhromioVy+CwCrSMw9u7V29cQh+RxCI
-vZ72EKc1E9ccLq5pmEN2y+VfjNUhQlIVXNotbVIYXielSdFGFqYP+HlBgefd/ueZIwU0AOp7rgeX
-yaiHMUvMm0oz5oWz+vie1BtV8ztPR5eg0nhaTaz7HKxGV6+uoJtjXp71DX0W5tMPkcpu5PYfh0Lp
-vxf44Lf29D2+VewONmuR4fybju+dhWnW1f5GJuzyQ/rYN1rFr+fKDtFkH8Fw4MQ/ko+b8asbkjhO
-3mIQ9NC99pnCy91a8Z01pIQfWVJ38n1WxMDLp1Ox80F6yptw+Tt37aJ2PK9HCFLZXLI3HMQZNfYn
-A6oeBbd/qGJfEb88pBh+tpVDKeBltS/jt+5n/ZzylBaQpVThO7lX3Xw0Q2XqjCkQkRAh1KsfSsKu
-JVW26T1Hma56furzz0Hor0CHTaj7z0/xNfYdHOyto++xaleYd+kppOdAsnqffmKunXct0l6az879
-d899brk8KPxydedr5Shadjkcbxau7+yL2SVLREO9bQ42XLl0L6FhK+6cenSdawaaz6nNaqynMlhb
-mAsQCAB8zMuz+Sz5loV2rmMRGC0X07bxMW7ecebtb+sMlThXDdNrggix/7f8ey6vL0vcfhrXlSaU
-UcQZavvba49rmZoeeFwwSgRiNzm4+hUk1q6fa1KVue1HZp69cFewoPReX619HmjnqIN6CfYqHwAn
-mq36HzS0CGmTOIFBCH0fT/n/l5svL7XrVToOra/T/M+JXRwXO8uuIdVwYZlqjGELusof0HvbQ1jY
-QwPt2mBGwbU68XvcCkwAh4vC0g8smFvObWu87XUMqm/gVkKuHIILqVra+pt71fTXiW/+9vJwcanx
-v04ECBNoEDNT/aZpsRqJiERK5ANjF/0GVq/uep9UNxSBmZhwUrdDFqzK8dwzprdVeOW2arrFtYdY
-7jwv+pWrwMpzqX46CRIMjKgVMDcUPQ+xw8vtB90ZTaEwuRSGVWwgK6MDW5plzu65gvxD4gvan0Id
-C2B2yeiVgYwFnqTxwsJ+Vg0S1kCJZm2gQgESDCGklXJs1ZGr9N3+4vodAeSOfBL+tN40laEGRgx0
-MmTzZOZJKtaKX7/s0r169myta1KM2mkozxxTL5Lplzc3lkz0hdBkxLBatPIvPWO1iNwivmYeQMgM
-iFJSfv+z6jOtIceXPKFtsg3JD6z4Pr/XfvfvnL2fMsenwU2K2qMFEbNAChQr06oKBeQlEQ2eTiWv
-dlvMaHKRNHAIftC3dD6rvG9Btki99jnUDrlN717nWsGxTbZW+E3j3G+ejllEYcXBypJVRSiPnU73
-jz0UMJ6thyZEeV55KiqGXLgovV1XYu7tM+WsrBQmmvorZiTwPDNK6aIj9VbrCQGaIgIGI4devEi+
-lj1wzf+K+gh18+LsP4Pm0RW9VPn1cF9csU3SN1ZE6Lomoo1AyVnTzq+lU8hQaQMGTwgq+CzuqTd2
-ux3fT9Pv9Pcw4cG7jbEbBpIhoUFFI7KhR6JyRITA601KY4KYpj6dG6o6Gn8zPu8zl9vWvFu68ufJ
-oShobbUxsxeqYqz0dvli8uej5+r5MBFdgG3FmIK2U943E3S3Mb50LaQKohj4qYaxkad3yaadVA99
-4oST2mneAm+4PpRYlyjkRvMeZq4ybRRrLF+uvnRM5FiX/LHLuLaPvn5OxyIrVPrQUWn3dGShTOfU
-iIilGQXJJXIQjFmSix7Kv/c7Q/90bIbcyzy0ztC0+DjlW3KWMYBDQNAwhgz9i6NV9DWe2d9ajjKX
-L8HJBO7DpkqJrlEKkNfGdEKU+kn3E0Ve6MMCaoCyHQ5J7Tgg4pF1OMx8KQ7zLHHr9Hopqwl8bipS
-CBoTD3sScbQsAkaWSgoGDUEGfzKckybR8WlrOLRDOWV9I0tagzMsPS+l9Nhvm9WsO5c/ObCUNMiF
-wJzXXUbfoZnSQxDkRaCKwzIijz3cCab02G+IbyDrdC2aTXFHKlKlHeFXzF3lbKLjyp85BZMYIZms
-FROaKYJBXAmBIaQTfFcpBkq2S0sBUlwGPUCzCkha9Dvi61SutyQ6zjLTQx1wz5deUGLCKoCYIdqo
-JW89t3OrJBeXxz17sXtg7KtcS43xeqzA5JmW2qa1INmkOTjNs6vlevo0pst4legQz3uBpToppX5G
-8Em+RcsNmpkiWzWVV0lutaLxvB2wlTilVRVVTFbwj49P7eqp2eOjNFyXs8+1xPEd6pRKKWlTpyZg
-SqxWJXmWvNO3ve5S9PwLy2Gy0FUtqPIuctENdd0Lu1iqdKcmavFybGs6Ccxkoa0vnZMYbHWW5Q4z
-WcZOW+KbDh21t3ky3WjnsvCadoI+p5YcM0pllYIqxQFioJTWGmalTNctHLjM42crthpszg0YpNmp
-scM1LarlrbbS2oILNsM2b3mYXndzV27QtsxdQo4+f03G+NcF6a5MFycTfEceHlMRD5BAHRdlCgK9
-qg0Gqq+3YtvYp7PGORnmZh7BMu22zsC7iTUxWMXzbLko6s6eOMCV9lV+znZUFrBe0+DQn7Ck36Pt
-+M+CFKJ9RGBTxzhNRLcMzCjMzXWta0qmCEw9E1OqclhVPSWuLqZOauDUmsNu9BWMywVlrdnMpTbH
-ZYSqkV6COP891OlUvRe78OHYRg5KBbZgLsi2xztTRp/hwlNn5/VtyLNqFSNNhkvhNFC6XTPpv26z
-S4jArX0k9QhdzmGnLj46Czz/d6zvLNsVmLysHV83mwm6HtoOuqZSODJ7llEPV+pvqlO35BgVx+/M
-qekuneoacOG4j7aHQki6rwqViAiUOWl4RRQxtdNTjT21Q4vCfDJisSys99R5RF0RDtJkmB7DtCgc
-5n+Pf8jnO899S6p4fadsq5sw3u+xOx7ek477gwSqdRV8ZByO8zOz4brj32ujMIAVk3Bo3npc/u6g
-Pfx8lr1mo9H6v6UqLFkH9D4cEmkkP+pAAQMSbGkAjQYXmrNi19y6Rdl6lOrV9v93AsdG1nMAAuRA
-fVPUxSYcugEi9kWC+YLnbpx3DRXGJst2IFDE2C6TR/bslgyrf1+FUs5toRaa8Rwzvq7jZYCDzWAN
-g+k4G0eUwqa3TQBevKwsLn393UJHQybiECVUkiJ30N5YKBznPg73g7nHs2lYohAGsNI8lgWXQxfU
-/7TXIOI39r3ZU6I8JhDUgeBCHgYB60HxELBA8NDgVCQ2hSYk5MSqyIngyxvtQhqPKYpNuwFFarQz
-HIa+Xlq1xsyimty8TSwqG3YjrWSgv65tSZ+ZysNclgxPJu1EpqDOsIH0QgAZgFLP8OXOA76uoZsW
-oRnpOrPE1qZaq2wnWzjCyNOkZtCgdnxe1xdG0iyKKr6C3lSsPasCTzGB4HSDTSsZ0dXDr4UowaKz
-QLT049VoRjs4+sT/RnQ0dLm6+zvNye9TDl7H4OvHQ74wHs0goRe4nNJ6QVknxvR06ZgqGQzgNBD3
-+Njb+ZQPdcX6hWJD4L4k6VUMLI2PgNEJpeuWW+VwRCditSlWYYbRJi3BO+GBAP6ySdtCBWQPAySL
-Ah6xDmkKwFIqiwk+XZAOb0IN6MxgZbCAYyEDfOixSQKMFgRGE8RDmwgbSZEJKKivpWkRWT3jPU7p
-82zYkUREZ6NkKefQrIoKBOhqSAsFiMgj7IQk7AM9Q767AFhJpJ1sJ6pgWIxIc0h20neYQ+AMJPt2
-ST2rDpQJDhFhWALAOQkxIoAHSwNJoQ+wZITHcSoqgjJ1DIqrBRYiQ8+1fGYVD17WThhUFIIiqEKw
-PB8GkNMgdKSChd07SQ0M0govcZijIjDoiSaYTwmsWSTqQj1lgiQY/m2ClGEFIaf/vyT9UGQ0xZ2W
-FYxUBSPh0rvg4FyaRRQk62RZJPPQAqBAxUUnvLQ8e0FhBehlE+L26eERkOc+AvCa3/cMlRncmXwA
-bW+U+xDQnmOqPHcCrrDFiCINkhkPmWrmLGhblR0FjtboGNkKtl4s1hYWIH3jM1OA86nC/T6klYce
-y+zi+Vhvhj8Yh91LnuJLJL/aX3+Plnf32/H0f4Lu41R+xe2dZ0Z09/V6asi7/g42GJiWmSjTQHpf
-aTpNFTs3NA+gB02o5L0kBW2r6vS9OehgBoSSVDv7k0xB5NrsW4sU5BgklB/PRslGjAv3z/p7aGBM
-hoV1a50zlAeMMWv6FiwhzDM15sm/Y27dz+n8Wp/H4/45Ubyy9PXeFtvnpufz/kluf+7dykWoVN+l
-JVXffs96kpMjVF3y6Jt0pHBzzuBXWVn7N06/e5bTb1zKNzeuz3oMg6/S7DWDm/VpbPucqKCIFtOb
-TTXtlK+F9W7oKGJMh7qxVjPz2lMYFS6xN66ap2fS1zDkf7fFlcnk32T7ibpL+Pfzd7NW0ePe5G36
-apIOBwELB8rd7yvcxvYY+HEZwdzurzC083Od4j+EMSUqJkCIF3mkgLmtfE1oP1mELpkAC3ObAhfR
-GFEQKmqONPvn+RqVvVVWcVEJIVsfBPf3pfK+OW+/8/6xMn5C/cRDUqzvW4lhBvNRrbQBkmIAWIAl
-94FSRnRNcw1uUHhDxgKD0Mdxrfiy+YbGy8YbMqXQt1GvIq4NgJttlwTNpzBgwVwYMJ68FfMPgvLG
-k167PDteG12+suuBiazA+uNlcKxjr7/ufrp3hZzDqPOtN1yOd7a+j7O+tMVyuNGzG5G4F0Lsage8
-HRWfy4d7H/jiXlfYRbHNqGzMIMEYz5fwIigo1Y9PBbp95lZa2lo1FM20EPRtrtSoPIh4Gt+Wg0+g
-lQ0RSoBgyPlb2XhmJfruf+afOQxA+7llouSL3UgGkhCH8iGolvHpxWSUnFTW2dYdGvNQyov+i8yu
-yvj5EiRZytnMyJFlZYyzsbGzkSJEiD2tVHrrKReyJ+e2pYcwKqXrlHQIKMwr2rXBQ2aMtQ8pHuCy
-XsKiOFqFWgzesR2xvnAqXjmDErXAFpM3VvJ293cUYoP5lnC15MAvAKBgUFGa6VWPe07/VVvra9+v
-8fZqmfVtkmXfnSWi3ln+UpSF6JVLKlAJMfbop+Ceyj1friZ4u1WV2SS0Ek0P3vUI72KP9RMRNo+6
-xJG00JecwX79VeQoGv8f7f11l2lulCDAIkgWjxhVJkbCz87OmHBb8QyDsPnPkWu6jW5eZrtbmul9
-/f+6ojGG4EbHY444499A+dUF0penYOmG50BXG5GMNQboaggY/iwZOFfT97rcNn41F9zuNaJejC5k
-JjxOWIsws91wafs3+B59vSz8/PT2azWD8/z7zaXveywliKU3uD2qpaZRppcwFTQDzMbjhX7gtxon
-RB4ZV87NvHD8b7HdkYzUn9k+QWNA4IWjkvoyNSlVAbMmjI5DLnXbmTQGdnz5+20MfF1mLtK+vg4y
-TfxLPD2RyzBCWj0WozedcDCcEk+kL0f3sLFg7TDwLeDY2zEiRIuBZWVlZWVhZWWMrRDk8WJ4Axmq
-/i9Bhxcm1QBxWICNyU7O2KqV9R2MR7TgPH1gQNy/RHw9KJ6/T4EMFo5RYeecEDcfvhwNL01HOUQF
-LWMeiU7yRVwO1cuKT/OfLUY9mjscj+XZm8IFX5e5t7+tsF9iwnsxt4kDGTIEYBx5ImQGwIAQooZj
-SXOAZIDPAY6mEWlrbxySzv1eRCwJPMVwdgzNK1Q9/IgZfFBbL4K7ln6MgGe/NYFmo6oBKJ6vhxBy
-oqv0/FIceeMJdlqAQlpsmu7Pbdxc4OJ12LHFVei4qqwz7durXr9kb79r/S5iXeHfX3W43HuDHphL
-c3ltnqETG4PSemJQNH1d3NUdAbwwDfxAhSEFmY3/f+t+30M83d+O2QU3s/N/UKRfQZShNhoLnBfk
-H+8Nv+JY7HTxV124njwzdUZff/dYxhmkYQzBap4Kx5Nc8HqCgBmt4XEj9Y8a3+2pcIvyfv9OiGnr
-Bboe4c5AzA3zNKgALFl+YgG8aUIB4U11WLJMGbQ7DABT20LHhSiBBZ6QNAoIX0/X+8otm3wD2J3Z
-g7eIQpmZjuBRhedgdk8P4JIbpiLZH1ih64P03GxHqSkB03yLtZF+A4aiDUum2OulNTlB7vewAjbD
-xjZHhea0T5XO06tHXwcz/JXgL5BZybhMntrECMXJqPIK29HSJBUQEnnayVEvjwIEN5Pnf8ba58Ui
-iwIsMilwIW42j1i9pLWzp9Fh93NeBoWnH+QomBD29VODWCfDkIg2p12SCjF67CQYuUYGJIWOUwNl
-kc7Ma+O3MtseZlxGKZ7zqSu5/DypXr3UMrEGuYHV16uwrOQpDBJCBXSbDHDHAH+sxRGWAQc4Cqqs
-c4IuuPu08rJsDZ3u77Vnk+SsAZ9R8//5+FQbyL+q34/y7XWBzE4W9gugXrRYqsBBzc3uwwsZUyIk
-lyMnE2ZLAUvUBkEQEzRu0URW0hwCu9ywUid7ng5fA329vndnpNrr91NsjhVCBx4fEVoPj3isMYim
-YIhMHZbG0UNreIJ2z530l4NuA5/wGLn3gpGGGgkStVgWkiotwNpLoe/gMH3P4D/Amt4P8NpfZaEe
-3GFtw/bjP5wzw5fWmb3gkj3xyxhILHalgXR7cKLM1ewteVd/hJ5K2VV56zaa9snezO1NQLxEQhRC
-2ZU1FDlWbyiND9GX2F5iGXgNz2UEflEW7OkSkzOQ0y9ARKQpQWY+E0cyzAYyzFuE1V1cfAbA81Eh
-0hwkZnZRrWDJfz2IDpGoFqAzRicGOCWrx7PWOkUYx/5B2w2TmYO0LzR4B+jJfBLU5vSFJo3e+vNu
-0wm4RXI8qSDE61WgMtMXLcF6BsUeMOOmZn1HPpiQqVL20L+hJ0PM8OWtNErJQHKtYlfm4gIIcoS4
-rOAyrodAv+Z8P/h9TJrB/fxUfLgLQXPA0udz45ukjTfOMyCQyH2js0tss8OOveUP1muInmcfsSQY
-vzaO+49BUWKNiaOYapAHIBoJ+qXDSmcopherE5KGxtiX22HKrnqldExINpng3oBJb7E7HAOt48zt
-GgeP3SvDAPhGBnG02Jjix0K3sGzTBELCAZeVNM/5gaIdM5wHPmKE55U+Ys6RoTF0b+ZhgWnSNLjB
-iTsmyg8EXgKH9x5PGHPzGLXa67XuqBe3QqB234ridP1vuvS6+IznbM7dOx8d6vldUtre3aGkfeN4
-TXzFK/zOdF9az67f1+V+selPutVOym6N3hL4C9ugy4+5rNllWJeTSigfQyzKs9L3khMPoMmdz2ub
-6bXsPA91ihp7GrmqXL6p8XvU28MzsBxIxciPNWowqmjhksdIeQnhg6Bg2cLQQufu0GTDqjJ4SMkq
-ZTMLeUEUKH2FZaxXFrF/IPjXlq86+8qA8b8GnFV3VCYoStLohVYO4cYdf71SemaxOUSIYgtqf+Uw
-L3H0POWRFsulSpdrduFViF5J9TguQOMgahpGMeZQoIn7I9+GxVZJ+CVRHhBKyksxTz1iMQMgoiDo
-HQI47EHr7SlinNO+kUQIpc6iA/Aox4Oeom68UdsMJwNM6JaBo/Rt9Bxke6d7tnTads6cuTO5UyP9
-pBJbiGPiWK050GWhGkAQbgdxvp+aDiuzxvJrk0faohlx9MkLy2luWLsx+2usUbLQHxeNOS82/GFb
-i8O0PHxoEsRhu+nBd6lg+JdIpCkaYpMOAYfdogBZBgEhDomOIoe2oZj81cVc9LjC/7W6yedu7ufZ
-ZZwGWa5mJF8YbYbx7iUHEIV5ggUOVGa0jJcupVSVz6kUrsJmc0rTihJEV+pYyVuBhT2yvex6hzoH
-8v4MylKg+B44kkj+EQ6Rc7iqXElaQrEiZ6FO9ve2tdeHIcvCeGT80kWhnIS1xt58fYM98lubCgmQ
-0P3U0Wt7+B6c4gE8gMEBDsrDYs6628E1BlpCB13f2/LNhb6oULYwlxqFECrDKcMAHcVh9f27Ickm
-rKevE6HTDuJw8cX0h37O9GcbqF55rZRLGGXN4M0q27NX8VB6A2uAyGmzh8PlN9VdsDxfqsZL2oPn
-5vGzd5J+4XwsNAh+xHpVsZtHzqztqpRpQ0pYT1JZK277CejRdgFHTrMD79v+PrI8Ed18AaA17Mgv
-BW4oBeI6V4IcyYEuBoMjBqMpGebF8wDa3LlFhTTVPb1oNa3jH2I1oht2Pp7OQ0r53pb6BUnJv0no
-KejEPO9H8t43szfX5dnHDSfyfOpzZxWnCBWeey0O17LKpTHV1tzeFOA9GxSyQOm8O+8hK69JPjhC
-QGQhMB+R5TVqkHK/5wc/v4XHUM6J0TnMMw0+5sND1Yta7e9gMnkR7yLdSoJfhxbPZVwNvKjQeCM0
-O63H1lLGPqXgLhArRggRg5AL6ru/Hfyta8K+sZ5DBSTyU2hz3Q0iPi+NQxtqlOTRiYYdTE6JQb21
-WTHJ8iuXSwB67VgsTrV3uX6S3xvoOTAH7WFlKHAvpMaK4YV3jFIMgTJ5MTgbzPrdzN08pAOGDoIw
-ytjQsstfnUoCxe/065rOfTbNMyiURsHqPtA+61Rzw9LouNwdQYJkgiIAeZzSE+iXEUglCp8EKqiy
-dU/jU+MgxlbQgSAxzkMsLAZoW67wHUOszeBAypvXLpNdFdBkPSnAyy41jA4nCqK4ZsHIUZD5kYQ+
-mQD3LDtYrwLNe7NmuNOHGXi2YJEEt2YQJijtOI6MuNTaSDN6wMyFAEZFkCfZJJCcsoSUZdBeQJLW
-wyUTMprVM0zArmAVlZCqHo7MEvENRBImFMSTZVmgq1VBKpSIXCZwcbDVullNMXgN7mUciKIkTISq
-wkHj2JfNPgfOnTykh0cUEYwwoXp6DFyXp1hqPBeGAVK5xo1heCw2pNnBW8aUgnF2GapCpKJvNYRE
-4SgqjFXIGQDxWIlx2mAco7SRVNWjkyqDJdk1no/cfE6CaIodPLnhTpwuROllk1k0OCJrTM0aZvWs
-dYgLwDLaVZS6wzMYYmGsUzKTK6G3DTMLA7vKzbd1SFzkOh5mrjotCqyiom0rnGhNW1oZhFglApkW
-ZbrWJIcM5oHJZq0SXjjXLLpm9bXaZt2zqYUSDyLNnENaTMORc3rQjs03KomCXa0s4nFL1hTUpNaU
-qiakvFU0QiGmIKzRqId37DsNEi5lVWHizQ8py5SpAvE0zWSU0UITCKQohqpmM+v0nBm1TQHTaabM
-jK/SOxOiXX0ph5dC68OlPb8+RrZhYbpbDjbICiwRiMDcMbHNaMNZkmknOwDeuDgDjbrou0yIwt5+
-uecmMNbCF4ehJ0cNDgQD4R18TiHAsrvq1DSLplYD1NDZqnT0zEWEmCBs2+h/JvjQ3O0YoQ00uSz7
-bXGXjDIVADQjKVYQpfDuB9aynCG8eS7lwO0LxbvwG1FBrELjmVOolggDwKm/mAIanzxT10DL8y7o
-iAge+WCggdYW2kVmiLu3RY9J4d15LNajvTlWf/1VAq2a9zINlh2owNhjHE8fcTBu2MSGSCo70ZMd
-0K/S6WNXCtfJjrBNjP6zkvXdTB54X+nsXMaNvvvYaXpChlbWXzkHBxW1DOcfSgvRIO4bbIvLQF70
-1xw7rj+YOOppaOiqKmjEGygvUSnOue7qm2xy4J5UgHt/b907kfVxs8ZJ7ZCesVgqhfBYcIfvvg8j
-8vv5M6zGK9lB3cYvjuaY9znv7vY3sHjDkmE8E8YyIzi1Wzw5YqAa4xrmMLANyY3vUSUscz0xq8QY
-1dOcStUZcMLx1O0ObPPInimSYlMeJNSZi/ebnY5lFJTEMW0whpWHDbSY0BydtEjBmqxsIrP99q8n
-LZF0pSxVtYSxJ1JxmfBMfFkxuEnTQp+8npuhBgJta9/0vhOx72zsJDWT+/f8lHpaedrOcjTRWEeD
-Rz8OVQqLxWu2U0au6Mw4lljKxUXqgjjJhPMvHVvmrhWwiuW3YMabChaPCqb/rrB+0W4+ww0wJL44
-yw6/xOvbw6qAr44oKUa33h8tWZejG8RYfMF6pt3dFWFBgyffYMw4O7wSFuwK4AHK9bRqbVDwOoGr
-jeM9rnSnYsZOh2tFj3MRxD2xsWOQdy0u5PEiUoRgknA47pwR4ZMmyhuIRkOGriQBLc4t3/WTMVh4
-jbRJoML0z3RJb4woMifFA+QeBEW94B+8bxqrgyJrFfrYoDwxeOENFpYTnEVxaR2lTkNucm7k3PcF
-ObNfClYqFourKrI7v9fI6PsMbhCfNPK0gnOZ/GQtTFJm2ZLGj91r9yyexqVFCNaXtE2OG2TCkAWb
-Hx1f26ihYgTjciqu6SLHiSePCOhzpLIC7+YSevaCz+/oHA9XOd2p2p2ff0s4fhtyyW6lMXqL/SFf
-pfN4cdG1g8Z/5StyW0MzUFDVcHfhpF5CBVhAHMkT7t96oPT41Ws7GbSQyJ4dukXRQIlgS4GK4DoJ
-xIsV8BrGUCwig7gUJbNn72RXlMA7l6D9hk7A+UNq4APvjPF+N6Fsq6BEWv5dtbgPCmnMzHAESuEh
-nXMa0b7hBUfUXtV187PM66+w3TFnTilk3psRhpc/VZn6Wi9mpFUQ3Jgal+A8DXua2Q6nIhcAyw1F
-rLzThwcepbyWfBd/Z7vJ8zeTe/Mq4f62ONZ6rm0B498BzlLfIr7M1hO+huVLMM4oop5Iy+HfISzm
-ACWWcBNb7MeflYjrOuppuBGQB49T8JgL9wWXqAyiYWZp5xgQXKl75U31PMoNm3ue6jgRIlnHMIAa
-lEagoH6AeBj8ehgzxotX0Apkjw0AvhVH9M5W9PVvz8Cn9va+7U7Dvn+/saa9/vzPz5W2dTJOylTE
-0YCEUwslmXwGFmYWq6rpydGeDXuPD1t1826GZxtcwC3fphWmTGyJEpSiHKA02QMjZgKkU3JPjeT7
-g1pm76bt+03okkds3OnVQwIoxCcl/OY4J0MbjeAn5GpfH7QPimEeTkYrSsQ1z1+5N20OvuBYjAcD
-yxJTMaZIbIaLH0oPIGSIZ6NPaNRhmsZvCBsBMEeR7FBQ7LFDwOPsKUtuugZiSWaA0Idlg2Jr2RLE
-ZCCMhCZCBKMKMkiM9iZJ5STWoITp54ENPkBZt8QSv4wGySTYQ+RCG5JoTDKHCwkw3WuW65DPQzQ1
-mGV5QH0KnWanWnYUOxTlF45zl0HWZtOCopzglF3ZRnGbcmw20t2dC75cuXITbygOCupxBsNs3Ddj
-CGpZKMyMqmeQbOZyA4gjBVxorNFYmQoZepqkFJBCOl6Gze4CAWiR774wbC4OxyBspmfVI7lK8u56
-5GsrvZwSWAfGmUFBDGwKNiBT4e8mdfieZ3g6uOjlZRCvfHEUcoNW1KrW0oLBOnxeXLovhmjxdGvX
-X2nmQ5QSqaRMGipyOn6qAWOTyOuwraSWQ+Rq3D+LT2fe3xYAHWlktFFRYosHq6tAa0whTF9Z974o
-ZnvbmCVFPsdWR8nuvUl0svFzC3IxfHowK2ZENH7OGlDSlCEeE5I2OxwylpLLC69x0f/N4NoK3AIf
-Bi5M9Hc2KFMXhCRcD4Mg7v778vA327yS+FaO6/9Zv2NK6uCfFHu0Tcx9bo88tj0enkefAlSmJpAW
-LE0tzz/W82T+TD8Lb+uKN/DEh4Kl9YA1HPPQgTxlOvJflOk+bDOfgPBLdGB80dUNrPXpS0RfnaYs
-QMaBsUkxEq3M5N2XIf9LyiaXXs5Wzsy+JdyMM3xr2/s1IQQx/v+Uo3Revv8i4nqRMnXCSGLD4Xjj
-sfZotI4apGLCOYMylQYvx86mo9b6fNLOyUW9sghh4rHs7veZARwoA8xchm9rxQk3gm+VcZjWLMA2
-gd+Z9ZVJIfHBM/0ENrjx3Emo3RP84gkb6PDkpM0ebjHNvGvlPl/MwuGjLF2Z1soGmwxjDx7etzpc
-ab6SczeRFGDmMEQgMXWzIAFshMz6KeJOWuojA89xnNwVFWd/QJ09Yya21MabBvWDetC2lLJHtUYF
-EBkbuz0ZekmPEKKZ0apEGDGti1VPVe4QjpNJaHgwhycaPqamqaeLhWnuSYEcvCNSAvJeXrp5866w
-hVNRJvCpQw4LxgR0eEEiiDGaoV/BNESQt80QmAfjaZAYIG2XUWF9gaukVZrExQwMuGRjmVKokMcD
-hqkhIUu+7tAKvo4eiaHtauqT1FkcLRuYF45efekGEkHnafXlzVqkE2Pp1SQ5ceSI6rhEysYJWRuz
-z+r7NDodX8G0+i0r7/+uOjZcQ5aYCEhgIiBBHNRg0Ioq0IwEArPBfrnxvD4Pszxufn9n4vp+zzg2
-1IdPY+eDWiyZ9PUKGKHLiWs6EYutEz6PHq1fXwN8GQc3f8TqUYXD4hCWUydqQ34w0s5bBR2mN7a8
-qXz/xdZ7vua3o4sDvYgiHFx/su2A77Pq3+qo8d2hUi9SXs8hxI3Ic744Xp4h/WeJHtvqYhNroO7z
-zbysI+ztt8zfBjXhIuyxe5W8lRa0dOv/JkLsQzzsD19k3XoE8sL4m0MTSb50HYSojGJIlZSLBVFF
-kUigpAjhl+d5R+b8i8Vie44QgMPTvVLgYVYtlgZ3IJFf4ffdxVYHzPsZ9uIqnn0oqowWRF937r23
-f+2OOIwVYNg2vKrSkL6IgO/9IOA2+o5hhZnsGxofx/rfYzff5HBa07gBgUwkKsvAKaEgcA0lmcQG
-+4Y244OOkarhz66qXGPMrXWW8r5JthYt6Be60sVweWeQg7BF3mqnoHeo5CME8v1655968WqVgokl
-CpZZOs5mNgEG7Lmxa/QxjaUu1H4PStyKA9rqbfGta9RaBadr/3Ex6aJoEQUBVIrQCKCu9geQmh3R
-73aCfbDPniERhN4FJyHshkbr9L9of0pYXp4G9Pitpr2+DUVbAfJgwRGYYSY3jbbLeyiSkHvigM3W
-VbemRk9vlniurrGuaDCUR1cPb62LbpKw+QD7EUR+EOG2t3hdeSoBm9Ko3SIKYS32YTYHjyGp4sew
-dMnM8oNPB2b2AKfAuMsZDC9Z5fTJzh0HSsz0Id4/HC9wslFHBrRqo+E/dBtysiehYsrOWFRbx4xZ
-waNG+iRB8FkAZj0R1mdQeiMdnlfU/uDvb604fgxVRH6hqrH3KUQ76BYTVvgOw667szdJhvc95MYV
-DttFdl0iyY8foU5IsytTjSVnxfpYaIFog2hd3jrqOCE6J1AKkGEKtIr7F9zk6bt7kCBS33aBZjSA
-IrlQAxo9uWv4hATucXr8i4Xs8gt6LwmEKZlnDec2AS7HeOzhD+8Cc8094ItKlug7k43cZCpNAOec
-gi/EFdJluRbCoyuAsWHhJbxWqSjUX0mrUPCAevhPErNtlOxyZoCnHxmZjLKRQzyJn0vk4+EfW++1
-n2h3Qh5X5G2222KClaMWNjmZRqmeGosI3nfAVZeYTxSdc10HnFcz6iOxeAGUZXbOzusEPGk29Ozr
-ovKqZVoTjpzw6tK4i3+Y62mOxzmbTWZH2xXR5QLZCjXo+105TQmSGhCGQxDE0CQKK4DwLvE1/4cz
-Jrb1b8zkF9Hknui2Syc4zM5vFDMbdSkWBkBwgOlWKBm/UWQqCvwSlGpRjbPtorZOVY0dhZ5uyA3b
-2TK6CPGGwkpKxsFqWlsE0NI8Iu1JUNDyiF4h0s1ZuGY2LyWrv6/wNzgtu67fCr2phXYVMqiBjL5L
-c9ejN0qgr1tvf6JnqtSYZpJV66rhWpvq5DdCCG6SQU8ADEpAb/8Q8WrbOd4GcrylaNjVL1mkIyii
-QNPMF8HdikRFQB28sIBVaTlPTIQQaWxeIq0QeIMCzgu+UlUQC5k5F/LimRiw9mDhykCIsJiA4Or2
-dzSh+LLIYDgg3mGEIDpsIYGF3bgLYqsQZLQiXtHvJ4fzPvLMVEjlJxOhxZXrDnu0OJujplwLqDVB
-IIQ1Ed07/RlH0zJEXZIbyE2lNIH/rc18nngXu6w59NPC8882TpC0T5ClEREFEEilaMEVKhUWB2Tj
-vd3u9fR0BDfE/Xm5LSJ9apk/Fr2MWSXoTOUgdOTgjwLYSad3VvJdvsN0YLEAeyarcHPV/wKd/jiB
-iW0PWDC8ry52YOx7Wz/ZK3Xts1LO9FgMr799whSuNDLMEDTY+VewjZCV+YWNYwAZgnmeGeToSAFs
-Z453uE5RKcTD4T0IXKgDCj0xLeLJXZKGajVD6/D8Kmabeq4ezpxJpd/BwaNeXSpxivB5/zz3WpFV
-sqyVq+qupFX4KHMz8BNRjRT29yW8mcq0EFod0/TRCq8rhKY0E5vj7sHNam01tvk+nljq+DLMgOYN
-uc9XbZOzDaY2u8yJbeYu89nNKD/DYpkN9x3fp2fP7RZLAhmWnGsBiD3lQRVAEYwhi+R0y0AO93tN
-E/HDK4mICD326jvXZS2PauTlxLo9rEKIgWHgLvaMNHJDJO8I2gXXNa3kHYz6NMHod4mpzrx60kaU
-WoWVl8vburY/84WfMYYTDtQFdphNKCr1qwaw9LpsSfAHwKWFrN3yLJP9prgGNaYj5eIZB1eMyFnj
-/LjxycNBIE2SbDPInj6768+85pG8FzZMQswY0aIwUXhGiEhoYMjfEV5N/78z1tZrdzy7rzePHGFv
-UjfzVRaLDsXern4MOvqAJW3yRmvFwXe6h+zbR7zn/i9TkbJ/JGROH+GVp4W6wVdDzu88V1Um946f
-wWm9SpGvrfTvhntBGfHyH8WzLeXG57FFu2abM+xPyR036jaNeaKh/DtNGj89hcCKVAFboSAlq1fE
-1unG19tUykCIEODbfqL/imhXinpkEIZ9A2pIS4Cn6WGZdE0tBNpjvmP/doR434LE3nW/EHVht8fF
-ZwSrxgNh+YMwYclamPdiVAOBpboZcKQgemnFUDXGtQpf7Cp93CieeD/ac5d4yri8nnrD2zDkszAz
-mFuGyBkuJIVx4QrcX3c2JwZoTU/7T2JB6b6simKCdFSg4cCBAkIgUEB41QUpAvtyOviUmg3zj1cd
-IR0mLPJL6cYI26DwkyhCpRynPLj9EN7FDeWMFN0LIgggsFR2FZaaaz7S9syxBlPOMwYMEYT9phc4
-ZfBAoVOrZTEGREp1ZkXWjWuKOmkmJmIhRI6BY6OTJEEW6HfX0bOzjlRJVgZa+RR1vr8NtvsSInj5
-cUEEdwwsWsp35F/B31u3XIIaqr1KcodEGdCey+Q68N77oYfHhImo6bhGE5neYHlNj+LEMvzigQmi
-zw2xz+K/vx8kMvriISu3Y30WPp1kDDxbKCVoTYD3iY9gfXAaHw99sOvrjfhx7UIC9lpUQxpGwAz+
-ODv9AmM0NLkUHWKzCbuBKV4purJBJtL8d8Iejy7dmvCRVqU6gXt4oy2hg6vw0AsVIbVpCRMRSlX8
-keCf2jUfqJm9cPCUzUtjwKtXIcBDqge9Oo6y+u91XW2nVqor4KBbwWLV7Mocqekz0Rx8b8v6c6+z
-7OfE9xfvAtjVtQjPr7jBUTLSN8pAoIZHqlBUT9nZppkQAB6dDKv4Bo+2vIExxK3ItNDm5lMta8vP
-rdCnl+2AhWDIEQaZCYMeS/q/WU+w5+CGmhGjKLadLdM2t05MYpOf4R3vy3Jtxan+/4eUM6fi8yRX
-JIklDEiswBsAbBeAxtAs/Le9pJjYYrBK34kEetWkHuqWdaWMOkWlRs+1OugZBD9d0UfozQdvU9Xq
-4wDUtOQHgFPbJVh/Htoz55+ZZp2Ifj3OFtRN349KONW+bbkQdXys74fOX5VDkdi/ODOc/Y1nyiZj
-np8/odHZ8SwuUmZYXOWxvmVwrlKvhxvoKOdQnQq2jkoJ7S6WnjCoWEctEYOSqyai1UcJYYZO0nCM
-IY2BJaqC7SrDSsdN48HoEF4rvnXMJZ02jXcvcLjRinFE5FwIr0YOqhCgUErhDyVJ0QDG4/FRb6l6
-5AKaSmbU7fyHjmj2htnd7j+WZ7ZDJ1WowUEEZBEnmnmUoxTIyijqmZERKNUT1tphbClsUpaKRSKI
-nwTeYcgtFjEjEUQUn0Igdh6NmzJ67RhjKXk46sqBt3lQHdKhu70ca1tREbdZLiFlzx80iqa1QxEY
-j41uqWPsH2HHyfsj7n7n4fcmk2FK5yxJGCURoLEJ43j+pDfQGXyxBvAgm4+BJ/9SNUDzGvpqrXi0
-MtDPoGEPfYOH9bpSxHTnv1KsXubnZEjzY4csfx/GrTOo1XJJbob4nTDcmtpvnoKCj5owXxhnY4JQ
-RZzkAxguEPsGZPnDjyGdvgRxtxuM61cpmxrz4gabU6S8UB9rKadVwYDp+nZhhOLMdp7bDF2N9AlV
-2zHaLNo4U4+iMNnynKFfrASJEiKFRqWVAwDznZmFLdU4vMFeWP1/Ni6lcobo3V9MqzEuE91EHYNx
-zXfkGrEQmXhlM4CT1BPqDajE8qM/RfuGP6Kd5HIowvJbdSjB2bivEagpmEMOGEMc3G91ycq+cdFy
-kOar6GFy8G7gfldurCwqE8SZ2xB2Y2zEzK3oke8z7KV3gwCz99G4aSDK7Zwff2cRT5jRx42U+SQ3
-enie97CpYSbR7usJ1ehLAqSVc9CXdMUQHlmHidi/67wQ1KHQ+y3OECI/I6t2iwHANFwzAZCbXmm6
-pxCM3AajQ3nh/vzunZdakm6xQhehCgyIk099XuLG7pRJNCHmuDom3jU5GFc7LXoXLbiCo5jS+kZC
-+9JBYa/O84hbGdj4sxeaY8cbRp1RA1NmP+zIkDPxHBd3dqWdQRlh5QHzsHnf4e9992Pk9/ebCeSL
-VW+1mojIstMHfDK0CfNEGjZDQsHX1x5G+yEy8faCeXBgBmEgoRgFMJm+xllfly25GKM9XRaJFQpG
-DRYpUwajk/lqRn01qWmKQOEU1RmYvDhkjpVFv1LCXoF1ekpmWUyx9X1V25LOIxrAEmZdLkmSa2cX
-B5xQMXiyIzaomxtPXkySRivE/BiuFRGIyKzIXUy/LrU0FlrQGoYqXtndwbMgvPsgbcpRiYaONkV/
-UpNZoprkJUjRcad6JygA+6yTCga08+mizjO6qkkWaG8O7OUkPtp0rOwsScghzY9C6Ui6h8kYivkc
-nxrc/Y0kGRFtpUMucOKMKblgMwS7BWxONIMEZ9Ir2ZLLZddf5+7JQh1vpmSdaL6l7W+jw9Hs3sJd
-XPQU35hTpZF+lfJTaKbhpmwTfCzmZBmnnZliOWtFaqa1QmeJ39fiKT2fcRjkZgDqEus9L8JF+hpQ
-ODMsNNiJmr8/C/PkL1uyxiegur2uKI0Za8Y+7QYdOkP8n8K04Htpbr+HI4zNQGblAM0R4oYKWlCF
-An9x1vWa6meJZ6FMGp8ZMy/SMLjPk/u75j+52cfVunIf8KfcK6t3ZFAQH2R8gS9tofqeDg6kVmyv
-bDBYMbayVUCDLyOQMODjuYAP5ATdrjna72gsrsSI0sMfjqm8reI0rH35hLe9VUHarL/a8jpYK4wM
-R2CDCkn48bIw8FUcPB5VJF9elWDkPA1Oj6K2ntuagpHrz/BTStgvW6Yk1jGjq9iy6ubWBcEDz8Vg
-DvkGRDJeQnGtQgSHWONgbFw2oUIqiBReuYfBlNOnfHEN6PaQiQMACot1qLF/IoxFQ7vpcryLHQ1L
-vGquouMtPGRBCCBpIKYvPkYltdsPVnbLDmH/xKvhDpQ/Z6O6buYQG0nqpvWULYNUCUip4C1VmPZ0
-jLBh20lk2TA8W5vGe98ObkrhoJqu4iFil5PadvTKqd9AmJ7ZfXBghZBleI1ycGOA6FuV2BYu003R
-alsBgfmzFZBvRdPOGqjHZNqGVDZvb0lquDsAcHJ7eCR/ctwZkz58v70jEfBeSvtHZ4oTorIAWDYl
-fXSclvVERLrGTX+3k9q8HRvjIC4YAs7HfzY41JLlwuxDdOo8PhbHumPsPQ/Y8HwVMyJJoQjdSzia
-NdT9blS+HiUn965AemRLyr1CAuDmzhwQjWm4LsZFgZWR3rnYcTIhILiIY3kKzjWWSkZi7k2Vttua
-oYS6RSyp+VbGJBEyiGqxPI+QjzrnzPPwWYb8tpAIhVt9iuEyo5FD2L23/qQR2Pt4OjouYFESO51L
-Euwwm/knq81iKM6mEeaNNz85sDqSWFzB51wzjD84CDdnYfxXIQ8DhXlNYFxoBLgDKEczQJVSJIj8
-DCf3UASyURtlvuKHBTkBg5BCcGUJAfhUIVNE6TrGFEtjmua+tkDaDkD7KbIV0CCsvQW7OnLidoB+
-dSBESWQSlAS1o+GJKZ0accxB9LOItr93yzjoLcXLv+OsPOCxSi+fDD070h7nEdV5lbPkkoOAzAPq
-HUqLIGUwH1PdrFtgtujzWIQ5ISXFeGHcWpmHYcEZH5Tgb4Ks9On6M9iFN/Whf3MhKOzQT5ibIwCi
-Ii4KR6YLlJua5cu4AGjOfMsBsPY0MBjoXJnAaDMe2i1x7WkNPYuDq4QvU73PPD6nElExCSXNzepl
-JJKDPxGteq2eh1pVVe3aqqvKL307afmbedv/R6X4DKGesNGC86zmxLfUQFmmCGnmvxfI/H4VKPzO
-HGj413rTOVPUKtjrUaNoGJM5TPCE2sUclOUIEpYrZ0xjfUaAvfvc9jljwcdkXK+UMLe1CWK0Cvc6
-P9GBgyyWfenqxkOv5fwrpPLZvKau8mXmTbiE6IWThbVwnlWCqXltLVxdSXI3+Jd5TMOUFId9uILD
-DMH4l0rbGYlGsBc+b+JYcQtgLlfATa+QZG2VXjUDlNaoW01plDVZudvfb+47Uq0HxWWXrmIEWuCT
-NA0KEG8/RglqkQWbPvIhpAyQJBLjnCdwBNucIp1lm5e798Uu6Xe7KcMdKfr16oXKsUr08oSQpuI4
-Q8SIw4Z8lRd0at1DztCwwcRHhOjSlfpGNiqy2ZVImUpupM5TJMUAf4mcAw5uDZB4yVQgMzJYlkpQ
-CI7gYSCQsWl0vMNw7pYeLGgYT4fG2UB4wQBV8rxTtp5amD8892awYMNMIQsSRwVXOUhXdb1uKz7V
-w4KiwepDFdoEDrt8Q6WKgFJHNvw25+L58uyV2qWp4Zp8MSxi6OdY0CV1zMWrhCic36L4TX6jk0+l
-/Y+5wrwbdh8oMZbViBcTJxDb840RUq/4cU0/C3+7+S+aPturo+fSpW/Z9mmLFRjQoVLTofINVlLW
-UoVKcXFwzJS0Wig1paHfcBx+1t2jLoMqvbmqNuNtuZgsXuMqL022ceT8WxS9x9amFh2d8j+RN6+p
-11Tteu4mux3uedwTh5lvnT6c+LuTgdiHSPOlVFERE7GsMPoJBKmVnTvAwYIydR43M0anQ07uUkNJ
-sUts3dK1/CLeBu0iQzDLtB+1VFo/h5eRe7KgwVWXcMyYzVzdhj0fb6SlwkuI2IHg32V9c73UybBp
-DuOPcXUiXd1QsJnuQfBpXYWMy33OerzGweBarGjuPqYc66UpNeXcg12Nw7PBLvgFuChlYepk9gby
-jrVBWxAtyuuTHjToKMu2SMGFYGaZo492it+PmXMbLzTOWC0212ycanf6ct8MoFIYdKx+bLo+VtiR
-b090XtSiAbHo5eLlbp0MyFOTZzX3IINzcgxmS1VA4jQEyJJcVbtTPk0FbemODZ6XJTNmqXhdu4Zv
-dreUljWi6CZpGadMhsrUdnE1NU7e9uLlMFAJrHCYJOfvM5FMgjLr3ANvmYqmGDRSG93XI9j4R0TZ
-ICyQ4YQ8cSHV5c6CD2q62BzToX6ecn5r9AZxXzGl6mhMkLRftUWzKzCjcV6xK3wNzLxetOKgEYXv
-eVWLdYuOrGy5ihJISkHTYEBuFJyjBVZ1ptnLnPziLzCfiMR4LBYmFF164w2WvCeS1wH8fp5OHilT
-dOnn+zQETufMqJSfYeiJeUM4TO0YeD7Nbn+toH+UY2NjqixKNS3ua/5eBE8rJjR4cTZzmLRNT8iR
-xUzv9HyB1HER2tUgVk3M6UNk8/c2TdcCjkzkSIN5HFSCVqvxOrH32ZSF8eBeikrQjaanoIkYERII
-HulIC1l0HusgHbqhAHcxTc+edGgPO1BV3aKNWxGjHitQoUuR2B5lzMMx955uHdWuVEmAuZNZgY0V
-CEUhFk3nQyZT1WcJNCMSQUYhw6E1JEQhNn2d93HnE1qPshpWlX/YBXAOHnwaX9GS4Ytx535XRbQV
-F6qGF/eFQsMiiY8RelFuLcTUKE6sw4aD9Kt2pYejJ+pMO5mT2A8q30gld9xxJhUR6OpjiyODSRXT
-ogCRB1rmcSLgQiHnhJcK71wtRAxTfU4y76m+KAoexuwpX9vae8SJu6Rj5xE7ZWqbkB9PCR2b9Orh
-Fsw77X2Er40YE9wYfD7mlUNTKia5XXuQ/hWJmoQjxbkYkwdGZsVcuOKlls/GrNMayvRayXa2iquv
-hXrOtf/Drs37ndEFDAA3hzDQRanpUd5nER82o9eqthn/iOTmw+LoFtu+Ec1xYDgGU684Yh3CbMKt
-8VFmQMc64GhmH4313XafM9In/aJpU93TdicROhvc5MEq7G1x2BaaWJ1IRisnr7T+d8D878UqPgtB
-kl9Wv82/w6V72SWdIrRj8Y8xuknMJ0Kz1wqyxsHgcUS36VFqEcJhkfn+0FewZRXuSK8iHZEWEROG
-5K2hYkGboVH3nZzFXkGUsTeZuOYOTC2RkTjDb44QEv4zqclEi99y+Mquz6NTbCHCYKJ/HrJODYDa
-ifF29SGDSPY+4gLHPB7jtD+Y4M1SQy27OL/pcbvn/G37hXw4w3KltkU+59nte25/b8XtM/8aEHLJ
-wjuxldlRciSWYcctdnOp7afL8Pu1AdsDBMGyZIuXYNNoC6SLqFFzLlIZq40z1Hv6/+nq+LhW7T8D
-CMo4+JZ83S/mK1J6LlcshspfUysoh8uTAcuPNtxzejDeIX69UPPMCAt023DfNpttX8xO8xXwaliJ
-KwzQyHYoHM32xlWPFym9QdotzVOawnfVpBpTn1YUxKUKBiSwaOrOYqJnoZELgkXpLAKdqDye8rC9
-s3oDgpm+GdshEiUGYGSeFMUrjxGDtrRVMQqBAKMiBOT+tfmU3EqFfDReLvlt/L4bTlgTwpHI9mpF
-J70WDTWwUoUcqFC7ZxXnAwfEriQ8lYS+iVE8QSNyzkDv2uCYC43BnCs0NFtJugYTCALO4k6Nznec
-3u/nu1EyQZt9B010I5f3GxoDioUgoTsB1ZPGPtat1dPnjsJ8wavX+53ULfSMVHaRFxT9MV+j6Cex
-3sYMFE+r+yznqWD2umvBRQ9t4HR45qHoMjaRRjcQRsRVsQIQKmHQF/4VITiDHidWZgiLiEAWpmlP
-LsPpuDCwTR8zksyJIximTIy0VGYA6L1B8PlA15luABYF78ly3FL8FFUx+3jUkaNWFUDMXTaJ7I6g
-Gl771ahmTw9KPRkrWiHf9gYTxPjU0eJM9N9EB5Y9JYtrVVZ+DzMW2Mo/L+tNBrRZYm8onfhoxUaE
-hOh3dHMR1/CuytPLRKaUbzkvy17pFl/AvHyZYGwYe+ccT370+RTq6OM7LzZjj9N2tY/oKWPlso/+
-nl7uwNM2krDxkrPrOLM/0394KPZ8L7Hg0fD86zu973/0GuGYdhKA7d6waBYgnBgX1z802ha+15vG
-fxz9E+eYs6vrNle8vURobXnaWHkZvXxS3/7y6iQTGtl2u8hTY8UiLzhHQcOs/sH0O9lU4R4pkEq1
-sf3i2uDG2GaxZB80MOA1mmUiYGHhcHC2+nokcgJGuSigCyMABmgUlizNUB4/uBd118Vckt7FYYxl
-2AofZ1erzON49NJrdc/DdG7RfWvpLXYRtO4jlQ1fQSxRHGdjeQLWjY1kh6H6uxysfBoNrcjgG6bV
-sNnLzOwJbGzmyD/geqhnRBOri73FK+yZtXU35nqcwGMbOhDgoXjHp73bFG+j9jzKN1cye7fymvn3
-bqSTd4Rcgk0KUQoIbM6hmTE6tjy14n1VA/Y1aQtDoe04GbneN6W8aiZfYpiaHF4+WnbzWYT/jFYL
-pNBQtPS7KGDVNCVkyBMoEIZYMKQLbxGi6xsTtMgLDA2meBFs6XE5Qsk7dBQZQQnY1Oe62o6c36t4
-TggdU58m00/U7729xLY50Y2c49YkJkwYViRGskH5P8a+xom3wLYg0KO7ZXnzEqGR+lgsHi4SmxDa
-vYmTVVGKog14b8IdmqeCwX8HnnnlcbtP42MTYeFi39WRAAnsIFaD+cn/rcdfkfbudry+vTv8K5qu
-f+WlY9DDfBbflz2r9HrfVQjzsx7dXUUm8n1ztYvhQ7ENAsacxQiMPfgl7Gr+Ks6DFx1fLVJ0vN9v
-6OT08VJ3+T63z7/N3HE8jF3+Dg7uu28PKZX78fPW15vI+srPwsK2TW2cua+apptrW8DJfwJHU733
-JKoptLHdr8c7D8LmOgq7TfZvLYi9jWgdcgUiADjLhJLPwl76z4B02s5CCScIpyUCICIuxFDB2zYJ
-s0SIZ4M6ahruHqIbl6Rt06HRkoClYAwokbTowKUoCIgkYm0oMmMNJQ6pSQSaWBReQyaJsggjwGSX
-n1CAv8YxT7Eyff2KAIoyB2nQyQnyo9lkJD2JooQnSkIeFOSB2SNoUUiwEWLEFixY9R4f8HpOUnYY
-AbOhpDhToyFiY+kskk6tsvZwR7oTOeQggjNDB6xGn8m6dJJ62Iih2CYG/lWLDCuIj5/k4zufW0tJ
-5sQySTCQBiZDmKkMQgVtoqIttiiT+v7zw+H/F2s4H8xSc4Y3oaK23v2VURWIojDqbytV27Sa1LDi
-27os3opje9eGfRunfJcjci4iy2iqThObvVDbIcsMmFO7cwbCptAuLSsOpMZwzw47dCW0637iMYwC
-cw/3fxqI4BkB5hhuiS58PK4Cx4+zT/hgAc71UArDKx0d5pXcpvb76myEXZVKgHO07fxvN7WQ1+Y2
-ZKVzdT9efaG7Oa+TmTX7/UjtD15109XfGOq5oIK5LI38PscHDwRPr3WG6X9ud/qL0Kvn04cD5uJi
-PLlZTv65C9kwB8D7A/bl+OzUvUICWMgUpUcXLSdaj3+lT6qDLhfecjue+QEwo0AWYZWiIi1IGbIL
-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