From owner-freebsd-amd64@FreeBSD.ORG Mon May 3 05:26:20 2004 Return-Path: Delivered-To: freebsd-amd64@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id DA92716A4CE for ; Mon, 3 May 2004 05:26:20 -0700 (PDT) Received: from koganei-server.ohnolab.org (koganei-server.ohnolab.org [202.249.37.99]) by mx1.FreeBSD.org (Postfix) with SMTP id AEB8D43D2D for ; Mon, 3 May 2004 05:26:16 -0700 (PDT) (envelope-from kimoto@ohnolab.org) Received: (qmail 25820 invoked from network); 3 May 2004 12:26:11 -0000 Received: from localhost (kimoto@127.0.0.1) by localhost with SMTP; 3 May 2004 12:26:11 -0000 Date: Mon, 03 May 2004 21:26:08 +0900 (JST) Message-Id: <20040503.212608.33940060.kimoto@ohnolab.org> To: freebsd-amd64@FreeBSD.org From: Masahiko KIMOTO X-fingerprint: DA 63 E3 AD 3F 30 98 05 EB CF 3C 06 2D FF 07 7F X-PGP-Public-Key: http://www.ohnolab.org/~kimoto/kimoto.pubkey.asc X-URL: http://www.ohnolab.org/~kimoto/ X-Mailer: Mew version 4.0.64 on Emacs 21.3.1 / Mule 5.0 (SAKAKI) Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="--Next_Part(Mon_May__3_21_26_08_2004_643)--" Content-Transfer-Encoding: 7bit Subject: How to use nForce3 internal NIC on FreeBSD 5-CURRENT-AMD64 X-BeenThere: freebsd-amd64@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Porting FreeBSD to the AMD64 platform List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 03 May 2004 12:26:21 -0000 ----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 AMD Features=0xe0500800 real memory = 536805376 (511 MB) avail memory = 508452864 (484 MB) (snip) nv0: 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: on nv0 rlphy0: 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. - 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 #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 +#include +#include #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 #define HDO_VERSION_STRING "HDR O: $Revision: 1.1 $"; ----Next_Part(Mon_May__3_21_26_08_2004_643)----