Date: Mon, 03 May 2004 21:26:08 +0900 (JST) From: Masahiko KIMOTO <kimoto@ohnolab.org> To: freebsd-amd64@FreeBSD.org Subject: How to use nForce3 internal NIC on FreeBSD 5-CURRENT-AMD64 Message-ID: <20040503.212608.33940060.kimoto@ohnolab.org>
next in thread | raw e-mail | index | archive | help
----Next_Part(Mon_May__3_21_26_08_2004_643)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Hello, all, Now, I can use nForce3 Ethernet on FreeBSD 5-CURRENT-AMD64. ABSTRACT: - ports/net/nvnet is kernel module to use nForce Ethernet Controller. - Driver for Linux-AMD64 is officially available. - FreeBSD-AMD64 doesn't support kernel module currently. - Thus, possibly I can use the driver for AMD64 with static linking. PREPARATION: Obtain two files: nvnet-src-20040108.tar.gz http://www.onthenet.com.au/~q/nvnet/nvnet-src-20040108.tar.gz and Official nForce Drivers for Linux AMD64(1.0.0269) http://download.nvidia.com/XFree86/nforce/1.0-0269/NVIDIA_nforce-1.0-0269.tar.gz Then, extract them in your temporary directory. DRIVER INSTALLATION: Make dir /usr/src/sys/dev/nvnet and collect the following files into the directory. (nvnet-src-20040108.tar.gz): nvnet/src/{if_nv.c, if_nvreg.h} (NVIDIA_nforce-1.0-0269.tar.gz): nforce/nvnet/{basetype.h, os.h, adapter.h, nvnetlib.o, phy.h} And, touch /usr/src/sys/dev/nvnet/nvnetlib.c. At this point, you can see eight files under /usr/src/sys/dev/nvnet. # cd /usr/src/sys/dev/nvnet/ # ls adapter.h if_nv.c nvnetlib.c os.h basetype.h if_nvreg.h nvnetlib.o phy.h Apply the patch(nvnet-amd64-patch.diff attached to this mail) in the directory. # patch -p1 < nvnet-amd64-patch.diff Append the following lines to /usr/src/sys/conf/files.amd64. dev/nvnet/if_nv.c optional nv pci dev/nvnet/nvnetlib.c optional nv pci COMPILING KERNEL: Append a line to your kernel CONFIGFILE. device nv Then, execute 'config CONFIGFILE', move into compilation directory, copy /usr/src/sys/dev/nvnet/nvnetlib.o into the directory (make sure that nvnetlib.o is newer than /usr/src/sys/dev/nvnet/nvnetlib.c). And make depend and make. You can build new kernel with nvnet driver. dmesg is like this. --------------------------------------------------------------------------- Copyright (c) 1992-2004 The FreeBSD Project. Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994 The Regents of the University of California. All rights reserved. FreeBSD 5.2-CURRENT #15: Mon May 3 20:28:10 JST 2004 root@XXXXX:/usr/src/sys/amd64/compile/EIRENE Preloaded elf kernel "/boot/kernel/kernel" at 0xffffffff80788000. Timecounter "i8254" frequency 1193182 Hz quality 0 CPU: AMD Athlon(tm) 64 Processor 3200+ (1994.86-MHz K8-class CPU) Origin = "AuthenticAMD" Id = 0xf48 Stepping = 8 Features=0x78bfbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CLFLUSH,MMX,FXSR,SSE,SSE2> AMD Features=0xe0500800<SYSCALL,NX,MMX+,LM,3DNow!+,3DNow!> real memory = 536805376 (511 MB) avail memory = 508452864 (484 MB) (snip) nv0: <NVIDIA nForce MCP3 Networking Adapter> port 0xb400-0xb407 mem 0xe8000000-0xe8000fff irq 10 at device 5.0 on pci0 nv0: Reserved 0x1000 bytes for rid 0x10 type 3 at 0xe8000000 nv0: Ethernet address 00:30:1b:b3:b8:1d miibus1: <MII bus> on nv0 rlphy0: <RTL8201L 10/100 media interface> on miibus1 rlphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto nv0: Ethernet address: 00:30:1b:b3:b8:1d nv0: [GIANT-LOCKED] --------------------------------------------------------------------------- Enjoy! ----------------------------------------------------------------------------- Masahiko KIMOTO, Ph.D. <kimoto@ohnolab.org> - http://www.ohnolab.org/~kimoto SOUM Corporation. WIDE Project. ----Next_Part(Mon_May__3_21_26_08_2004_643)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="nvnet-amd64-patch.diff" diff -u -r nvnet.orig/basetype.h nvnet/basetype.h --- nvnet.orig/basetype.h Sat Nov 15 07:26:33 2003 +++ nvnet/basetype.h Mon May 3 16:54:18 2004 @@ -19,11 +19,11 @@ typedef unsigned char UCHAR; typedef unsigned int UINT; typedef unsigned short USHORT; -#ifndef linux +/*#ifndef linux typedef unsigned long ULONG; -#else +#else*/ typedef unsigned int ULONG; -#endif +/*#endif*/ #define VOID void diff -u -r nvnet.orig/if_nv.c nvnet/if_nv.c --- nvnet.orig/if_nv.c Thu Jan 8 18:32:04 2004 +++ nvnet/if_nv.c Mon May 3 20:07:37 2004 @@ -114,7 +114,7 @@ MODULE_DEPEND(nv, ether, 1, 1, 1); MODULE_DEPEND(nv, miibus, 1, 1, 1); -#include "if_nvreg.h" +#include <dev/nvnet/if_nvreg.h> #include "miibus_if.h" static int nv_probe(device_t); @@ -147,20 +147,20 @@ static int nv_osallocex(void *, MEMORY_BLOCKEX *); static int nv_osfreeex(void *, MEMORY_BLOCKEX *); static int nv_osclear(void *, void *, int); -static int nv_osdelay(void *, unsigned long); +static int nv_osdelay(void *, ULONG); static int nv_osallocrxbuf(void *, MEMORY_BLOCK *, void **); static int nv_osfreerxbuf(void *, MEMORY_BLOCK *, void *); -static int nv_ospackettx(void *, void *, unsigned long); -static int nv_ospacketrx(void *, void *, unsigned long, unsigned char *, unsigned char); +static int nv_ospackettx(void *, void *, ULONG); +static int nv_ospacketrx(void *, void *, ULONG, unsigned char *, unsigned char); static int nv_oslinkchg(void *, int); static int nv_osalloctimer(void *, void **); static int nv_osfreetimer(void *, void *); static int nv_osinittimer(void *, void *, PTIMER_FUNC, void *); -static int nv_ossettimer(void *, void *, unsigned long); +static int nv_ossettimer(void *, void *, ULONG); static int nv_oscanceltimer(void *, void *); static int nv_ospreprocpkt(void *, void *, void **, unsigned char *, unsigned char); static void *nv_ospreprocpktnopq(void *, void *); -static int nv_osindicatepkt(void *, void **, unsigned long); +static int nv_osindicatepkt(void *, void **, ULONG); static int nv_oslockalloc(void *, int, void **); static int nv_oslockacquire(void *, int, void *); static int nv_oslockrelease(void *, int, void *); @@ -1180,7 +1180,7 @@ nv_miibus_readreg(device_t dev, int phy, int reg) { struct nv_softc *sc = device_get_softc(dev); - ulong data; + ULONG data; DEBUGOUT(NV_DEBUG_MII, "nv: nv_miibus_readreg - entry\n"); @@ -1250,9 +1250,9 @@ mem_physical = vtophys(mem->pLogical); mem->pPhysical = (PVOID)mem_physical; - DEBUGOUT(NV_DEBUG_API, "nv: nv_osalloc 0x%x/0x%x - %d\n", - (u_int32_t) mem->pLogical, - (u_int32_t) mem->pPhysical, mem->uiLength); + /* DEBUGOUT(NV_DEBUG_API, "nv: nv_osalloc 0x%x/0x%x - %d\n", + mem->pLogical, + mem->pPhysical, mem->uiLength);*/ return (1); } @@ -1261,8 +1261,8 @@ static int nv_osfree(void *ctx, MEMORY_BLOCK *mem) { - DEBUGOUT(NV_DEBUG_API, "nv: nv_osfree - 0x%x - %d\n", - (u_int32_t) mem->pLogical, mem->uiLength); + /* DEBUGOUT(NV_DEBUG_API, "nv: nv_osfree - 0x%x - %d\n", + (u_int32_t) mem->pLogical, mem->uiLength);*/ contigfree(mem->pLogical, PAGE_SIZE, M_DEVBUF); return (1); @@ -1291,7 +1291,7 @@ return (0); } mem_block_ex->pLogicalOrig = mem_block.pLogical; - mem_block_ex->pPhysicalOrigLow = (ULONG)mem_block.pPhysical; + mem_block_ex->pPhysicalOrigLow = (unsigned long)mem_block.pPhysical; mem_block_ex->pPhysicalOrigHigh = 0; mem_block_ex->pPhysical = mem_block.pPhysical; @@ -1302,9 +1302,9 @@ 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->pPhysical = (PVOID)((unsigned long)mem_block_ex->pPhysical + mem_block_ex->AlignmentSize - offset); - mem_block_ex->pLogical = (PVOID)((ULONG)mem_block_ex->pLogical + + mem_block_ex->pLogical = (PVOID)((unsigned long)mem_block_ex->pLogical + mem_block_ex->AlignmentSize - offset); } /* if (offset) */ } /* if (mem_block_ex->uiLength != @@ -1321,7 +1321,7 @@ DEBUGOUT(NV_DEBUG_API, "nv: nv_osfreeex\n"); mem_block.pLogical = mem_block_ex->pLogicalOrig; - mem_block.pPhysical = (PVOID)mem_block_ex->pPhysicalOrigLow; + mem_block.pPhysical = (PVOID)((unsigned long)mem_block_ex->pPhysicalOrigLow); mem_block.uiLength = mem_block_ex->uiLengthOrig; return (nv_osfree(ctx, &mem_block)); @@ -1338,7 +1338,7 @@ /* Sleep for a tick */ static int -nv_osdelay(void *ctx, unsigned long usec) +nv_osdelay(void *ctx, ULONG usec) { DELAY(usec); return (1); @@ -1432,7 +1432,7 @@ /* This gets called by the Nvidia API after our TX packet has been sent */ static int -nv_ospackettx(void *ctx, void *id, unsigned long success) +nv_ospackettx(void *ctx, void *id, ULONG success) { struct nv_softc *sc = ctx; struct nv_map_buffer *buf; @@ -1469,7 +1469,7 @@ /* This gets called by the Nvidia API when a new packet has been received */ /* XXX What is newbuf used for? XXX */ static int -nv_ospacketrx(void *ctx, void *data, unsigned long success, +nv_ospacketrx(void *ctx, void *data, ULONG success, unsigned char *newbuf, unsigned char priority) { struct nv_softc *sc = ctx; @@ -1591,7 +1591,7 @@ /* Set the timer to go off */ static int -nv_ossettimer(void *ctx, void *timer, unsigned long delay) +nv_ossettimer(void *ctx, void *timer, ULONG delay) { struct nv_softc *sc = ctx; @@ -1636,7 +1636,7 @@ } static int -nv_osindicatepkt(void *ctx, void **id, unsigned long pktno) +nv_osindicatepkt(void *ctx, void **id, ULONG pktno) { /* Not implemented */ DEBUGOUT(NV_DEBUG_BROKEN, "nv: nv_osindicatepkt\n"); diff -u -r nvnet.orig/if_nvreg.h nvnet/if_nvreg.h --- nvnet.orig/if_nvreg.h Sat Nov 8 22:03:01 2003 +++ nvnet/if_nvreg.h Mon May 3 20:07:46 2004 @@ -29,9 +29,9 @@ #ifndef _IF_NVREG_H_ #define _IF_NVREG_H_ -#include "basetype.h" -#include "os.h" -#include "adapter.h" +#include <dev/nvnet/basetype.h> +#include <dev/nvnet/os.h> +#include <dev/nvnet/adapter.h> #ifndef NVIDIA_VENDORID #define NVIDIA_VENDORID 0x10DE @@ -149,7 +149,7 @@ void *ostimer_params; unsigned int linkup; ulong tx_errors; - ulong phyaddr; + ULONG phyaddr; unsigned char original_mac_addr[6]; }; Only in nvnet: nvnetlib.c diff -u -r nvnet.orig/os.h nvnet/os.h --- nvnet.orig/os.h Sat Nov 15 07:26:33 2003 +++ nvnet/os.h Mon May 3 20:12:31 2004 @@ -9,7 +9,7 @@ #ifndef _OS_H_ #define _OS_H_ -#include "phy.h" +#include <dev/nvnet/phy.h> #define HDO_VERSION_STRING "HDR O: $Revision: 1.1 $"; ----Next_Part(Mon_May__3_21_26_08_2004_643)----
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040503.212608.33940060.kimoto>