Hello,
Here is Genesys Logic's GL620USB-A driver, new version.
I fixed crashing bug when peer is not connected, rewrite "sc_dying" to
usbd_is_dying() (advices from mpi@), and deleted useless codes.
This is still work in progress, man is not yet. And please tell me
which I have to write copyright notice --- NetBSD or OpenBSD.
if_ugl.c is based on if_upl.c, and if_upl.c has NetBSD's one.
Regards,
--
SASANO Takayoshi <
u...@mx5.nisiq.net>
Index: arch/alpha/conf/GENERIC
===================================================================
RCS file: /cvs/src/sys/arch/alpha/conf/GENERIC,v
retrieving revision 1.234
diff -u -p -r1.234 GENERIC
--- arch/alpha/conf/GENERIC 29 Oct 2013 22:33:10 -0000 1.234
+++ arch/alpha/conf/GENERIC 14 Nov 2013 19:47:57 -0000
@@ -109,6 +109,7 @@ cdce* at uhub? # CDC Ethernet
urndis* at uhub? # Remote NDIS Ethernet
udav* at uhub? # Davicom DM9601 based Ethernet
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
url* at uhub? # Realtek RTL8150L based adapters
wi* at uhub? # WaveLAN IEEE 802.11DS
urio* at uhub? # Diamond Multimedia Rio 500
Index: arch/alpha/conf/RAMDISKBIG
===================================================================
RCS file: /cvs/src/sys/arch/alpha/conf/RAMDISKBIG,v
retrieving revision 1.89
diff -u -p -r1.89 RAMDISKBIG
--- arch/alpha/conf/RAMDISKBIG 29 Oct 2013 22:33:10 -0000 1.89
+++ arch/alpha/conf/RAMDISKBIG 14 Nov 2013 19:47:57 -0000
@@ -95,6 +95,7 @@ kue* at uhub? # Kawasaki KL5KUSB101B b
smsc* at uhub? # SMSC LAN95xx Ethernet
udav* at uhub? # Davicom DM9601 based Ethernet
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
url* at uhub? # Realtek RTL8150L based adapters
wi* at uhub? # WaveLAN IEEE 802.11DS
Index: arch/amd64/conf/GENERIC
===================================================================
RCS file: /cvs/src/sys/arch/amd64/conf/GENERIC,v
retrieving revision 1.351
diff -u -p -r1.351 GENERIC
--- arch/amd64/conf/GENERIC 29 Oct 2013 22:37:25 -0000 1.351
+++ arch/amd64/conf/GENERIC 14 Nov 2013 19:47:59 -0000
@@ -223,6 +223,7 @@ smsc* at uhub? # SMSC LAN95xx Ethernet
cdce* at uhub? # CDC Ethernet
urndis* at uhub? # Remote NDIS Ethernet
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
udav* at uhub? # Davicom DM9601 based Ethernet
mos* at uhub? # MOSCHIP MCS7730/7830 10/100 Ethernet
url* at uhub? # Realtek RTL8150L based adapters
Index: arch/amd64/conf/RAMDISK
===================================================================
RCS file: /cvs/src/sys/arch/amd64/conf/RAMDISK,v
retrieving revision 1.59
diff -u -p -r1.59 RAMDISK
--- arch/amd64/conf/RAMDISK 29 Oct 2013 22:37:25 -0000 1.59
+++ arch/amd64/conf/RAMDISK 14 Nov 2013 19:48:00 -0000
@@ -105,6 +105,7 @@ wskbd* at ukbd? mux 1
#cue* at uhub? # CATC USB-EL1201A based Ethernet
#kue* at uhub? # Kawasaki KL5KUSB101B based Ethernet
#upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+#ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
#urio* at uhub? # Diamond Multimedia Rio 500
#uyap* at uhub? # Y@P firmware loader
#ugen* at uhub? # USB Generic driver
Index: arch/amd64/conf/RAMDISK_CD
===================================================================
RCS file: /cvs/src/sys/arch/amd64/conf/RAMDISK_CD,v
retrieving revision 1.130
diff -u -p -r1.130 RAMDISK_CD
--- arch/amd64/conf/RAMDISK_CD 29 Oct 2013 22:37:25 -0000 1.130
+++ arch/amd64/conf/RAMDISK_CD 14 Nov 2013 19:48:00 -0000
@@ -116,6 +116,7 @@ mos* at uhub? # MOSCHIP MCS7730/7830 10
url* at uhub? # Realtek RTL8150L based adapters
wi* at uhub? # WaveLAN IEEE 802.11DS
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
#urio* at uhub? # Diamond Multimedia Rio 500
#uyap* at uhub? # Y@P firmware loader
#ugen* at uhub? # USB Generic driver
Index: arch/armish/conf/GENERIC
===================================================================
RCS file: /cvs/src/sys/arch/armish/conf/GENERIC,v
retrieving revision 1.49
diff -u -p -r1.49 GENERIC
--- arch/armish/conf/GENERIC 5 Sep 2013 19:42:06 -0000 1.49
+++ arch/armish/conf/GENERIC 14 Nov 2013 19:48:02 -0000
@@ -139,6 +139,7 @@ smsc* at uhub? # SMSC LAN95xx Ethernet
cdce* at uhub? # CDC Ethernet
urndis* at uhub? # Remote NDIS Ethernet
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
udav* at uhub? # Davicom DM9601 based Ethernet
url* at uhub? # Realtek RTL8150L based adapters
wi* at uhub? # WaveLAN IEEE 802.11DS
Index: arch/armish/conf/RAMDISK
===================================================================
RCS file: /cvs/src/sys/arch/armish/conf/RAMDISK,v
retrieving revision 1.26
diff -u -p -r1.26 RAMDISK
--- arch/armish/conf/RAMDISK 20 Aug 2013 14:27:26 -0000 1.26
+++ arch/armish/conf/RAMDISK 14 Nov 2013 19:48:02 -0000
@@ -132,6 +132,7 @@ kue* at uhub? # Kawasaki KL5KUSB101B ba
smsc* at uhub? # SMSC LAN95xx Ethernet
cdce* at uhub? # CDC Ethernet
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
udav* at uhub? # Davicom DM9601 based Ethernet
url* at uhub? # Realtek RTL8150L based adapters
wi* at uhub? # WaveLAN IEEE 802.11DS
Index: arch/armv7/conf/GENERIC-IMX
===================================================================
RCS file: /cvs/src/sys/arch/armv7/conf/GENERIC-IMX,v
retrieving revision 1.3
diff -u -p -r1.3 GENERIC-IMX
--- arch/armv7/conf/GENERIC-IMX 5 Oct 2013 23:05:11 -0000 1.3
+++ arch/armv7/conf/GENERIC-IMX 14 Nov 2013 19:48:03 -0000
@@ -118,6 +118,7 @@ kue* at uhub? # Kawasaki KL5KUSB101B b
smsc* at uhub? # SMSC LAN95xx Ethernet
cdce* at uhub? # CDC Ethernet
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
udav* at uhub? # Davicom DM9601 based Ethernet
url* at uhub? # Realtek RTL8150L based adapters
wi* at uhub? # WaveLAN IEEE 802.11DS
Index: arch/armv7/conf/GENERIC-OMAP
===================================================================
RCS file: /cvs/src/sys/arch/armv7/conf/GENERIC-OMAP,v
retrieving revision 1.3
diff -u -p -r1.3 GENERIC-OMAP
--- arch/armv7/conf/GENERIC-OMAP 18 Oct 2013 15:25:03 -0000 1.3
+++ arch/armv7/conf/GENERIC-OMAP 14 Nov 2013 19:48:03 -0000
@@ -127,6 +127,7 @@ kue* at uhub? # Kawasaki KL5KUSB101B b
smsc* at uhub? # SMSC LAN95xx Ethernet
cdce* at uhub? # CDC Ethernet
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
udav* at uhub? # Davicom DM9601 based Ethernet
url* at uhub? # Realtek RTL8150L based adapters
wi* at uhub? # WaveLAN IEEE 802.11DS
Index: arch/armv7/conf/GENERIC-SUNXI
===================================================================
RCS file: /cvs/src/sys/arch/armv7/conf/GENERIC-SUNXI,v
retrieving revision 1.2
diff -u -p -r1.2 GENERIC-SUNXI
--- arch/armv7/conf/GENERIC-SUNXI 27 Oct 2013 03:06:25 -0000 1.2
+++ arch/armv7/conf/GENERIC-SUNXI 14 Nov 2013 19:48:03 -0000
@@ -121,6 +121,7 @@ kue* at uhub? # Kawasaki KL5KUSB101B b
smsc* at uhub? # SMSC LAN95xx Ethernet
cdce* at uhub? # CDC Ethernet
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
udav* at uhub? # Davicom DM9601 based Ethernet
url* at uhub? # Realtek RTL8150L based adapters
wi* at uhub? # WaveLAN IEEE 802.11DS
Index: arch/armv7/conf/RAMDISK-IMX
===================================================================
RCS file: /cvs/src/sys/arch/armv7/conf/RAMDISK-IMX,v
retrieving revision 1.5
diff -u -p -r1.5 RAMDISK-IMX
--- arch/armv7/conf/RAMDISK-IMX 1 Nov 2013 20:26:51 -0000 1.5
+++ arch/armv7/conf/RAMDISK-IMX 14 Nov 2013 19:48:04 -0000
@@ -128,6 +128,7 @@ kue* at uhub? # Kawasaki KL5KUSB101B b
smsc* at uhub? # SMSC LAN95xx Ethernet
cdce* at uhub? # CDC Ethernet
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
udav* at uhub? # Davicom DM9601 based Ethernet
url* at uhub? # Realtek RTL8150L based adapters
wi* at uhub? # WaveLAN IEEE 802.11DS
Index: arch/armv7/conf/RAMDISK-OMAP
===================================================================
RCS file: /cvs/src/sys/arch/armv7/conf/RAMDISK-OMAP,v
retrieving revision 1.3
diff -u -p -r1.3 RAMDISK-OMAP
--- arch/armv7/conf/RAMDISK-OMAP 1 Nov 2013 20:26:51 -0000 1.3
+++ arch/armv7/conf/RAMDISK-OMAP 14 Nov 2013 19:48:04 -0000
@@ -140,6 +140,7 @@ uhid* at uhidev? # USB generic HID sup
smsc* at uhub? # SMSC LAN95xx Ethernet
# cdce* at uhub? # CDC Ethernet
# upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+# ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
# udav* at uhub? # Davicom DM9601 based Ethernet
# url* at uhub? # Realtek RTL8150L based adapters
# wi* at uhub? # WaveLAN IEEE 802.11DS
Index: arch/armv7/conf/RAMDISK-SUNXI
===================================================================
RCS file: /cvs/src/sys/arch/armv7/conf/RAMDISK-SUNXI,v
retrieving revision 1.3
diff -u -p -r1.3 RAMDISK-SUNXI
--- arch/armv7/conf/RAMDISK-SUNXI 1 Nov 2013 20:26:51 -0000 1.3
+++ arch/armv7/conf/RAMDISK-SUNXI 14 Nov 2013 19:48:04 -0000
@@ -124,6 +124,7 @@ uhid* at uhidev? # USB generic HID sup
# smsc* at uhub? # SMSC LAN95xx Ethernet
# cdce* at uhub? # CDC Ethernet
# upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+# ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
# udav* at uhub? # Davicom DM9601 based Ethernet
# url* at uhub? # Realtek RTL8150L based adapters
# wi* at uhub? # WaveLAN IEEE 802.11DS
Index: arch/hppa/conf/GENERIC
===================================================================
RCS file: /cvs/src/sys/arch/hppa/conf/GENERIC,v
retrieving revision 1.153
diff -u -p -r1.153 GENERIC
--- arch/hppa/conf/GENERIC 29 Oct 2013 22:37:25 -0000 1.153
+++ arch/hppa/conf/GENERIC 14 Nov 2013 19:48:05 -0000
@@ -152,6 +152,7 @@ cdce* at uhub? # CDC Ethernet
urndis* at uhub? # Remote NDIS Ethernet
udav* at uhub? # Davicom DM9601 based Ethernet
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
wi* at uhub? # WaveLAN IEEE 802.11DS
urio* at uhub? # Diamond Multimedia Rio 500
uyap* at uhub? # Y@P firmware loader
Index: arch/hppa/conf/RAMDISK
===================================================================
RCS file: /cvs/src/sys/arch/hppa/conf/RAMDISK,v
retrieving revision 1.98
diff -u -p -r1.98 RAMDISK
--- arch/hppa/conf/RAMDISK 29 Oct 2013 22:37:25 -0000 1.98
+++ arch/hppa/conf/RAMDISK 14 Nov 2013 19:48:05 -0000
@@ -150,6 +150,7 @@ smsc* at uhub? # SMSC LAN95xx Ethernet
cdce* at uhub? # CDC Ethernet
udav* at uhub? # Davicom DM9601 based Ethernet
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
wi* at uhub? # WaveLAN IEEE 802.11DS
#urio* at uhub? # Diamond Multimedia Rio 500
#uyap* at uhub? # Y@P firmware loader
Index: arch/hppa64/conf/GENERIC
===================================================================
RCS file: /cvs/src/sys/arch/hppa64/conf/GENERIC,v
retrieving revision 1.30
diff -u -p -r1.30 GENERIC
--- arch/hppa64/conf/GENERIC 29 Oct 2013 22:37:25 -0000 1.30
+++ arch/hppa64/conf/GENERIC 14 Nov 2013 19:48:06 -0000
@@ -102,6 +102,7 @@ com1 at ssio? irq 3
#urndis* at uhub? # Remote NDIS Ethernet
#udav* at uhub? # Davicom DM9601 based Ethernet
#upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+#ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
#url* at uhub? # Realtek RTL8150L based adapters
#wi* at uhub? # WaveLAN IEEE 802.11DS
#urio* at uhub? # Diamond Multimedia Rio 500
Index: arch/hppa64/conf/RAMDISK
===================================================================
RCS file: /cvs/src/sys/arch/hppa64/conf/RAMDISK,v
retrieving revision 1.17
diff -u -p -r1.17 RAMDISK
--- arch/hppa64/conf/RAMDISK 29 Oct 2013 22:37:25 -0000 1.17
+++ arch/hppa64/conf/RAMDISK 14 Nov 2013 19:48:06 -0000
@@ -102,6 +102,7 @@ pcmcia* at cardslot?
#cdce* at uhub? # CDC Ethernet
#udav* at uhub? # Davicom DM9601 based Ethernet
#upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+#ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
#url* at uhub? # Realtek RTL8150L based adapters
#wi* at uhub? # WaveLAN IEEE 802.11DS
#urio* at uhub? # Diamond Multimedia Rio 500
Index: arch/i386/conf/GENERIC
===================================================================
RCS file: /cvs/src/sys/arch/i386/conf/GENERIC,v
retrieving revision 1.759
diff -u -p -r1.759 GENERIC
--- arch/i386/conf/GENERIC 31 Oct 2013 09:57:02 -0000 1.759
+++ arch/i386/conf/GENERIC 14 Nov 2013 19:48:07 -0000
@@ -276,6 +276,7 @@ smsc* at uhub? # SMSC LAN95xx Ethernet
cdce* at uhub? # CDC Ethernet
urndis* at uhub? # Remote NDIS Ethernet
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
udav* at uhub? # Davicom DM9601 based Ethernet
mos* at uhub? # MOSCHIP MCS7730/7830 10/100 Ethernet
url* at uhub? # Realtek RTL8150L based adapters
Index: arch/i386/conf/RAMDISKC
===================================================================
RCS file: /cvs/src/sys/arch/i386/conf/RAMDISKC,v
retrieving revision 1.107
diff -u -p -r1.107 RAMDISKC
--- arch/i386/conf/RAMDISKC 28 Oct 2013 12:33:32 -0000 1.107
+++ arch/i386/conf/RAMDISKC 14 Nov 2013 19:48:07 -0000
@@ -116,6 +116,7 @@ wskbd* at ukbd? mux 1
#kue* at uhub? # Kawasaki KL5KUSB101B based Ethernet
#cdce* at uhub? # CDC Ethernet
#upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+#ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
#udav* at uhub? # Davicom DM9601 based Ethernet
#url* at uhub? # Realtek RTL8150L based adapters
#wi* at uhub? # WaveLAN IEEE 802.11DS
Index: arch/i386/conf/RAMDISK_CD
===================================================================
RCS file: /cvs/src/sys/arch/i386/conf/RAMDISK_CD,v
retrieving revision 1.204
diff -u -p -r1.204 RAMDISK_CD
--- arch/i386/conf/RAMDISK_CD 28 Oct 2013 12:33:32 -0000 1.204
+++ arch/i386/conf/RAMDISK_CD 14 Nov 2013 19:48:08 -0000
@@ -131,6 +131,7 @@ cue* at uhub? # CATC USB-EL1201A based
kue* at uhub? # Kawasaki KL5KUSB101B based Ethernet
smsc* at uhub? # SMSC LAN95xx Ethernet
#upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+#ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
#urio* at uhub? # Diamond Multimedia Rio 500
cdce* at uhub? # CDC Ethernet
udav* at uhub? # Davicom DM9601 based Ethernet
Index: arch/landisk/conf/GENERIC
===================================================================
RCS file: /cvs/src/sys/arch/landisk/conf/GENERIC,v
retrieving revision 1.40
diff -u -p -r1.40 GENERIC
--- arch/landisk/conf/GENERIC 5 Sep 2013 19:42:07 -0000 1.40
+++ arch/landisk/conf/GENERIC 14 Nov 2013 19:48:08 -0000
@@ -135,6 +135,7 @@ smsc* at uhub? # SMSC LAN95xx Ethernet
cdce* at uhub? # CDC Ethernet
urndis* at uhub? # Remote NDIS Ethernet
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
udav* at uhub? # Davicom DM9601 based Ethernet
url* at uhub? # Realtek RTL8150L based adapters
wi* at uhub? # WaveLAN IEEE 802.11DS
Index: arch/landisk/conf/RAMDISK
===================================================================
RCS file: /cvs/src/sys/arch/landisk/conf/RAMDISK,v
retrieving revision 1.18
diff -u -p -r1.18 RAMDISK
--- arch/landisk/conf/RAMDISK 20 Aug 2013 09:14:15 -0000 1.18
+++ arch/landisk/conf/RAMDISK 14 Nov 2013 19:48:08 -0000
@@ -99,6 +99,7 @@ kue* at uhub? # Kawasaki KL5KUSB101B ba
smsc* at uhub? # SMSC LAN95xx Ethernet
cdce* at uhub? # CDC Ethernet
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
udav* at uhub? # Davicom DM9601 based Ethernet
url* at uhub? # Realtek RTL8150L based adapters
wi* at uhub? # WaveLAN IEEE 802.11DS
Index: arch/loongson/conf/GENERIC
===================================================================
RCS file: /cvs/src/sys/arch/loongson/conf/GENERIC,v
retrieving revision 1.40
diff -u -p -r1.40 GENERIC
--- arch/loongson/conf/GENERIC 5 Sep 2013 19:42:07 -0000 1.40
+++ arch/loongson/conf/GENERIC 14 Nov 2013 19:48:13 -0000
@@ -147,6 +147,7 @@ uath* at uhub? # Atheros AR5005UG/AR500
udav* at uhub? # Davicom DM9601 based Ethernet
upgt* at uhub? # Conexant/Intersil PrismGT SoftMAC USB
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
ural* at uhub? # Ralink RT2500USB
url* at uhub? # Realtek RTL8150L based adapters
urtw* at uhub? # RealTek 8187
Index: arch/loongson/conf/RAMDISK
===================================================================
RCS file: /cvs/src/sys/arch/loongson/conf/RAMDISK,v
retrieving revision 1.20
diff -u -p -r1.20 RAMDISK
--- arch/loongson/conf/RAMDISK 27 Sep 2012 14:01:35 -0000 1.20
+++ arch/loongson/conf/RAMDISK 14 Nov 2013 19:48:13 -0000
@@ -121,6 +121,7 @@ uath* at uhub? # Atheros AR5005UG/AR500
udav* at uhub? # Davicom DM9601 based Ethernet
upgt* at uhub? # Conexant/Intersil PrismGT SoftMAC USB
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
ural* at uhub? # Ralink RT2500USB
url* at uhub? # Realtek RTL8150L based adapters
urtw* at uhub? # RealTek 8187
Index: arch/macppc/conf/GENERIC
===================================================================
RCS file: /cvs/src/sys/arch/macppc/conf/GENERIC,v
retrieving revision 1.226
diff -u -p -r1.226 GENERIC
--- arch/macppc/conf/GENERIC 5 Sep 2013 19:42:07 -0000 1.226
+++ arch/macppc/conf/GENERIC 14 Nov 2013 19:48:13 -0000
@@ -264,6 +264,7 @@ smsc* at uhub? # SMSC LAN95xx Ethernet
cdce* at uhub? # CDC Ethernet
urndis* at uhub? # Remote NDIS Ethernet
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620A-USB host-to-host `network'
udav* at uhub? # Davicom DM9601 based Ethernet
mos* at uhub? # MOSCHIP MCS7730/7830 10/100 Ethernet
url* at uhub? # Realtek RTL8150L based adapters
Index: arch/macppc/conf/RAMDISK
===================================================================
RCS file: /cvs/src/sys/arch/macppc/conf/RAMDISK,v
retrieving revision 1.96
diff -u -p -r1.96 RAMDISK
--- arch/macppc/conf/RAMDISK 20 Aug 2013 14:27:29 -0000 1.96
+++ arch/macppc/conf/RAMDISK 14 Nov 2013 19:48:13 -0000
@@ -175,6 +175,7 @@ kue* at uhub? # Kawasaki KL5KUSB101B b
smsc* at uhub? # SMSC LAN95xx Ethernet
cdce* at uhub? # CDC Ethernet
upl* at uhub? # Prolific PL2301/PL2302 host-to-host
+ugl* at uhub? # Genesys Logic GL620A-USB host-to-host
udav* at uhub? # Davicom DM9601 based Ethernet
mos* at uhub? # MOSCHIP MCS7730/7830 10/100 Ethernet
ural* at uhub? # Ralink RT2500
Index: arch/sgi/conf/GENERIC-IP27
===================================================================
RCS file: /cvs/src/sys/arch/sgi/conf/GENERIC-IP27,v
retrieving revision 1.47
diff -u -p -r1.47 GENERIC-IP27
--- arch/sgi/conf/GENERIC-IP27 5 Sep 2013 19:42:08 -0000 1.47
+++ arch/sgi/conf/GENERIC-IP27 14 Nov 2013 19:48:20 -0000
@@ -136,6 +136,7 @@ uath* at uhub? # Atheros AR5005UG/AR500
udav* at uhub? # Davicom DM9601 based Ethernet
upgt* at uhub? # Conexant/Intersil PrismGT SoftMAC USB
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
ural* at uhub? # Ralink RT2500USB
url* at uhub? # Realtek RTL8150L based adapters
urtw* at uhub? # RealTek 8187
Index: arch/sgi/conf/GENERIC-IP30
===================================================================
RCS file: /cvs/src/sys/arch/sgi/conf/GENERIC-IP30,v
retrieving revision 1.41
diff -u -p -r1.41 GENERIC-IP30
--- arch/sgi/conf/GENERIC-IP30 5 Sep 2013 19:42:08 -0000 1.41
+++ arch/sgi/conf/GENERIC-IP30 14 Nov 2013 19:48:20 -0000
@@ -128,6 +128,7 @@ uath* at uhub? # Atheros AR5005UG/AR500
udav* at uhub? # Davicom DM9601 based Ethernet
upgt* at uhub? # Conexant/Intersil PrismGT SoftMAC USB
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
ural* at uhub? # Ralink RT2500USB
url* at uhub? # Realtek RTL8150L based adapters
urtw* at uhub? # RealTek 8187
Index: arch/sgi/conf/GENERIC-IP32
===================================================================
RCS file: /cvs/src/sys/arch/sgi/conf/GENERIC-IP32,v
retrieving revision 1.32
diff -u -p -r1.32 GENERIC-IP32
--- arch/sgi/conf/GENERIC-IP32 5 Sep 2013 19:42:08 -0000 1.32
+++ arch/sgi/conf/GENERIC-IP32 14 Nov 2013 19:48:20 -0000
@@ -120,6 +120,7 @@ uath* at uhub? # Atheros AR5005UG/AR500
udav* at uhub? # Davicom DM9601 based Ethernet
upgt* at uhub? # Conexant/Intersil PrismGT SoftMAC USB
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
ural* at uhub? # Ralink RT2500USB
url* at uhub? # Realtek RTL8150L based adapters
urtw* at uhub? # RealTek 8187
Index: arch/sgi/conf/RAMDISK-IP27
===================================================================
RCS file: /cvs/src/sys/arch/sgi/conf/RAMDISK-IP27,v
retrieving revision 1.27
diff -u -p -r1.27 RAMDISK-IP27
--- arch/sgi/conf/RAMDISK-IP27 27 Sep 2012 14:01:35 -0000 1.27
+++ arch/sgi/conf/RAMDISK-IP27 14 Nov 2013 19:48:20 -0000
@@ -130,6 +130,7 @@ uath* at uhub? # Atheros AR5005UG/AR500
udav* at uhub? # Davicom DM9601 based Ethernet
upgt* at uhub? # Conexant/Intersil PrismGT SoftMAC USB
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
ural* at uhub? # Ralink RT2500USB
url* at uhub? # Realtek RTL8150L based adapters
urtw* at uhub? # RealTek 8187
Index: arch/sgi/conf/RAMDISK-IP30
===================================================================
RCS file: /cvs/src/sys/arch/sgi/conf/RAMDISK-IP30,v
retrieving revision 1.23
diff -u -p -r1.23 RAMDISK-IP30
--- arch/sgi/conf/RAMDISK-IP30 27 Sep 2012 14:01:35 -0000 1.23
+++ arch/sgi/conf/RAMDISK-IP30 14 Nov 2013 19:48:20 -0000
@@ -123,6 +123,7 @@ uath* at uhub? # Atheros AR5005UG/AR500
udav* at uhub? # Davicom DM9601 based Ethernet
upgt* at uhub? # Conexant/Intersil PrismGT SoftMAC USB
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
ural* at uhub? # Ralink RT2500USB
url* at uhub? # Realtek RTL8150L based adapters
urtw* at uhub? # RealTek 8187
Index: arch/sgi/conf/RAMDISK-IP32
===================================================================
RCS file: /cvs/src/sys/arch/sgi/conf/RAMDISK-IP32,v
retrieving revision 1.19
diff -u -p -r1.19 RAMDISK-IP32
--- arch/sgi/conf/RAMDISK-IP32 27 Sep 2012 14:01:35 -0000 1.19
+++ arch/sgi/conf/RAMDISK-IP32 14 Nov 2013 19:48:26 -0000
@@ -113,6 +113,7 @@ uath* at uhub? # Atheros AR5005UG/AR500
udav* at uhub? # Davicom DM9601 based Ethernet
upgt* at uhub? # Conexant/Intersil PrismGT SoftMAC USB
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
ural* at uhub? # Ralink RT2500USB
url* at uhub? # Realtek RTL8150L based adapters
urtw* at uhub? # RealTek 8187
Index: arch/sparc64/conf/GENERIC
===================================================================
RCS file: /cvs/src/sys/arch/sparc64/conf/GENERIC,v
retrieving revision 1.273
diff -u -p -r1.273 GENERIC
--- arch/sparc64/conf/GENERIC 5 Sep 2013 19:42:08 -0000 1.273
+++ arch/sparc64/conf/GENERIC 14 Nov 2013 19:48:29 -0000
@@ -218,6 +218,7 @@ urndis* at uhub? # Remote NDIS devices
udav* at uhub? # Davicom DM9601 based Ethernet
mos* at uhub? # MOSCHIP MCS7730/7830 10/100 Ethernet
upl* at uhub? # Prolific PL2301/PL2302 host-to-host `network'
+ugl* at uhub? # Genesys Logic GL620USB-A host-to-host `network'
ural* at uhub? # Ralink RT2500USB
uath* at uhub? # Atheros AR5005UG/AR5005UX
rsu* at uhub? # Realtek RTL8188SU/RTL8191SU/RTL8192SU
Index: arch/zaurus/conf/GENERIC
===================================================================
RCS file: /cvs/src/sys/arch/zaurus/conf/GENERIC,v
retrieving revision 1.89
diff -u -p -r1.89 GENERIC
--- arch/zaurus/conf/GENERIC 20 Aug 2013 14:27:31 -0000 1.89
+++ arch/zaurus/conf/GENERIC 14 Nov 2013 19:48:33 -0000
@@ -115,6 +115,7 @@ smsc* at uhub? # SMSC LAN95xx Ethernet
cdce* at uhub? # CDC Ethernet
urndis* at uhub? # Remote NDIS devices
upl* at uhub? # Prolific PL2301/PL2302 host-to-host
+ugl* at uhub? # Genesys Logic GL620A-USB host-to-host
udav* at uhub? # Davicom DM9601 based Ethernet
ural* at uhub? # Ralink RT2500USB
rum* at uhub? # Ralink RT2501USB/RT2601USB
Index: arch/zaurus/conf/RAMDISK
===================================================================
RCS file: /cvs/src/sys/arch/zaurus/conf/RAMDISK,v
retrieving revision 1.45
diff -u -p -r1.45 RAMDISK
--- arch/zaurus/conf/RAMDISK 20 Aug 2013 14:27:31 -0000 1.45
+++ arch/zaurus/conf/RAMDISK 14 Nov 2013 19:48:33 -0000
@@ -88,6 +88,7 @@ ural* at uhub? # Ralink RT2500
url* at uhub? # Realtek RTL8150L based adapters
wi* at uhub? # WaveLAN IEEE 802.11DS
upl* at uhub? # Prolific PL2301/PL2302 host-to-host
+ugl* at uhub? # Genesys Logic GL620A-USB host-to-host
#uyap* at uhub? # Y@P firmware loader
#ugen* at uhub? # USB Generic driver
umass* at uhub? # USB Mass Storage devices
Index: dev/usb/files.usb
===================================================================
RCS file: /cvs/src/sys/dev/usb/files.usb,v
retrieving revision 1.110
diff -u -p -r1.110 files.usb
--- dev/usb/files.usb 7 Oct 2013 05:37:41 -0000 1.110
+++ dev/usb/files.usb 14 Nov 2013 19:48:38 -0000
@@ -257,6 +257,11 @@ device upl: ifnet
attach upl at uhub
file dev/usb/if_upl.c upl
+# Genesys Logic GL620USB-A host-host
+device ugl: ether, ifnet, ifmedia
+attach ugl at uhub
+file dev/usb/if_ugl.c ugl
+
# Realtek RTL8150L(M)
device url: ether, ifnet, mii
attach url at uhub
Index: dev/usb/if_ugl.c
===================================================================
RCS file: dev/usb/if_ugl.c
diff -N dev/usb/if_ugl.c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ dev/usb/if_ugl.c 14 Nov 2013 19:48:39 -0000
@@ -0,0 +1,938 @@
+/* $OpenBSD$ */
+/*
+ * Copyright (c) 2000 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Lennart Augustsson (
len...@augustsson.net) at
+ * Carlstedt Research & Technology.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Genesys Logic GL620USB-A driver
+ */
+
+#include <bpfilter.h>
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/timeout.h>
+#include <sys/sockio.h>
+#include <sys/mbuf.h>
+#include <sys/kernel.h>
+#include <sys/socket.h>
+
+#include <sys/device.h>
+
+#include <net/if.h>
+#include <net/if_types.h>
+#include <net/if_dl.h>
+#include <net/netisr.h>
+
+#if NBPFILTER > 0
+#include <net/bpf.h>
+#endif
+
+#ifdef INET
+#include <netinet/in.h>
+#include <netinet/in_systm.h>
+#include <netinet/ip.h>
+#include <netinet/if_ether.h>
+#else
+#error ugl without INET?
+#endif
+
+#include <dev/usb/usb.h>
+#include <dev/usb/usbdi.h>
+#include <dev/usb/usbdi_util.h>
+#include <dev/usb/usbdevs.h>
+
+#define UGL_INTR_PKTLEN 8
+#define UGL_BULK_PKTLEN 64
+
+#define UGL_CONFIG_NO 1
+#define UGL_IFACE_IDX 0
+
+/***/
+
+#define UGL_INTR_INTERVAL 20
+
+#define UGL_MAX_MTU 1514
+#define UGL_BUFSZ roundup(sizeof(struct ugl_packet), UGL_BULK_PKTLEN)
+
+#define UGL_RX_FRAMES 1 /* must be one */
+#define UGL_TX_FRAMES 1 /* must be one */
+
+#define UGL_RX_LIST_CNT 1
+#define UGL_TX_LIST_CNT 1
+
+#define UGL_ENDPT_RX 0x0
+#define UGL_ENDPT_TX 0x1
+#define UGL_ENDPT_INTR 0x2
+#define UGL_ENDPT_MAX 0x3
+
+struct ugl_softc;
+
+struct ugl_packet {
+ uDWord pkt_count;
+ uDWord pkt_length;
+ char pkt_data[UGL_MAX_MTU];
+} __packed;
+
+struct ugl_chain {
+ struct ugl_softc *ugl_sc;
+ struct usbd_xfer *ugl_xfer;
+ struct ugl_packet *ugl_buf;
+ struct mbuf *ugl_mbuf;
+ int ugl_idx;
+};
+
+struct ugl_cdata {
+ struct ugl_chain ugl_tx_chain[UGL_TX_LIST_CNT];
+ struct ugl_chain ugl_rx_chain[UGL_RX_LIST_CNT];
+ int ugl_tx_prod;
+ int ugl_tx_cons;
+ int ugl_tx_cnt;
+ int ugl_rx_prod;
+};
+
+struct ugl_softc {
+ struct device sc_dev;
+
+ struct arpcom sc_arpcom;
+#define GET_IFP(sc) (&(sc)->sc_arpcom.ac_if)
+ struct timeout sc_stat_ch;
+
+ struct usbd_device *sc_udev;
+ struct usbd_interface *sc_iface;
+ u_int16_t sc_vendor;
+ u_int16_t sc_product;
+ int sc_ed[UGL_ENDPT_MAX];
+ struct usbd_pipe *sc_ep[UGL_ENDPT_MAX];
+ struct ugl_cdata sc_cdata;
+
+ uByte sc_ibuf[UGL_INTR_PKTLEN];
+
+ int sc_unit;
+ u_int sc_rx_errs;
+ struct timeval sc_rx_notice;
+ u_int sc_intr_errs;
+};
+
+#ifdef UGL_DEBUG
+#define DPRINTF(x) do { if (ugldebug) printf x; } while (0)
+#define DPRINTFN(n,x) do { if (ugldebug >= (n)) printf x; } while (0)
+int ugldebug = 0;
+#else
+#define DPRINTF(x)
+#define DPRINTFN(n,x)
+#endif
+
+extern int ticks;
+
+/*
+ * Various supported device vendors/products.
+ */
+struct usb_devno ugl_devs[] = {
+ { USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GL620USB_A },
+};
+
+int ugl_match(struct device *, void *, void *);
+void ugl_attach(struct device *, struct device *, void *);
+int ugl_detach(struct device *, int);
+int ugl_activate(struct device *, int);
+
+struct cfdriver ugl_cd = {
+ NULL, "ugl", DV_IFNET
+};
+
+const struct cfattach ugl_ca = {
+ sizeof(struct ugl_softc),
+ ugl_match,
+ ugl_attach,
+ ugl_detach,
+ ugl_activate,
+};
+
+int ugl_openpipes(struct ugl_softc *);
+int ugl_tx_list_init(struct ugl_softc *);
+int ugl_rx_list_init(struct ugl_softc *);
+int ugl_newbuf(struct ugl_softc *, struct ugl_chain *, struct mbuf *);
+int ugl_send(struct ugl_softc *, struct mbuf *, int);
+void ugl_intr(struct usbd_xfer *, void *, usbd_status);
+void ugl_rxeof(struct usbd_xfer *, void *, usbd_status);
+void ugl_txeof(struct usbd_xfer *, void *, usbd_status);
+void ugl_start(struct ifnet *);
+int ugl_ioctl(struct ifnet *, u_long, caddr_t);
+void ugl_init(void *);
+void ugl_stop(struct ugl_softc *);
+void ugl_watchdog(struct ifnet *);
+
+/*
+ * Probe for a Genesys Logic chip.
+ */
+int
+ugl_match(struct device *parent, void *match, void *aux)
+{
+ struct usb_attach_arg *uaa = aux;
+
+ if (uaa->iface != NULL)
+ return (UMATCH_NONE);
+
+ return (usb_lookup(ugl_devs, uaa->vendor, uaa->product) != NULL ?
+ UMATCH_VENDOR_PRODUCT : UMATCH_NONE);
+}
+
+void
+ugl_attach(struct device *parent, struct device *self, void *aux)
+{
+ struct ugl_softc *sc = (struct ugl_softc *)self;
+ struct usb_attach_arg *uaa = aux;
+ int s;
+ struct usbd_device *dev = uaa->device;
+ struct usbd_interface *iface;
+ usbd_status err;
+ struct ifnet *ifp;
+ usb_interface_descriptor_t *id;
+ usb_endpoint_descriptor_t *ed;
+ int i;
+ u_int16_t macaddr_hi;
+
+ DPRINTFN(5,(" : ugl_attach: sc=%p, dev=%p", sc, dev));
+
+ err = usbd_set_config_no(dev, UGL_CONFIG_NO, 1);
+ if (err) {
+ printf("%s: setting config no failed\n",
+ sc->sc_dev.dv_xname);
+ return;
+ }
+
+ sc->sc_unit = self->dv_unit;
+ sc->sc_udev = dev;
+ sc->sc_product = uaa->product;
+ sc->sc_vendor = uaa->vendor;
+
+ err = usbd_device2interface_handle(dev, UGL_IFACE_IDX, &iface);
+ if (err) {
+ printf("%s: getting interface handle failed\n",
+ sc->sc_dev.dv_xname);
+ return;
+ }
+
+ sc->sc_iface = iface;
+ id = usbd_get_interface_descriptor(iface);
+
+ /* Find endpoints. */
+ for (i = 0; i < id->bNumEndpoints; i++) {
+ ed = usbd_interface2endpoint_descriptor(iface, i);
+ if (ed == NULL) {
+ printf("%s: couldn't get ep %d\n",
+ sc->sc_dev.dv_xname, i);
+ return;
+ }
+ if (UE_GET_DIR(ed->bEndpointAddress) == UE_DIR_IN &&
+ UE_GET_XFERTYPE(ed->bmAttributes) == UE_BULK) {
+ sc->sc_ed[UGL_ENDPT_RX] = ed->bEndpointAddress;
+ } else if (UE_GET_DIR(ed->bEndpointAddress) == UE_DIR_OUT &&
+ UE_GET_XFERTYPE(ed->bmAttributes) == UE_BULK) {
+ sc->sc_ed[UGL_ENDPT_TX] = ed->bEndpointAddress;
+ } else if (UE_GET_DIR(ed->bEndpointAddress) == UE_DIR_IN &&
+ UE_GET_XFERTYPE(ed->bmAttributes) == UE_INTERRUPT) {
+ sc->sc_ed[UGL_ENDPT_INTR] = ed->bEndpointAddress;
+ }
+ }
+
+ if (sc->sc_ed[UGL_ENDPT_RX] == 0 || sc->sc_ed[UGL_ENDPT_TX] == 0 ||
+ sc->sc_ed[UGL_ENDPT_INTR] == 0) {
+ printf("%s: missing endpoint\n", sc->sc_dev.dv_xname);
+ return;
+ }
+
+ s = splnet();
+
+ macaddr_hi = htons(0x2acb);
+ bcopy(&macaddr_hi, &sc->sc_arpcom.ac_enaddr[0], sizeof(u_int16_t));
+ bcopy(&ticks, &sc->sc_arpcom.ac_enaddr[2], sizeof(u_int32_t));
+ sc->sc_arpcom.ac_enaddr[5] = (u_int8_t)(sc->sc_unit);
+
+ printf("%s: address %s\n",
+ sc->sc_dev.dv_xname, ether_sprintf(sc->sc_arpcom.ac_enaddr));
+
+ /* Initialize interface info.*/
+ ifp = GET_IFP(sc);
+ ifp->if_softc = sc;
+ ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
+ ifp->if_ioctl = ugl_ioctl;
+ ifp->if_start = ugl_start;
+ ifp->if_watchdog = ugl_watchdog;
+ strlcpy(ifp->if_xname, sc->sc_dev.dv_xname, IFNAMSIZ);
+
+ IFQ_SET_READY(&ifp->if_snd);
+
+ /* Attach the interface. */
+ if_attach(ifp);
+ ether_ifattach(ifp);
+
+ splx(s);
+}
+
+int
+ugl_detach(struct device *self, int flags)
+{
+ struct ugl_softc *sc = (struct ugl_softc *)self;
+ struct ifnet *ifp = GET_IFP(sc);
+ int s;
+
+ DPRINTFN(2,("%s: %s: enter\n", sc->sc_dev.dv_xname, __func__));
+
+ s = splusb();
+
+ if (ifp->if_flags & IFF_RUNNING)
+ ugl_stop(sc);
+
+ if (ifp->if_softc != NULL)
+ if_detach(ifp);
+
+#ifdef DIAGNOSTIC
+ if (sc->sc_ep[UGL_ENDPT_TX] != NULL ||
+ sc->sc_ep[UGL_ENDPT_RX] != NULL ||
+ sc->sc_ep[UGL_ENDPT_INTR] != NULL)
+ printf("%s: detach has active endpoints\n",
+ sc->sc_dev.dv_xname);
+#endif
+
+ splx(s);
+
+ return (0);
+}
+
+int
+ugl_activate(struct device *self, int act)
+{
+ struct ugl_softc *sc = (struct ugl_softc *)self;
+
+ switch (act) {
+ case DVACT_DEACTIVATE:
+ usbd_deactivate(sc->sc_udev);
+ break;
+ }
+ return (0);
+}
+
+/*
+ * Initialize an RX descriptor and attach an MBUF cluster.
+ */
+int
+ugl_newbuf(struct ugl_softc *sc, struct ugl_chain *c, struct mbuf *m)
+{
+ struct mbuf *m_new = NULL;
+
+ DPRINTFN(8,("%s: %s: enter\n", sc->sc_dev.dv_xname, __func__));
+
+ if (m == NULL) {
+ MGETHDR(m_new, M_DONTWAIT, MT_DATA);
+ if (m_new == NULL) {
+ printf("%s: no memory for rx list "
+ "-- packet dropped!\n", sc->sc_dev.dv_xname);
+ return (ENOBUFS);
+ }
+
+ MCLGET(m_new, M_DONTWAIT);
+ if (!(m_new->m_flags & M_EXT)) {
+ printf("%s: no memory for rx list "
+ "-- packet dropped!\n", sc->sc_dev.dv_xname);
+ m_freem(m_new);
+ return (ENOBUFS);
+ }
+ m_new->m_len = m_new->m_pkthdr.len = MCLBYTES;
+ } else {
+ m_new = m;
+ m_new->m_len = m_new->m_pkthdr.len = MCLBYTES;
+ m_new->m_data = m_new->m_ext.ext_buf;
+ }
+
+ c->ugl_mbuf = m_new;
+
+ return (0);
+}
+
+int
+ugl_rx_list_init(struct ugl_softc *sc)
+{
+ struct ugl_cdata *cd;
+ struct ugl_chain *c;
+ int i;
+
+ DPRINTFN(5,("%s: %s: enter\n", sc->sc_dev.dv_xname, __func__));
+
+ cd = &sc->sc_cdata;
+ for (i = 0; i < UGL_RX_LIST_CNT; i++) {
+ c = &cd->ugl_rx_chain[i];
+ c->ugl_sc = sc;
+ c->ugl_idx = i;
+ if (ugl_newbuf(sc, c, NULL) == ENOBUFS)
+ return (ENOBUFS);
+ if (c->ugl_xfer == NULL) {
+ c->ugl_xfer = usbd_alloc_xfer(sc->sc_udev);
+ if (c->ugl_xfer == NULL)
+ return (ENOBUFS);
+ c->ugl_buf = usbd_alloc_buffer(c->ugl_xfer, UGL_BUFSZ);
+ if (c->ugl_buf == NULL) {
+ usbd_free_xfer(c->ugl_xfer);
+ return (ENOBUFS);
+ }
+ }
+ }
+
+ return (0);
+}
+
+int
+ugl_tx_list_init(struct ugl_softc *sc)
+{
+ struct ugl_cdata *cd;
+ struct ugl_chain *c;
+ int i;
+
+ DPRINTFN(5,("%s: %s: enter\n", sc->sc_dev.dv_xname, __func__));
+
+ cd = &sc->sc_cdata;
+ for (i = 0; i < UGL_TX_LIST_CNT; i++) {
+ c = &cd->ugl_tx_chain[i];
+ c->ugl_sc = sc;
+ c->ugl_idx = i;
+ c->ugl_mbuf = NULL;
+ if (c->ugl_xfer == NULL) {
+ c->ugl_xfer = usbd_alloc_xfer(sc->sc_udev);
+ if (c->ugl_xfer == NULL)
+ return (ENOBUFS);
+ c->ugl_buf = usbd_alloc_buffer(c->ugl_xfer, UGL_BUFSZ);
+ if (c->ugl_buf == NULL) {
+ usbd_free_xfer(c->ugl_xfer);
+ return (ENOBUFS);
+ }
+ }
+ }
+
+ return (0);
+}
+
+/*
+ * A frame has been uploaded: pass the resulting mbuf chain up to
+ * the higher level protocols.
+ */
+void
+ugl_rxeof(struct usbd_xfer *xfer, void *priv, usbd_status status)
+{
+ struct ugl_chain *c = priv;
+ struct ugl_softc *sc = c->ugl_sc;
+ struct ifnet *ifp = GET_IFP(sc);
+ struct mbuf *m;
+ int total_len = 0;
+ unsigned int packet_len, packet_count;
+ int s;
+
+ if (usbd_is_dying(sc->sc_udev))
+ return;
+
+ if (!(ifp->if_flags & IFF_RUNNING))
+ return;
+
+ if (status != USBD_NORMAL_COMPLETION) {
+ if (status == USBD_NOT_STARTED || status == USBD_CANCELLED)
+ return;
+ sc->sc_rx_errs++;
+ if (usbd_ratecheck(&sc->sc_rx_notice)) {
+ printf("%s: %u usb errors on rx: %s\n",
+ sc->sc_dev.dv_xname, sc->sc_rx_errs,
+ usbd_errstr(status));
+ sc->sc_rx_errs = 0;
+ }
+ if (status == USBD_STALLED)
+ usbd_clear_endpoint_stall_async(sc->sc_ep[UGL_ENDPT_RX]);
+ goto done;
+ }
+
+ usbd_get_xfer_status(xfer, NULL, NULL, &total_len, NULL);
+
+ DPRINTFN(9,("%s: %s: enter status=%d length=%d\n",
+ sc->sc_dev.dv_xname, __func__, status, total_len));
+
+ if (total_len < offsetof(struct ugl_packet, pkt_data)) {
+ printf("%s: bad header (length=%d)\n",
+ sc->sc_dev.dv_xname, total_len);
+
+ goto done;
+ }
+
+ packet_count = UGETDW(c->ugl_buf->pkt_count);
+ if (packet_count != UGL_RX_FRAMES) {
+ printf("%s: bad packet count (%d)\n",
+ sc->sc_dev.dv_xname, packet_count);
+
+ if (packet_count == 0)
+ goto done;
+ }
+
+ packet_len = UGETDW(c->ugl_buf->pkt_length);
+ if (total_len < packet_len) {
+ printf("%s: bad packet size(%d), length=%d\n",
+ sc->sc_dev.dv_xname, packet_len, total_len);
+
+ if (packet_len == 0)
+ goto done;
+ }
+
+ m = c->ugl_mbuf;
+ memcpy(mtod(c->ugl_mbuf, char *), c->ugl_buf->pkt_data, packet_len);
+
+ ifp->if_ipackets++;
+ m->m_pkthdr.len = m->m_len = packet_len;
+
+ m->m_pkthdr.rcvif = ifp;
+
+ s = splnet();
+
+ /* XXX ugly */
+ if (ugl_newbuf(sc, c, NULL) == ENOBUFS) {
+ ifp->if_ierrors++;
+ goto done1;
+ }
+
+#if NBPFILTER > 0
+ /*
+ * Handle BPF listeners. Let the BPF user see the packet, but
+ * don't pass it up to the ether_input() layer unless it's
+ * a broadcast packet, multicast packet, matches our ethernet
+ * address or the interface is in promiscuous mode.
+ */
+ if (ifp->if_bpf) {
+ bpf_mtap(ifp->if_bpf, m, BPF_DIRECTION_IN);
+ }
+#endif
+
+ DPRINTFN(10,("%s: %s: deliver %d\n", sc->sc_dev.dv_xname,
+ __func__, m->m_len));
+
+ ether_input_mbuf(ifp, m);
+
+ done1:
+ splx(s);
+
+ done:
+ /* Setup new transfer. */
+ usbd_setup_xfer(c->ugl_xfer, sc->sc_ep[UGL_ENDPT_RX],
+ c, c->ugl_buf, UGL_BUFSZ, USBD_SHORT_XFER_OK | USBD_NO_COPY,
+ USBD_NO_TIMEOUT, ugl_rxeof);
+ usbd_transfer(c->ugl_xfer);
+
+ DPRINTFN(10,("%s: %s: start rx\n", sc->sc_dev.dv_xname,
+ __func__));
+}
+
+/*
+ * A frame was downloaded to the chip. It's safe for us to clean up
+ * the list buffers.
+ */
+void
+ugl_txeof(struct usbd_xfer *xfer, void *priv, usbd_status status)
+{
+ struct ugl_chain *c = priv;
+ struct ugl_softc *sc = c->ugl_sc;
+ struct ifnet *ifp = GET_IFP(sc);
+ int s;
+
+ if (usbd_is_dying(sc->sc_udev))
+ return;
+
+ s = splnet();
+
+ DPRINTFN(10,("%s: %s: enter status=%d\n", sc->sc_dev.dv_xname,
+ __func__, status));
+
+ ifp->if_timer = 0;
+ ifp->if_flags &= ~IFF_OACTIVE;
+
+ if (status != USBD_NORMAL_COMPLETION) {
+ if (status == USBD_NOT_STARTED || status == USBD_CANCELLED) {
+ splx(s);
+ return;
+ }
+ ifp->if_oerrors++;
+ printf("%s: usb error on tx: %s\n", sc->sc_dev.dv_xname,
+ usbd_errstr(status));
+ if (status == USBD_STALLED)
+ usbd_clear_endpoint_stall_async(sc->sc_ep[UGL_ENDPT_TX]);
+ splx(s);
+ return;
+ }
+
+ ifp->if_opackets++;
+
+ m_freem(c->ugl_mbuf);
+ c->ugl_mbuf = NULL;
+
+ if (IFQ_IS_EMPTY(&ifp->if_snd) == 0)
+ ugl_start(ifp);
+
+ splx(s);
+}
+
+int
+ugl_send(struct ugl_softc *sc, struct mbuf *m, int idx)
+{
+ int total_len;
+ struct ugl_chain *c;
+ usbd_status err;
+
+ c = &sc->sc_cdata.ugl_tx_chain[idx];
+
+ /*
+ * Copy the mbuf data into a contiguous buffer, leaving two
+ * bytes at the beginning to hold the frame length.
+ */
+ USETDW(c->ugl_buf->pkt_count, UGL_TX_FRAMES);
+ USETDW(c->ugl_buf->pkt_length, m->m_pkthdr.len);
+ m_copydata(m, 0, m->m_pkthdr.len, c->ugl_buf->pkt_data);
+ c->ugl_mbuf = m;
+
+ total_len = offsetof(struct ugl_packet, pkt_data[m->m_pkthdr.len]);
+
+ DPRINTFN(10,("%s: %s: total_len=%d\n",
+ sc->sc_dev.dv_xname, __func__, total_len));
+
+ usbd_setup_xfer(c->ugl_xfer, sc->sc_ep[UGL_ENDPT_TX],
+ c, c->ugl_buf, total_len, USBD_FORCE_SHORT_XFER | USBD_NO_COPY,
+ USBD_DEFAULT_TIMEOUT, ugl_txeof);
+
+ /* Transmit */
+ err = usbd_transfer(c->ugl_xfer);
+ if (err != USBD_IN_PROGRESS) {
+ printf("%s: ugl_send error=%s\n", sc->sc_dev.dv_xname,
+ usbd_errstr(err));
+ ugl_stop(sc);
+ return (EIO);
+ }
+
+ sc->sc_cdata.ugl_tx_cnt++;
+
+ return (0);
+}
+
+void
+ugl_start(struct ifnet *ifp)
+{
+ struct ugl_softc *sc = ifp->if_softc;
+ struct mbuf *m_head = NULL;
+
+ if (usbd_is_dying(sc->sc_udev))
+ return;
+
+ DPRINTFN(10,("%s: %s: enter\n", sc->sc_dev.dv_xname,__func__));
+
+ if (ifp->if_flags & IFF_OACTIVE)
+ return;
+
+ IFQ_POLL(&ifp->if_snd, m_head);
+ if (m_head == NULL)
+ return;
+
+ if (ugl_send(sc, m_head, 0)) {
+ ifp->if_flags |= IFF_OACTIVE;
+ return;
+ }
+
+ IFQ_DEQUEUE(&ifp->if_snd, m_head);
+
+#if NBPFILTER > 0
+ /*
+ * If there's a BPF listener, bounce a copy of this frame
+ * to him.
+ */
+ if (ifp->if_bpf)
+ bpf_mtap(ifp->if_bpf, m_head, BPF_DIRECTION_OUT);
+#endif
+
+ ifp->if_flags |= IFF_OACTIVE;
+
+ /*
+ * Set a timeout in case the chip goes out to lunch.
+ */
+ ifp->if_timer = 5;
+}
+
+void
+ugl_init(void *xsc)
+{
+ struct ugl_softc *sc = xsc;
+ struct ifnet *ifp = GET_IFP(sc);
+ int s;
+
+ if (usbd_is_dying(sc->sc_udev))
+ return;
+
+ DPRINTFN(10,("%s: %s: enter\n", sc->sc_dev.dv_xname,__func__));
+
+ if (ifp->if_flags & IFF_RUNNING)
+ return;
+
+ s = splnet();
+
+ /* Init TX ring. */
+ if (ugl_tx_list_init(sc) == ENOBUFS) {
+ printf("%s: tx list init failed\n", sc->sc_dev.dv_xname);
+ splx(s);
+ return;
+ }
+
+ /* Init RX ring. */
+ if (ugl_rx_list_init(sc) == ENOBUFS) {
+ printf("%s: rx list init failed\n", sc->sc_dev.dv_xname);
+ splx(s);
+ return;
+ }
+
+ if (sc->sc_ep[UGL_ENDPT_RX] == NULL) {
+ if (ugl_openpipes(sc)) {
+ splx(s);
+ return;
+ }
+ }
+
+ ifp->if_flags |= IFF_RUNNING;
+ ifp->if_flags &= ~IFF_OACTIVE;
+
+ splx(s);
+}
+
+int
+ugl_openpipes(struct ugl_softc *sc)
+{
+ struct ugl_chain *c;
+ usbd_status err;
+ int i;
+
+ /* Open RX and TX pipes. */
+ err = usbd_open_pipe(sc->sc_iface, sc->sc_ed[UGL_ENDPT_RX],
+ USBD_EXCLUSIVE_USE, &sc->sc_ep[UGL_ENDPT_RX]);
+ if (err) {
+ printf("%s: open rx pipe failed: %s\n",
+ sc->sc_dev.dv_xname, usbd_errstr(err));
+ return (EIO);
+ }
+ err = usbd_open_pipe(sc->sc_iface, sc->sc_ed[UGL_ENDPT_TX],
+ USBD_EXCLUSIVE_USE, &sc->sc_ep[UGL_ENDPT_TX]);
+ if (err) {
+ printf("%s: open tx pipe failed: %s\n",
+ sc->sc_dev.dv_xname, usbd_errstr(err));
+ return (EIO);
+ }
+ err = usbd_open_pipe_intr(sc->sc_iface, sc->sc_ed[UGL_ENDPT_INTR],
+ USBD_EXCLUSIVE_USE, &sc->sc_ep[UGL_ENDPT_INTR], sc,
+ sc->sc_ibuf, UGL_INTR_PKTLEN, ugl_intr,
+ UGL_INTR_INTERVAL);
+ if (err) {
+ printf("%s: open intr pipe failed: %s\n",
+ sc->sc_dev.dv_xname, usbd_errstr(err));
+ return (EIO);
+ }
+
+ /* Start up the receive pipe. */
+ for (i = 0; i < UGL_RX_LIST_CNT; i++) {
+ c = &sc->sc_cdata.ugl_rx_chain[i];
+ usbd_setup_xfer(c->ugl_xfer, sc->sc_ep[UGL_ENDPT_RX],
+ c, c->ugl_buf, UGL_BUFSZ,
+ USBD_SHORT_XFER_OK | USBD_NO_COPY, USBD_NO_TIMEOUT,
+ ugl_rxeof);
+ usbd_transfer(c->ugl_xfer);
+ }
+
+ return (0);
+}
+
+void
+ugl_intr(struct usbd_xfer *xfer, void *priv, usbd_status status)
+{
+ struct ugl_softc *sc = priv;
+ struct ifnet *ifp = GET_IFP(sc);
+ int i;
+
+ DPRINTFN(15,("%s: %s: enter\n", sc->sc_dev.dv_xname,__func__));
+
+ if (usbd_is_dying(sc->sc_udev))
+ return;
+
+ if (!(ifp->if_flags & IFF_RUNNING))
+ return;
+
+ if (status != USBD_NORMAL_COMPLETION) {
+ if (status == USBD_NOT_STARTED || status == USBD_CANCELLED) {
+ return;
+ }
+ sc->sc_intr_errs++;
+ if (usbd_ratecheck(&sc->sc_rx_notice)) {
+ printf("%s: %u usb errors on intr: %s\n",
+ sc->sc_dev.dv_xname, sc->sc_rx_errs,
+ usbd_errstr(status));
+ sc->sc_intr_errs = 0;
+ }
+ if (status == USBD_STALLED)
+ usbd_clear_endpoint_stall_async(sc->sc_ep[UGL_ENDPT_RX]);
+ return;
+ }
+
+ DPRINTFN(10,("%s: %s:", sc->sc_dev.dv_xname, __func__));
+ for (i = 0; i < UGL_INTR_PKTLEN; i++)
+ DPRINTFN(10,(" 0x%02x", sc->sc_ibuf[i]));
+ DPRINTFN(10,("\n"));
+
+}
+
+int
+ugl_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
+{
+ struct ugl_softc *sc = ifp->if_softc;
+ struct ifaddr *ifa = (struct ifaddr *)data;
+ struct ifreq *ifr = (struct ifreq *)data;
+ int s, error = 0;
+
+ if (usbd_is_dying(sc->sc_udev))
+ return (EIO);
+
+ DPRINTFN(5,("%s: %s: cmd=0x%08lx\n",
+ sc->sc_dev.dv_xname, __func__, command));
+
+ s = splnet();
+
+ switch(command) {
+ case SIOCSIFADDR:
+ ifp->if_flags |= IFF_UP;
+ ugl_init(sc);
+
+ switch (ifa->ifa_addr->sa_family) {
+#ifdef INET
+ case AF_INET:
+ arp_ifinit(&sc->sc_arpcom, ifa);
+ break;
+#endif /* INET */
+ }
+ break;
+
+ case SIOCSIFMTU:
+ if (ifr->ifr_mtu > UGL_MAX_MTU)
+ error = EINVAL;
+ else
+ ifp->if_mtu = ifr->ifr_mtu;
+ break;
+
+ case SIOCSIFFLAGS:
+ if (ifp->if_flags & IFF_UP) {
+ if (!(ifp->if_flags & IFF_RUNNING))
+ ugl_init(sc);
+ } else {
+ if (ifp->if_flags & IFF_RUNNING)
+ ugl_stop(sc);
+ }
+ error = 0;
+ break;
+ default:
+ error = ENOTTY;
+ break;
+ }
+
+ splx(s);
+ return (error);
+}
+
+void
+ugl_watchdog(struct ifnet *ifp)
+{
+ struct ugl_softc *sc = ifp->if_softc;
+
+ if (usbd_is_dying(sc->sc_udev))
+ return;
+
+ ifp->if_oerrors++;
+ printf("%s: watchdog timeout\n", sc->sc_dev.dv_xname);
+}
+
+/*
+ * Stop the adapter and free any mbufs allocated to the
+ * RX and TX lists.
+ */
+void
+ugl_stop(struct ugl_softc *sc)
+{
+ struct ifnet *ifp;
+ int i;
+
+ DPRINTFN(10,("%s: %s: enter\n", sc->sc_dev.dv_xname,__func__));
+
+ ifp = GET_IFP(sc);
+ ifp->if_timer = 0;
+ ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
+
+ /* Stop transfers. */
+ if (sc->sc_ep[UGL_ENDPT_RX] != NULL) {
+ usbd_abort_pipe(sc->sc_ep[UGL_ENDPT_RX]);
+ usbd_close_pipe(sc->sc_ep[UGL_ENDPT_RX]);
+ sc->sc_ep[UGL_ENDPT_RX] = NULL;
+ }
+
+ if (sc->sc_ep[UGL_ENDPT_TX] != NULL) {
+ usbd_abort_pipe(sc->sc_ep[UGL_ENDPT_TX]);
+ usbd_close_pipe(sc->sc_ep[UGL_ENDPT_TX]);
+ sc->sc_ep[UGL_ENDPT_TX] = NULL;
+ }
+
+ if (sc->sc_ep[UGL_ENDPT_INTR] != NULL) {
+ usbd_abort_pipe(sc->sc_ep[UGL_ENDPT_INTR]);
+ usbd_close_pipe(sc->sc_ep[UGL_ENDPT_INTR]);
+ sc->sc_ep[UGL_ENDPT_INTR] = NULL;
+ }
+
+ /* Free RX resources. */
+ for (i = 0; i < UGL_RX_LIST_CNT; i++) {
+ if (sc->sc_cdata.ugl_rx_chain[i].ugl_mbuf != NULL) {
+ m_freem(sc->sc_cdata.ugl_rx_chain[i].ugl_mbuf);
+ sc->sc_cdata.ugl_rx_chain[i].ugl_mbuf = NULL;
+ }
+ if (sc->sc_cdata.ugl_rx_chain[i].ugl_xfer != NULL) {
+ usbd_free_xfer(sc->sc_cdata.ugl_rx_chain[i].ugl_xfer);
+ sc->sc_cdata.ugl_rx_chain[i].ugl_xfer = NULL;
+ }
+ }
+
+ /* Free TX resources. */
+ for (i = 0; i < UGL_TX_LIST_CNT; i++) {
+ if (sc->sc_cdata.ugl_tx_chain[i].ugl_mbuf != NULL) {
+ m_freem(sc->sc_cdata.ugl_tx_chain[i].ugl_mbuf);
+ sc->sc_cdata.ugl_tx_chain[i].ugl_mbuf = NULL;
+ }
+ if (sc->sc_cdata.ugl_tx_chain[i].ugl_xfer != NULL) {
+ usbd_free_xfer(sc->sc_cdata.ugl_tx_chain[i].ugl_xfer);
+ sc->sc_cdata.ugl_tx_chain[i].ugl_xfer = NULL;
+ }
+ }
+}
Index: dev/usb/usbdevs
===================================================================
RCS file: /cvs/src/sys/dev/usb/usbdevs,v
retrieving revision 1.610
diff -u -p -r1.610 usbdevs
--- dev/usb/usbdevs 30 Oct 2013 12:28:19 -0000 1.610
+++ dev/usb/usbdevs 14 Nov 2013 19:48:47 -0000
@@ -1921,6 +1921,7 @@ product GCTSEMICON INSTALL 0x7f40 GDM720
product GEMPLUS PROXPU 0x5501 Prox-PU/CU
/* Genesys Logic products */
+product GENESYS GL620USB_A 0x0502 GL620USB-A GeneLink USB-USB Bridge
product GENESYS GENELINK 0x05e3 GeneLink Host-Host Bridge
product GENESYS GL650 0x0604 GL650 Hub
product GENESYS GL641USB 0x0700 GL641USB CompactFlash
Index: dev/usb/usbdevs.h
===================================================================
RCS file: /cvs/src/sys/dev/usb/usbdevs.h,v
retrieving revision 1.621
diff -u -p -r1.621 usbdevs.h
--- dev/usb/usbdevs.h 30 Oct 2013 12:35:31 -0000 1.621
+++ dev/usb/usbdevs.h 14 Nov 2013 19:48:59 -0000
@@ -1928,6 +1928,7 @@
#define USB_PRODUCT_GEMPLUS_PROXPU 0x5501 /* Prox-PU/CU */
/* Genesys Logic products */
+#define USB_PRODUCT_GENESYS_GL620USB_A 0x0502 /* GL620USB-A GeneLink USB-USB Bridge */
#define USB_PRODUCT_GENESYS_GENELINK 0x05e3 /* GeneLink Host-Host Bridge */
#define USB_PRODUCT_GENESYS_GL650 0x0604 /* GL650 Hub */
#define USB_PRODUCT_GENESYS_GL641USB 0x0700 /* GL641USB CompactFlash */
Index: dev/usb/usbdevs_data.h
===================================================================
RCS file: /cvs/src/sys/dev/usb/usbdevs_data.h,v
retrieving revision 1.615
diff -u -p -r1.615 usbdevs_data.h
--- dev/usb/usbdevs_data.h 30 Oct 2013 12:35:31 -0000 1.615
+++ dev/usb/usbdevs_data.h 14 Nov 2013 19:49:07 -0000
@@ -3850,6 +3850,10 @@ const struct usb_known_product usb_known
"Prox-PU/CU",
},
{
+ USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GL620USB_A,
+ "GL620USB-A GeneLink USB-USB Bridge",
+ },
+ {
USB_VENDOR_GENESYS, USB_PRODUCT_GENESYS_GENELINK,
"GeneLink Host-Host Bridge",
},