Skip site navigation (1)Skip section navigation (2)
Date:      Wed,  7 Jun 2000 15:21:30 +0200 (CEST)
From:      alex@big.endian.de
To:        FreeBSD-gnats-submit@freebsd.org
Subject:   alpha/19089: Patch: Add if_ed support to FreeBSD/Alpha
Message-ID:  <20000607132130.25D7F14AA8@cichlids.cichlids.com>

next in thread | raw e-mail | index | archive | help

>Number:         19089
>Category:       alpha
>Synopsis:       Patch: Add if_ed support to FreeBSD/Alpha
>Confidential:   yes
>Severity:       serious
>Priority:       high
>Responsible:    freebsd-alpha
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Wed Jun 07 06:30:02 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator:     Alexander Langer
>Release:        FreeBSD 5.0-CURRENT i386
>Organization:
none
>Environment:

FreeBSD/Alpha

>Description:

With this patch we are able to use more high-quality cards from the NE2000
compatible range on FreeBSD/Alpha:

bash-2.04# uname -a ; ifconfig ed0 ; route get 192.168.0.1 ; ping -c 2 192.168.
0.1 
FreeBSD parca.cichlids.com 5.0-CURRENT FreeBSD 5.0-CURRENT #13: Wed Jun  7 15:04:33 CEST 2000     root@parca.cichlids.com:/usr/src/sys/compile/ALPINE.ed  alpha
ed0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        inet 192.168.0.16 netmask 0xffffff00 broadcast 192.168.0.255
        inet6 fe80::200:b4ff:fe5e:fa71%ed0 prefixlen 64 scopeid 0x1 
        ether 00:00:b4:5e:fa:71 
   route to: neutron
destination: neutron
  interface: ed0
      flags: <UP,HOST,DONE,LLINFO,WASCLONED>
 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
       0         0         0         0         0         0      1500       794 
PING 192.168.0.1 (192.168.0.1): 48 data bytes
64 bytes from 192.168.0.1: icmp_seq=0 ttl=255 time=0.741 ms
64 bytes from 192.168.0.1: icmp_seq=1 ttl=255 time=0.854 ms

--- 192.168.0.1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max/stddev = 0.741/0.797/0.854/0.057 ms
bash-2.04# 

>How-To-Repeat:

>Fix:

Index: alpha/alpha/vm_machdep.c
===================================================================
RCS file: /usr/home/ncvs/src/sys/alpha/alpha/vm_machdep.c,v
retrieving revision 1.30
diff -u -r1.30 vm_machdep.c
--- alpha/alpha/vm_machdep.c	2000/05/05 09:54:57	1.30
+++ alpha/alpha/vm_machdep.c	2000/06/07 09:30:45
@@ -296,6 +296,20 @@
 #endif
 
 /*
+ * Convert kernel VA to physical address
+ */
+u_long
+kvtop(void *addr)
+{
+	vm_offset_t va;
+
+	va = pmap_kextract((vm_offset_t)addr);
+	if (va == 0)
+	panic("kvtop: zero page frame");
+	return((int)va);
+}
+
+/*
  * Map an IO request into kernel virtual address space.
  *
  * All requests are (re)mapped into kernel VA space.
Index: conf/files
===================================================================
RCS file: /usr/home/ncvs/src/sys/conf/files,v
retrieving revision 1.372
diff -u -r1.372 files
--- conf/files	2000/06/07 04:53:48	1.372
+++ conf/files	2000/06/07 13:12:18
@@ -123,6 +123,9 @@
 dev/dpt/dpt_pci.c	optional dpt pci
 dev/dpt/dpt_scsi.c	optional dpt
 dev/ed/if_ed_pci.c	optional ed pci
+dev/ed/if_ed.c		optional ed
+dev/ed/if_ed_isa.c	optional ed isa
+dev/ed/if_ed_pccard.c	optional ed card
 dev/en/midway.c		optional en
 dev/ep/if_ep.c		optional ep
 dev/ep/if_ep_eisa.c	optional ep eisa
Index: conf/files.i386
===================================================================
RCS file: /usr/home/ncvs/src/sys/conf/files.i386,v
retrieving revision 1.319
diff -u -r1.319 files.i386
--- conf/files.i386	2000/06/02 09:27:47	1.319
+++ conf/files.i386	2000/06/07 13:12:24
@@ -71,9 +71,6 @@
 dev/ata/atapi-cd.c		optional	atapicd
 dev/ata/atapi-fd.c		optional	atapifd
 dev/ata/atapi-tape.c		optional	atapist
-dev/ed/if_ed.c			optional	ed
-dev/ed/if_ed_isa.c		optional	ed isa
-dev/ed/if_ed_pccard.c		optional	ed card
 dev/eisa/eisaconf.c		optional	eisa
 dev/fb/fb.c			optional	fb
 dev/fb/fb.c			optional	vga
Index: dev/ed/if_ed.c
===================================================================
RCS file: /usr/home/ncvs/src/sys/dev/ed/if_ed.c,v
retrieving revision 1.180
diff -u -r1.180 if_ed.c
--- dev/ed/if_ed.c	2000/06/01 21:55:49	1.180
+++ dev/ed/if_ed.c	2000/06/07 13:11:29
@@ -75,7 +75,7 @@
 static void	ed_reset	__P((struct ifnet *));
 static void	ed_watchdog	__P((struct ifnet *));
 
-static void	ds_getmcaf	__P((struct ed_softc *, u_long *));
+static void	ds_getmcaf	__P((struct ed_softc *, u_int32_t *));
 
 static void	ed_get_packet	__P((struct ed_softc *, char *, /* u_short */ int));
 
@@ -98,7 +98,7 @@
 
 static void	ed_setrcr	__P((struct ed_softc *));
 
-static u_long	ds_crc		__P((u_char *ep));
+static u_int32_t	ds_crc		__P((u_char *ep));
 
 static u_short	ed_get_Linksys	__P((struct ed_softc *));
 
@@ -3211,13 +3214,13 @@
 	} else {
 		/* set up multicast addresses and filter modes */
 		if (ifp->if_flags & IFF_MULTICAST) {
-			u_long  mcaf[2];
+			u_int32_t mcaf[2];
 
 			if (ifp->if_flags & IFF_ALLMULTI) {
 				mcaf[0] = 0xffffffff;
 				mcaf[1] = 0xffffffff;
			} else
 				ds_getmcaf(sc, mcaf);
 
 			/*
 			 * Set multicast filter on chip.
@@ -3254,12 +3258,12 @@
 /*
  * Compute crc for ethernet address
  */
-static u_long
+static u_int32_t
 ds_crc(ep)
 	u_char *ep;
 {
 #define POLYNOMIAL 0x04c11db6
-	register u_long crc = 0xffffffffL;
+	register u_int32_t crc = 0xffffffffL;
 	register int carry, i, j;
 	register u_char b;
 
@@ -3284,9 +3288,9 @@
 static void
 ds_getmcaf(sc, mcaf)
 	struct ed_softc *sc;
-	u_long *mcaf;
+	u_int32_t *mcaf;
 {
-	register u_int index;
+	register u_int32_t index;
 	register u_char *af = (u_char *) mcaf;
 	struct ifmultiaddr *ifma;
 
Index: dev/ed/if_edreg.h
===================================================================
RCS file: /usr/home/ncvs/src/sys/dev/ed/if_edreg.h,v
retrieving revision 1.27
diff -u -r1.27 if_edreg.h
--- dev/ed/if_edreg.h	1999/09/02 15:06:23	1.27
+++ dev/ed/if_edreg.h	2000/06/07 13:14:53
@@ -788,8 +788,13 @@
 #define ED_WD_ROM_CHECKSUM_TOTAL	0xFF
 #endif
 
+#ifdef __alpha__
+#define ED_WD_NIC_OFFSET	0x00		/* I/O base offset to NIC */
+#define ED_WD_ASIC_OFFSET	0x10		/* I/O base offset to ASIC */
+#else
 #define ED_WD_NIC_OFFSET	0x10		/* I/O base offset to NIC */
 #define ED_WD_ASIC_OFFSET	0		/* I/O base offset to ASIC */
+#endif
 #define ED_WD_IO_PORTS		32		/* # of i/o addresses used */
 
 #define ED_WD_PAGE_OFFSET	0	/* page offset for NIC access to mem */
Index: dev/ed/if_edvar.h
===================================================================
RCS file: /usr/home/ncvs/src/sys/dev/ed/if_edvar.h,v
retrieving revision 1.4
diff -u -r1.4 if_edvar.h
--- dev/ed/if_edvar.h	1999/12/10 07:22:53	1.4
+++ dev/ed/if_edvar.h	2000/06/07 13:15:24
@@ -48,8 +48,13 @@
 	struct resource* irq_res; /* resource for irq */
 	void*	irq_handle;	/* handle for irq handler */
 
+#ifdef __alpha__
+	u_int asic_addr;	/* ASIC I/O bus address */
+	u_int nic_addr;	/* NIC (DS8390) I/O bus address */
+#else
 	u_short asic_addr;	/* ASIC I/O bus address */
 	u_short nic_addr;	/* NIC (DS8390) I/O bus address */
+#endif
 
 /*
  * The following 'proto' variable is part of a work-around for 8013EBT asics
@@ -71,7 +76,7 @@
 
 	caddr_t mem_start;	/* NIC memory start address */
 	caddr_t mem_end;	/* NIC memory end address */
-	u_long  mem_size;	/* total NIC memory size */
+	u_int32_t mem_size;	/* total NIC memory size */
 	caddr_t mem_ring;	/* start of RX ring-buffer (in NIC mem) */
 
 	u_char  mem_shared;	/* NIC memory is shared with host */

>Release-Note:
>Audit-Trail:
>Unformatted:


To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-alpha" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20000607132130.25D7F14AA8>