Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Genesys Logic GL620USB-A, USB PC-to-PC link cable

173 views
Skip to first unread message

SASANO Takayoshi

unread,
Oct 25, 2013, 3:34:20 PM10/25/13
to
Hello,

I wrote a driver for Genesys Logic's GL620USB-A to test my USB
PC-to-PC link cable. This controller is old (USB 1.1 age!) but
GL620USB-A based link cable is still sold at eBay.

To support GL620USB-A, I modified sys/dev/usb/if_upl.c (Prolific
PL-2301/2302 driver) and added some stuffs. These kind of devices
simply provide communication pipes on USB, and I heard that PL-2301
driver can drive GL620USB-A with adding idVendor/idProduct. [1]

This is simple resolution but it limits the peer to OpenBSD box. So I
wrote GL620USB-A driver as new one to be compatible with Linux's
usbnet driver. [2]

I named the driver ugl(if_ugl.c) and tested it on
OpenBSD-current/amd64 with Slackware-14.0. The patch is at
http://www2192ue.sakura.ne.jp/~uaa/gomitext/2013/20131023/20131026.diff

Is anyone interested in the driver for such an old device?
Any comments and advices are appreciated.

[1] http://circuithijacker.blogspot.jp/2007/02/usb-host-to-host-cables-with-slax-linux.html
[2] http://www.linux-usb.org/usbnet/

Best regards,
--
SASANO Takayoshi <u...@mx5.nisiq.net>

Martin Pieuchot

unread,
Oct 29, 2013, 5:55:45 AM10/29/13
to
This looks good to me, I think you can put it in. Here's some small
comments:

- You don't need to protect your device from being detached before it is
properly attached because both events are triggered by the same task
and cannot run in parallel. In other words you can remove the
"sc_attached" dance.

- Can you replace "sc_dying" by usbd_is_dying(), this will also allow
you to kill ugl_activate()?

- You can remove the error check when aborting a pipe, this function
cannot fail :)

- Why do you have an "#if 1" around the setup of your transfers and
pipe? Just kill it ;)

Other than that I'd say ok mpi@, but don't forget the man page and
enable it where upl(4) is enable!

Cheers,
Martin

SASANO Takayoshi

unread,
Nov 14, 2013, 3:29:59 PM11/14/13
to
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",
},

Brad Smith

unread,
Nov 14, 2013, 5:44:42 PM11/14/13
to
On 14/11/13 3:29 PM, SASANO Takayoshi wrote:
> 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.

IMO this is in good enough shape to get it into the tree as is. There
are a few issues that need fixing but it would be better to fix them
once this has been commited to the tree.

--
This message has been scanned for viruses and
dangerous content by MailScanner, and is
believed to be clean.

Martin Pieuchot

unread,
Nov 15, 2013, 4:56:37 AM11/15/13
to
On 14/11/13(Thu) 17:44, Brad Smith wrote:
> On 14/11/13 3:29 PM, SASANO Takayoshi wrote:
> >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.
>
> IMO this is in good enough shape to get it into the tree as is.
> There are a few issues that need fixing but it would be better to
> fix them once this has been commited to the tree.

I totally agree, please put it in.

M.

SASANO Takayoshi

unread,
Nov 15, 2013, 2:44:43 PM11/15/13
to
Hello,

I committed ugl(4) driver to source tree.
The driver is derived from upl(4) driver, so licence is NetBSD.

Thanks.
--
SASANO Takayoshi <u...@mx5.nisiq.net>

At Fri, 15 Nov 2013 10:56:37 +0100,

SASANO Takayoshi

unread,
Nov 16, 2013, 5:29:10 AM11/16/13
to
Hello,

Oh, I forgot to write man. Here is...

Index: ugl.4
===================================================================
RCS file: ugl.4
diff -N ugl.4
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ ugl.4 16 Nov 2013 10:26:45 -0000
@@ -0,0 +1,55 @@
+.\" $OpenBSD$
+.\" $NetBSD: upl.4,v 1.3 2000/08/12 17:59:12 augustss Exp $
+.\"
+.\" Copyright (c) 2000 The NetBSD Foundation, Inc.
+.\" All rights reserved.
+.\"
+.\" This code is derived from software contributed to The NetBSD Foundation
+.\" by Lennart Augustsson.
+.\"
+.\" 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.
+.\"
+.Dd $Mdocdate: November 16 2013 $
+.Dt UGL 4
+.Os
+.Sh NAME
+.Nm ugl
+.Nd Genesys Logic based host-to-host adapters
+.Sh SYNOPSIS
+.Cd "ugl* at uhub?"
+.Sh DESCRIPTION
+The
+.Nm
+driver provides support for Genesys Logic GL620USB-A based host-to-host
+USB connectors.
+.Pp
+The
+.Nm
+driver appears as an Ethernet interface and should be configured with
+.Xr ifconfig 8
+in the same way as other Ethernet interfaces.
+It does not support different media types or options.
+.Sh SEE ALSO
+.Xr netintro 4 ,
+.Xr uhub 4 ,
+.Xr usb 4 ,
+.Xr ifconfig 8

--
SASANO Takayoshi <u...@mx5.nisiq.net>

SASANO Takayoshi

unread,
Dec 3, 2013, 3:58:06 PM12/3/13
to
Hello,

jca@ privately advised that I should write my own copyright to
describe who modified the code.

I am planning to add notice like if_axe.c and sent the diff to
him but there is no answer (too busy?). So I ask here.

Is there any good solution?

Thanks,
----
SASANO Takayoshi <u...@mx5.nisiq.net>

Index: if_ugl.c
===================================================================
RCS file: /cvs/src/sys/dev/usb/if_ugl.c,v
retrieving revision 1.1
diff -u -p -r1.1 if_ugl.c
--- if_ugl.c 15 Nov 2013 19:42:20 -0000 1.1
+++ if_ugl.c 3 Dec 2013 20:36:32 -0000
@@ -1,6 +1,22 @@
/* $OpenBSD: if_ugl.c,v 1.1 2013/11/15 19:42:20 sasano Exp $ */
/* $NetBSD: if_upl.c,v 1.19 2002/07/11 21:14:26 augustss Exp $ */
/*
+ * Copyright (c) 2013 SASANO Takayoshi <u...@uaa.org.uk>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/*
* Copyright (c) 2000 The NetBSD Foundation, Inc.
* All rights reserved.
*

0 new messages