Module Name: src Committed By: christos Date: Sun Nov 25 22:22:40 UTC 2012
Modified Files: src/sys/dev/usb: if_axe.c if_axereg.h Log Message: PR/47245: Toby Karyadi: Add AX88772B support to axe(4), e.g. for DLINK DUB-E100 C1 To generate a diff of this commit: cvs rdiff -u -r1.57 -r1.58 src/sys/dev/usb/if_axe.c cvs rdiff -u -r1.14 -r1.15 src/sys/dev/usb/if_axereg.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/usb/if_axe.c diff -u src/sys/dev/usb/if_axe.c:1.57 src/sys/dev/usb/if_axe.c:1.58 --- src/sys/dev/usb/if_axe.c:1.57 Fri Aug 24 05:01:23 2012 +++ src/sys/dev/usb/if_axe.c Sun Nov 25 17:22:39 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: if_axe.c,v 1.57 2012/08/24 09:01:23 msaitoh Exp $ */ +/* $NetBSD: if_axe.c,v 1.58 2012/11/25 22:22:39 christos Exp $ */ /* $OpenBSD: if_axe.c,v 1.96 2010/01/09 05:33:08 jsg Exp $ */ /* @@ -89,7 +89,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_axe.c,v 1.57 2012/08/24 09:01:23 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_axe.c,v 1.58 2012/11/25 22:22:39 christos Exp $"); #if defined(_KERNEL_OPT) #include "opt_inet.h" @@ -145,6 +145,7 @@ static const struct axe_type axe_devs[] { { USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88172}, 0 }, { { USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88772}, AX772 }, { { USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88772A}, AX772 }, + { { USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88772B}, AX772 | AX772B }, { { USB_VENDOR_ASIX, USB_PRODUCT_ASIX_AX88178}, AX178 }, { { USB_VENDOR_ATEN, USB_PRODUCT_ATEN_UC210T}, 0 }, { { USB_VENDOR_BELKIN, USB_PRODUCT_BELKIN_F5D5055 }, AX178 }, @@ -918,12 +919,14 @@ axe_rxeof(usbd_xfer_handle xfer, usbd_pr total_len -= sizeof(hdr); buf += sizeof(hdr); - if ((hdr.len ^ hdr.ilen) != 0xffff) { + if (((le16toh(hdr.len) & AXE_RH1M_RXLEN_MASK) ^ + (le16toh(hdr.ilen) & AXE_RH1M_RXLEN_MASK)) != + AXE_RH1M_RXLEN_MASK) { ifp->if_ierrors++; goto done; } - rxlen = le16toh(hdr.len); + rxlen = le16toh(hdr.len & AXE_RH1M_RXLEN_MASK); if (total_len < rxlen) { pktlen = total_len; total_len = 0; @@ -1241,7 +1244,9 @@ axe_init(struct ifnet *ifp) /* Enable receiver, set RX mode */ rxmode = AXE_RXCMD_BROADCAST | AXE_RXCMD_MULTICAST | AXE_RXCMD_ENABLE; - if (sc->axe_flags & AX178 || sc->axe_flags & AX772) { + if (sc->axe_flags & AX772B) + rxmode |= AXE_772B_RXCMD_RH1M; + else if (sc->axe_flags & AX178 || sc->axe_flags & AX772) { if (sc->axe_udev->speed == USB_SPEED_HIGH) { /* Largest possible USB buffer size for AX88178 */ rxmode |= AXE_178_RXCMD_MFB; Index: src/sys/dev/usb/if_axereg.h diff -u src/sys/dev/usb/if_axereg.h:1.14 src/sys/dev/usb/if_axereg.h:1.15 --- src/sys/dev/usb/if_axereg.h:1.14 Thu Feb 2 14:43:07 2012 +++ src/sys/dev/usb/if_axereg.h Sun Nov 25 17:22:39 2012 @@ -1,4 +1,4 @@ -/* $NetBSD: if_axereg.h,v 1.14 2012/02/02 19:43:07 tls Exp $ */ +/* $NetBSD: if_axereg.h,v 1.15 2012/11/25 22:22:39 christos Exp $ */ /* * Copyright (c) 1997, 1998, 1999, 2000-2003 @@ -134,6 +134,12 @@ #define AXE_NOPHY 0xE0 #define AXE_INTPHY 0x10 +#define AXE_772B_RXCMD_RH1M 0x0100 +#define AXE_772B_RXCMD_RH2M 0x0200 +#define AXE_772B_RXCMD_RH3M 0x0400 + +#define AXE_RH1M_RXLEN_MASK 0x07ff + #define AXE_TIMEOUT 1000 #define AXE_172_BUFSZ 1536 @@ -167,6 +173,7 @@ struct axe_type { uint16_t axe_flags; #define AX178 0x0001 /* AX88178 */ #define AX772 0x0002 /* AX88772 */ +#define AX772B 0x0004 /* AX88772B */ #define AXE_ANY_PHY 0x1000 /* Chip lies about valid phys */ #define AXE_MII 0x2000 /* Chip-specific MII handling */ };