Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/netbsd-9]: src Pull up following revision(s) (requested by msaitoh in ti...
details: https://anonhg.NetBSD.org/src/rev/a1dc08a65f60
branches: netbsd-9
changeset: 843768:a1dc08a65f60
user: martin <martin%NetBSD.org@localhost>
date: Tue Jan 21 11:55:57 2020 +0000
description:
Pull up following revision(s) (requested by msaitoh in ticket #626):
sys/arch/amd64/conf/GENERIC: revision 1.552
sys/dev/pci/if_casreg.h: revision 1.2
sys/dev/pci/if_cas.c: revision 1.37
share/man/man4/cas.4: revision 1.4
sys/dev/pci/if_casvar.h: revision 1.7
Update supported device list with part number. From FreeBSD.
Fix a bug that the driver sometimes incorrectly attach gentbi(4) instead of
gphyter(4) on non-fiber device.
Tested with Sun Quad GigaSwift Ethernet UTP (QGE) (part no. 501-6522) on
amd64. On this environment, the problem frequently had occurred. I also
tested with other 4 cas(4) variants.
Add cas(4).
diffstat:
share/man/man4/cas.4 | 21 +++-
sys/arch/amd64/conf/GENERIC | 5 +-
sys/dev/pci/if_cas.c | 173 ++++++++++++++++++++++++++++++++++---------
sys/dev/pci/if_casreg.h | 15 +++-
sys/dev/pci/if_casvar.h | 13 +++-
5 files changed, 178 insertions(+), 49 deletions(-)
diffs (truncated from 422 to 300 lines):
diff -r 3bef9d51be9e -r a1dc08a65f60 share/man/man4/cas.4
--- a/share/man/man4/cas.4 Tue Jan 21 11:43:27 2020 +0000
+++ b/share/man/man4/cas.4 Tue Jan 21 11:55:57 2020 +0000
@@ -1,4 +1,4 @@
-.\" $NetBSD: cas.4,v 1.3 2010/01/15 19:24:49 joerg Exp $
+.\" $NetBSD: cas.4,v 1.3.50.1 2020/01/21 11:55:58 martin Exp $
.\"
.\" Copyright (c) 2010 The NetBSD Foundation, Inc.
.\" All rights reserved.
@@ -24,7 +24,7 @@
.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
.\" POSSIBILITY OF SUCH DAMAGE.
.\"
-.Dd January 7, 2010
+.Dd December 25, 2019
.Dt CAS 4
.Os
.Sh NAME
@@ -44,13 +44,22 @@
and Sun GigaSwift PCI cards.
.Pp
Cards supported by this driver include:
-.Bl -bullet -compact -offset indent
+.Bl -bullet -compact
.It
-Sun Gigaswift Ethernet (SX fibre variants)
+Sun GigaSwift Ethernet 1.0 MMF (Cassini Kuheen)
+(part no.\& 501-5524)
+.It
+Sun GigaSwift Ethernet 1.0 UTP (Cassini)
+(part no.\& 501-5902)
.It
-Sun Gigaswift Ethernet (UTP variants)
+Sun GigaSwift Ethernet UTP (GCS)
+(part no.\& 501-6719)
.It
-Sun quad Gigaswift Ethernet
+Sun Quad GigaSwift Ethernet UTP (QGE)
+(part no.\& 501-6522)
+.It
+Sun Quad GigaSwift Ethernet PCI-X (QGE-X)
+(part no.\& 501-6738)
.El
.Sh SEE ALSO
.Xr brgphy 4 ,
diff -r 3bef9d51be9e -r a1dc08a65f60 sys/arch/amd64/conf/GENERIC
--- a/sys/arch/amd64/conf/GENERIC Tue Jan 21 11:43:27 2020 +0000
+++ b/sys/arch/amd64/conf/GENERIC Tue Jan 21 11:55:57 2020 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: GENERIC,v 1.531.2.6 2019/11/25 20:47:24 martin Exp $
+# $NetBSD: GENERIC,v 1.531.2.7 2020/01/21 11:55:57 martin Exp $
#
# GENERIC machine description file
#
@@ -22,7 +22,7 @@
options INCLUDE_CONFIG_FILE # embed config file in kernel binary
-#ident "GENERIC-$Revision: 1.531.2.6 $"
+#ident "GENERIC-$Revision: 1.531.2.7 $"
maxusers 64 # estimated number of users
@@ -770,6 +770,7 @@
bnx* at pci? dev ? function ? # Broadcom NetXtremeII gigabit Ethernet
bwi* at pci? dev ? function ? # Broadcom BCM43xx wireless
bwfm* at pci? dev ? function ? # Broadcom FullMAC
+cas* at pci? dev ? function ? # Sun Cassini/Cassini+ Ethernet
dge* at pci? dev ? function ? # Intel 82597 10GbE LR
ena* at pci? dev ? function ? # Amazon.com Elastic Network Adapter
ep* at pci? dev ? function ? # 3Com 3c59x
diff -r 3bef9d51be9e -r a1dc08a65f60 sys/dev/pci/if_cas.c
--- a/sys/dev/pci/if_cas.c Tue Jan 21 11:43:27 2020 +0000
+++ b/sys/dev/pci/if_cas.c Tue Jan 21 11:55:57 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: if_cas.c,v 1.35.2.1 2019/11/26 08:20:47 martin Exp $ */
+/* $NetBSD: if_cas.c,v 1.35.2.2 2020/01/21 11:55:58 martin Exp $ */
/* $OpenBSD: if_cas.c,v 1.29 2009/11/29 16:19:38 kettenis Exp $ */
/*
@@ -44,7 +44,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_cas.c,v 1.35.2.1 2019/11/26 08:20:47 martin Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_cas.c,v 1.35.2.2 2020/01/21 11:55:58 martin Exp $");
#ifndef _MODULE
#include "opt_inet.h"
@@ -114,7 +114,7 @@
cas_match, cas_attach, cas_detach, NULL, NULL, NULL,
DVF_DETACH_SHUTDOWN);
-int cas_pci_enaddr(struct cas_softc *, struct pci_attach_args *, uint8_t *);
+int cas_pci_readvpd(struct cas_softc *, struct pci_attach_args *, uint8_t *);
void cas_config(struct cas_softc *, const uint8_t *);
void cas_start(struct ifnet *);
@@ -163,18 +163,32 @@
#define DPRINTF(sc, x) /* nothing */
#endif
+static const struct cas_pci_dev {
+ uint16_t cpd_vendor;
+ uint16_t cpd_device;
+ int cpd_variant;
+} cas_pci_devlist[] = {
+ { PCI_VENDOR_SUN, PCI_PRODUCT_SUN_CASSINI, CAS_CAS },
+ { PCI_VENDOR_NS, PCI_PRODUCT_NS_SATURN, CAS_SATURN },
+ { 0, 0, 0 }
+};
+
+#define CAS_LOCAL_MAC_ADDRESS "local-mac-address"
+#define CAS_PHY_INTERFACE "phy-interface"
+#define CAS_PHY_TYPE "phy-type"
+#define CAS_PHY_TYPE_PCS "pcs"
+
int
cas_match(device_t parent, cfdata_t cf, void *aux)
{
struct pci_attach_args *pa = aux;
+ int i;
- if (PCI_VENDOR(pa->pa_id) == PCI_VENDOR_SUN &&
- (PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_SUN_CASSINI))
- return 1;
-
- if (PCI_VENDOR(pa->pa_id) == PCI_VENDOR_NS &&
- (PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_NS_SATURN))
- return 1;
+ for (i = 0; cas_pci_devlist[i].cpd_vendor != 0; i++) {
+ if ((PCI_VENDOR(pa->pa_id) == cas_pci_devlist[i].cpd_vendor) &&
+ (PCI_PRODUCT(pa->pa_id) == cas_pci_devlist[i].cpd_device))
+ return 1;
+ }
return 0;
}
@@ -205,7 +219,7 @@
#define CAS_LMA_MAXNUM 4
int
-cas_pci_enaddr(struct cas_softc *sc, struct pci_attach_args *pa,
+cas_pci_readvpd(struct cas_softc *sc, struct pci_attach_args *pa,
uint8_t *enaddr)
{
struct pci_vpd_largeres *res;
@@ -214,9 +228,10 @@
bus_space_tag_t romt;
bus_size_t romsize = 0;
uint8_t enaddrs[CAS_LMA_MAXNUM][ETHER_ADDR_LEN];
+ bool pcs[4] = {false, false, false, false};
uint8_t buf[32], *desc;
pcireg_t address;
- int dataoff, vpdoff, len, lma = 0;
+ int dataoff, vpdoff, len, lma = 0, phy = 0;
int i, rv = -1;
if (pci_mapreg_map(pa, PCI_MAPREG_ROM, PCI_MAPREG_TYPE_MEM, 0,
@@ -261,6 +276,20 @@
goto next;
case PCI_VPDRES_TYPE_VPD:
+#ifdef CAS_DEBUG
+ printf("\n");
+ for (i = 0; i < len; i++) {
+ uint8_t byte;
+ if (i % 16 == 0)
+ printf("%04x :", i);
+ byte = bus_space_read_1(romt, romh, vpdoff + i);
+ printf(" %02x", byte);
+ if (i % 16 == 15)
+ printf("\n");
+ }
+ printf("\n");
+#endif
+
while (len > 0) {
bus_space_read_region_1(romt, romh, vpdoff,
buf, sizeof(buf));
@@ -284,26 +313,57 @@
continue;
desc += 3;
- /*
- * ...that's a byte array with the proper
- * length for a MAC address...
- */
- if (desc[0] != 'B' || desc[1] != ETHER_ADDR_LEN)
+ if (desc[0] == 'B' || desc[1] == ETHER_ADDR_LEN) {
+ /*
+ * ...that's a byte array with the proper
+ * length for a MAC address...
+ */
+ desc += 2;
+
+ /*
+ * ...named "local-mac-address".
+ */
+ if (strcmp(desc, CAS_LOCAL_MAC_ADDRESS) != 0)
+ continue;
+ desc += sizeof(CAS_LOCAL_MAC_ADDRESS);
+
+ if (lma == CAS_LMA_MAXNUM)
+ continue;
+
+ memcpy(enaddrs[lma], desc, ETHER_ADDR_LEN);
+ lma++;
+ rv = 0;
continue;
- desc += 2;
+ } else if (desc[0] == 'S') {
+ size_t k;
- /*
- * ...named "local-mac-address".
- */
- if (strcmp(desc, "local-mac-address") != 0)
+ /* String */
+ desc += 2;
+#ifdef CAS_DEBUG
+ /* ...named "pcs". */
+ printf("STR: \"%s\"\n", desc);
+ if (strcmp(desc, CAS_PHY_TYPE_PCS) != 0)
+ continue;
+ desc += sizeof(CAS_PHY_TYPE_PCS);
+ printf("STR: \"%s\"\n", desc);
+#endif
+ /* ...named "phy-interface" or "phy-type". */
+ if (strcmp(desc, CAS_PHY_INTERFACE) == 0)
+ k = sizeof(CAS_PHY_INTERFACE);
+ else if (strcmp(desc, CAS_PHY_TYPE) == 0)
+ k = sizeof(CAS_PHY_TYPE);
+ else
+ continue;
+
+ desc += k;
+#ifdef CAS_DEBUG
+ printf("STR: \"%s\"\n", desc);
+#endif
+ if (strcmp(desc, CAS_PHY_TYPE_PCS) == 0)
+ pcs[phy] = true;
+ phy++;
continue;
- desc += strlen("local-mac-address") + 1;
-
- memcpy(enaddrs[lma], desc, ETHER_ADDR_LEN);
- lma++;
- rv = 0;
- if (lma == CAS_LMA_MAXNUM)
- break;
+ }
}
break;
@@ -311,7 +371,6 @@
goto fail;
}
- i = 0;
/*
* Multi port card has bridge chip. The device number is fixed:
* e.g.
@@ -320,10 +379,15 @@
* p2: 006:02:0
* p3: 006:03:0
*/
- if ((lma > 1) && (pa->pa_device < CAS_LMA_MAXNUM)
- && (pa->pa_device < lma))
- i = pa->pa_device;
- memcpy(enaddr, enaddrs[i], ETHER_ADDR_LEN);
+ if (enaddr != 0) {
+ i = 0;
+ if ((lma > 1) && (pa->pa_device < CAS_LMA_MAXNUM)
+ && (pa->pa_device < lma))
+ i = pa->pa_device;
+ memcpy(enaddr, enaddrs[i], ETHER_ADDR_LEN);
+ }
+ if (pcs[pa->pa_device])
+ sc->sc_flags |= CAS_SERDES;
fail:
if (romsize != 0)
bus_space_unmap(romt, romh, romsize);
@@ -340,6 +404,7 @@
{
struct pci_attach_args *pa = aux;
struct cas_softc *sc = device_private(self);
+ int i;
prop_data_t data;
uint8_t enaddr[ETHER_ADDR_LEN];
@@ -348,6 +413,20 @@
sc->sc_rev = PCI_REVISION(pa->pa_class);
sc->sc_dmatag = pa->pa_dmat;
+ sc->sc_variant = CAS_UNKNOWN;
+ for (i = 0; cas_pci_devlist[i].cpd_vendor != 0; i++) {
+ if ((PCI_VENDOR(pa->pa_id) == cas_pci_devlist[i].cpd_vendor) &&
+ (PCI_PRODUCT(pa->pa_id) == cas_pci_devlist[i].cpd_device)) {
+ sc->sc_variant = cas_pci_devlist[i].cpd_variant;
Home |
Main Index |
Thread Index |
Old Index