summaryrefslogtreecommitdiff
path: root/sys/dev
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev')
-rw-r--r--sys/dev/pci/if_sis.c36
-rw-r--r--sys/dev/pci/if_sisreg.h7
2 files changed, 35 insertions, 8 deletions
diff --git a/sys/dev/pci/if_sis.c b/sys/dev/pci/if_sis.c
index 186cf11fced..bc250fcceda 100644
--- a/sys/dev/pci/if_sis.c
+++ b/sys/dev/pci/if_sis.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_sis.c,v 1.39 2004/06/06 04:34:33 mcbride Exp $ */
+/* $OpenBSD: if_sis.c,v 1.40 2004/07/04 22:57:20 deraadt Exp $ */
/*
* Copyright (c) 1997, 1998, 1999
* Bill Paul <wpaul@ctr.columbia.edu>. All rights reserved.
@@ -132,6 +132,7 @@ void sis_read_cmos(struct sis_softc *, struct pci_attach_args *, caddr_t, int, i
#endif
void sis_read_mac(struct sis_softc *, struct pci_attach_args *);
void sis_read_eeprom(struct sis_softc *, caddr_t, int, int, int);
+void sis_read96x_mac(struct sis_softc *);
void sis_mii_sync(struct sis_softc *);
void sis_mii_send(struct sis_softc *, u_int32_t, int);
@@ -361,6 +362,25 @@ void sis_read_mac(sc, pa)
SIS_SETBIT(sc, SIS_RXFILT_CTL, SIS_RXFILTCTL_ENABLE);
}
+void sis_read96x_mac(sc)
+ struct sis_softc *sc;
+{
+ int i;
+
+ SIO_SET(SIS96x_EECTL_REQ);
+
+ for (i = 0; i < 2000; i++) {
+ if ((CSR_READ_4(sc, SIS_EECTL) & SIS96x_EECTL_GNT)) {
+ sis_read_eeprom(sc, (caddr_t)&sc->arpcom.ac_enaddr,
+ SIS_EE_NODEADDR, 3, 0);
+ break;
+ } else
+ DELAY(1);
+ }
+
+ SIO_SET(SIS96x_EECTL_DONE);
+}
+
/*
* Sync the PHYs by setting data bit and strobing the clock 32 times.
*/
@@ -951,7 +971,7 @@ void sis_attach(parent, self, aux)
/* Reset the adapter. */
sis_reset(sc);
- printf(": ");
+ printf(":");
/*
* Get station address from the EEPROM.
@@ -961,13 +981,13 @@ void sis_attach(parent, self, aux)
sc->sis_srr = CSR_READ_4(sc, NS_SRR);
if (sc->sis_srr == NS_SRR_15C)
- printf("DP83815C,");
+ printf(" DP83815C,");
else if (sc->sis_srr == NS_SRR_15D)
- printf("DP83815D,");
+ printf(" DP83815D,");
else if (sc->sis_srr == NS_SRR_16A)
- printf("DP83816A,");
+ printf(" DP83816A,");
else
- printf("srr %x,", sc->sis_srr);
+ printf(" srr %x,", sc->sis_srr);
/*
* Reading the MAC address out of the EEPROM on
@@ -1027,7 +1047,9 @@ void sis_attach(parent, self, aux)
0x9, 6);
else
#endif
- if (sc->sis_rev == SIS_REV_635 ||
+ if (sc->sis_rev == SIS_REV_96x)
+ sis_read96x_mac(sc);
+ else if (sc->sis_rev == SIS_REV_635 ||
sc->sis_rev == SIS_REV_630ET ||
sc->sis_rev == SIS_REV_630EA1)
sis_read_mac(sc, pa);
diff --git a/sys/dev/pci/if_sisreg.h b/sys/dev/pci/if_sisreg.h
index bd419b5256a..c6ad494cfd0 100644
--- a/sys/dev/pci/if_sisreg.h
+++ b/sys/dev/pci/if_sisreg.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_sisreg.h,v 1.17 2004/05/19 11:37:00 brad Exp $ */
+/* $OpenBSD: if_sisreg.h,v 1.18 2004/07/04 22:57:20 deraadt Exp $ */
/*
* Copyright (c) 1997, 1998, 1999
* Bill Paul <wpaul@ee.columbia.edu>. All rights reserved.
@@ -127,6 +127,10 @@
#define SIS_EECTL_CLK 0x00000004
#define SIS_EECTL_CSEL 0x00000008
+#define SIS96x_EECTL_GNT 0x00000100
+#define SIS96x_EECTL_DONE 0x00000200
+#define SIS96x_EECTL_REQ 0x00000400
+
#define SIS_MII_CLK 0x00000040
#define SIS_MII_DIR 0x00000020
#define SIS_MII_DATA 0x00000010
@@ -385,6 +389,7 @@ struct sis_ring_data {
#define SIS_REV_630EA1 0x0083
#define SIS_REV_630ET 0x0084
#define SIS_REV_635 0x0090
+#define SIS_REV_96x 0x0091
struct sis_type {
u_int16_t sis_vid;