Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 28 Mar 2005 12:13:07 +0300
From:      Stasys Smailys <ssmailys@komvista.lt>
To:        "[FreeBSD-AMD64]" <freebsd-amd64@freebsd.org>
Subject:   Re: Problem Report amd64/78848 "sis driver on FreeBSD 5.x does not work on amd64"
Message-ID:  <4247CAA3.90804@komvista.lt>

next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------060405060408090009070802
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit

Hello there!

I've had the same problem with SiS 755 and SiS 964 on ASRock K8S8X, the 
only difference was that MAC address had all zeros (00:00:00:00:00:00). 
The problem is that integrated NIC doesn't have any eeprom to read from. 
I solved it by applying this patch. As by now it works for me. AFAIK it 
is not solved properly even in -CURRENT.

By the way I noticed some typo in 
/usr/src/lib/libc/i386/sys/_amd64_get_fsbase.c and 
/usr/src/lib/libc/i386/sys/_amd64_get_gsbase.c. IMHO when calling 
sysarch(int, void *) it should look like this:

/usr/src/lib/libc/i386/sys/_amd64_get_fsbase.c:
[...]
ret = sysarch(_AMD64_GET_FSBASE, (void *)(&addr64));
[...]

/usr/src/lib/libc/i386/sys/_amd64_get_gsbase.c:
[...]
ret = sysarch(_AMD64_GET_GSBASE, (void *)(&addr64));
[...]

WBR,
Stasys Smailys

--------------060405060408090009070802
Content-Type: text/plain;
 name="if_sis.c.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="if_sis.c.patch"

--- /usr/src/sys/pci/if_sis.c.orig	Thu Mar  3 06:16:17 2005
+++ /usr/src/sys/pci/if_sis.c	Sat Mar 26 09:25:54 2005
@@ -139,7 +139,7 @@
 static void sis_eeprom_putbyte	(struct sis_softc *, int);
 static void sis_eeprom_getword	(struct sis_softc *, int, u_int16_t *);
 static void sis_read_eeprom	(struct sis_softc *, caddr_t, int, int, int);
-#ifdef __i386__
+#if defined(__i386__) || defined(__amd64__)
 static void sis_read_cmos	(struct sis_softc *, device_t, caddr_t,
 							int, int);
 static void sis_read_mac	(struct sis_softc *, device_t, caddr_t);
@@ -418,7 +418,7 @@
 	return;
 }
 
-#ifdef __i386__
+#if defined(__i386__) || defined(__amd64__)
 static device_t
 sis_find_bridge(dev)
 	device_t		dev;
@@ -476,7 +476,11 @@
 	pci_write_config(bridge, 0x48, reg|0x40, 1);
 
 	/* XXX */
+#if defined(__i386__)
 	btag = I386_BUS_SPACE_IO;
+#elif defined(__amd64__)
+	btag = AMD64_BUS_SPACE_IO;
+#endif
 
 	for (i = 0; i < cnt; i++) {
 		bus_space_write_1(btag, 0x0, 0x70, i + off);
@@ -1144,7 +1148,7 @@
 		break;
 	case SIS_VENDORID:
 	default:
-#ifdef __i386__
+#if defined(__i386__) || defined(__amd64__)
 		/*
 		 * If this is a SiS 630E chipset with an embedded
 		 * SiS 900 controller, we have to read the MAC address
@@ -1603,7 +1607,7 @@
 		}
 
 		/* No errors; receive the packet. */	
-#ifdef __i386__
+#if defined(__i386__) || defined(__amd64__)
 		/*
 		 * On the x86 we do not have alignment problems, so try to
 		 * allocate a new buffer for the receive ring, and pass up

--------------060405060408090009070802
Content-Type: text/plain;
 name="_amd64_get_fsbase.c.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="_amd64_get_fsbase.c.patch"

--- /usr/src/lib/libc/i386/sys/_amd64_get_fsbase.c.orig	Sat Nov 27 22:24:31 2004
+++ /usr/src/lib/libc/i386/sys/_amd64_get_fsbase.c	Thu Mar 24 23:16:48 2005
@@ -37,7 +37,7 @@
 	int ret;
 
 	addr64 = 0;
-	ret = sysarch(_AMD64_GET_FSBASE, (void **)(&addr64));
+	ret = sysarch(_AMD64_GET_FSBASE, (void *)(&addr64));
 	if (ret != -1)
 		*addr = (void *)(uintptr_t)addr64;
 	return ret;

--------------060405060408090009070802
Content-Type: text/plain;
 name="_amd64_get_gsbase.c.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="_amd64_get_gsbase.c.patch"

--- /usr/src/lib/libc/i386/sys/_amd64_get_gsbase.c.orig	Sat Nov 27 22:24:31 2004
+++ /usr/src/lib/libc/i386/sys/_amd64_get_gsbase.c	Thu Mar 24 23:16:51 2005
@@ -37,7 +37,7 @@
 	int ret;
 
 	addr64 = 0;
-	ret = sysarch(_AMD64_GET_GSBASE, (void **)(&addr64));
+	ret = sysarch(_AMD64_GET_GSBASE, (void *)(&addr64));
 	if (ret != -1)
 		*addr = (void *)(uintptr_t)addr64;
 	return ret;

--------------060405060408090009070802--



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