summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsasano <sasano@openbsd.org>2013-11-15 19:42:19 +0000
committersasano <sasano@openbsd.org>2013-11-15 19:42:19 +0000
commite737cace1f90b7edb44ca1b2e535b985306471ae (patch)
tree8559b440b9141ea1bfdfa1850602b45ed3f218e6
parentansify some function definitions. (diff)
downloadwireguard-openbsd-e737cace1f90b7edb44ca1b2e535b985306471ae.tar.xz
wireguard-openbsd-e737cace1f90b7edb44ca1b2e535b985306471ae.zip
Added dev/usb/if_ugl.c, a driver for Genesys Logic GL620USB-A
USB host-to-host link cable. This driver is derived from upl(4).
-rw-r--r--sys/arch/alpha/conf/GENERIC3
-rw-r--r--sys/arch/alpha/conf/RAMDISKBIG3
-rw-r--r--sys/arch/amd64/conf/GENERIC3
-rw-r--r--sys/arch/amd64/conf/RAMDISK3
-rw-r--r--sys/arch/amd64/conf/RAMDISK_CD3
-rw-r--r--sys/arch/armish/conf/GENERIC3
-rw-r--r--sys/arch/armish/conf/RAMDISK3
-rw-r--r--sys/arch/armv7/conf/GENERIC-IMX3
-rw-r--r--sys/arch/armv7/conf/GENERIC-OMAP3
-rw-r--r--sys/arch/armv7/conf/GENERIC-SUNXI3
-rw-r--r--sys/arch/armv7/conf/RAMDISK-IMX3
-rw-r--r--sys/arch/armv7/conf/RAMDISK-OMAP3
-rw-r--r--sys/arch/armv7/conf/RAMDISK-SUNXI3
-rw-r--r--sys/arch/hppa/conf/GENERIC3
-rw-r--r--sys/arch/hppa/conf/RAMDISK3
-rw-r--r--sys/arch/hppa64/conf/GENERIC3
-rw-r--r--sys/arch/hppa64/conf/RAMDISK3
-rw-r--r--sys/arch/i386/conf/GENERIC3
-rw-r--r--sys/arch/i386/conf/RAMDISKC3
-rw-r--r--sys/arch/i386/conf/RAMDISK_CD3
-rw-r--r--sys/arch/landisk/conf/GENERIC3
-rw-r--r--sys/arch/landisk/conf/RAMDISK3
-rw-r--r--sys/arch/loongson/conf/GENERIC3
-rw-r--r--sys/arch/loongson/conf/RAMDISK3
-rw-r--r--sys/arch/macppc/conf/GENERIC3
-rw-r--r--sys/arch/macppc/conf/RAMDISK3
-rw-r--r--sys/arch/sgi/conf/GENERIC-IP273
-rw-r--r--sys/arch/sgi/conf/GENERIC-IP303
-rw-r--r--sys/arch/sgi/conf/GENERIC-IP323
-rw-r--r--sys/arch/sgi/conf/RAMDISK-IP273
-rw-r--r--sys/arch/sgi/conf/RAMDISK-IP303
-rw-r--r--sys/arch/sgi/conf/RAMDISK-IP323
-rw-r--r--sys/arch/sparc64/conf/GENERIC3
-rw-r--r--sys/arch/zaurus/conf/GENERIC3
-rw-r--r--sys/arch/zaurus/conf/RAMDISK3
-rw-r--r--sys/dev/usb/files.usb7
-rw-r--r--sys/dev/usb/if_ugl.c940
-rw-r--r--sys/dev/usb/usbdevs3
-rw-r--r--sys/dev/usb/usbdevs.h3
-rw-r--r--sys/dev/usb/usbdevs_data.h6
40 files changed, 1025 insertions, 39 deletions
diff --git a/sys/arch/alpha/conf/GENERIC b/sys/arch/alpha/conf/GENERIC
index 5b4af778e24..e241c9313dd 100644
--- a/sys/arch/alpha/conf/GENERIC
+++ b/sys/arch/alpha/conf/GENERIC
@@ -1,4 +1,4 @@
-# $OpenBSD: GENERIC,v 1.234 2013/10/29 22:33:10 deraadt Exp $
+# $OpenBSD: GENERIC,v 1.235 2013/11/15 19:42:19 sasano Exp $
#
# For further information on compiling OpenBSD kernels, see the config(8)
# man page.
@@ -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
diff --git a/sys/arch/alpha/conf/RAMDISKBIG b/sys/arch/alpha/conf/RAMDISKBIG
index a782bd9d17d..7ee9fb10df4 100644
--- a/sys/arch/alpha/conf/RAMDISKBIG
+++ b/sys/arch/alpha/conf/RAMDISKBIG
@@ -1,4 +1,4 @@
-# $OpenBSD: RAMDISKBIG,v 1.89 2013/10/29 22:33:10 deraadt Exp $
+# $OpenBSD: RAMDISKBIG,v 1.90 2013/11/15 19:42:20 sasano Exp $
# $NetBSD: GENERIC,v 1.31 1996/12/03 17:25:29 cgd Exp $
#
# Generic Alpha kernel. Enough to get booted, etc., but not much more.
@@ -95,6 +95,7 @@ kue* at uhub? # Kawasaki KL5KUSB101B based Ethernet
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
diff --git a/sys/arch/amd64/conf/GENERIC b/sys/arch/amd64/conf/GENERIC
index 15376392185..a0918411932 100644
--- a/sys/arch/amd64/conf/GENERIC
+++ b/sys/arch/amd64/conf/GENERIC
@@ -1,4 +1,4 @@
-# $OpenBSD: GENERIC,v 1.352 2013/11/04 14:07:15 deraadt Exp $
+# $OpenBSD: GENERIC,v 1.353 2013/11/15 19:42:20 sasano Exp $
#
# For further information on compiling OpenBSD kernels, see the config(8)
# man page.
@@ -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
diff --git a/sys/arch/amd64/conf/RAMDISK b/sys/arch/amd64/conf/RAMDISK
index 1d572164ead..109174572f0 100644
--- a/sys/arch/amd64/conf/RAMDISK
+++ b/sys/arch/amd64/conf/RAMDISK
@@ -1,4 +1,4 @@
-# $OpenBSD: RAMDISK,v 1.59 2013/10/29 22:37:25 deraadt Exp $
+# $OpenBSD: RAMDISK,v 1.60 2013/11/15 19:42:20 sasano Exp $
machine amd64 # architecture, used by config; REQUIRED
@@ -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
diff --git a/sys/arch/amd64/conf/RAMDISK_CD b/sys/arch/amd64/conf/RAMDISK_CD
index 4d3fbbc6c94..eeeedc8011c 100644
--- a/sys/arch/amd64/conf/RAMDISK_CD
+++ b/sys/arch/amd64/conf/RAMDISK_CD
@@ -1,4 +1,4 @@
-# $OpenBSD: RAMDISK_CD,v 1.131 2013/11/04 14:07:15 deraadt Exp $
+# $OpenBSD: RAMDISK_CD,v 1.132 2013/11/15 19:42:20 sasano Exp $
machine amd64 # architecture, used by config; REQUIRED
@@ -116,6 +116,7 @@ mos* at uhub? # MOSCHIP MCS7730/7830 10/100 Ethernet
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
diff --git a/sys/arch/armish/conf/GENERIC b/sys/arch/armish/conf/GENERIC
index 47fe249a9d4..c9b277bb951 100644
--- a/sys/arch/armish/conf/GENERIC
+++ b/sys/arch/armish/conf/GENERIC
@@ -1,4 +1,4 @@
-# $OpenBSD: GENERIC,v 1.49 2013/09/05 19:42:06 sasano Exp $
+# $OpenBSD: GENERIC,v 1.50 2013/11/15 19:42:20 sasano Exp $
#
# For further information on compiling OpenBSD kernels, see the config(8)
# man page.
@@ -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
diff --git a/sys/arch/armish/conf/RAMDISK b/sys/arch/armish/conf/RAMDISK
index 308b0bf8e26..121e3ed8081 100644
--- a/sys/arch/armish/conf/RAMDISK
+++ b/sys/arch/armish/conf/RAMDISK
@@ -1,4 +1,4 @@
-# $OpenBSD: RAMDISK,v 1.26 2013/08/20 14:27:26 ajacoutot Exp $
+# $OpenBSD: RAMDISK,v 1.27 2013/11/15 19:42:20 sasano Exp $
#
# For further information on compiling OpenBSD kernels, see the config(8)
# man page.
@@ -132,6 +132,7 @@ kue* at uhub? # Kawasaki KL5KUSB101B based Ethernet
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
diff --git a/sys/arch/armv7/conf/GENERIC-IMX b/sys/arch/armv7/conf/GENERIC-IMX
index f7779591872..265a3ab6798 100644
--- a/sys/arch/armv7/conf/GENERIC-IMX
+++ b/sys/arch/armv7/conf/GENERIC-IMX
@@ -1,4 +1,4 @@
-# $OpenBSD: GENERIC-IMX,v 1.3 2013/10/05 23:05:11 patrick Exp $
+# $OpenBSD: GENERIC-IMX,v 1.4 2013/11/15 19:42:20 sasano Exp $
#
# GENERIC machine description file
#
@@ -118,6 +118,7 @@ kue* at uhub? # Kawasaki KL5KUSB101B based Ethernet
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
diff --git a/sys/arch/armv7/conf/GENERIC-OMAP b/sys/arch/armv7/conf/GENERIC-OMAP
index dd414f04f2b..37560854401 100644
--- a/sys/arch/armv7/conf/GENERIC-OMAP
+++ b/sys/arch/armv7/conf/GENERIC-OMAP
@@ -1,4 +1,4 @@
-# $OpenBSD: GENERIC-OMAP,v 1.3 2013/10/18 15:25:03 syl Exp $
+# $OpenBSD: GENERIC-OMAP,v 1.4 2013/11/15 19:42:20 sasano Exp $
#
# GENERIC machine description file
#
@@ -127,6 +127,7 @@ kue* at uhub? # Kawasaki KL5KUSB101B based Ethernet
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
diff --git a/sys/arch/armv7/conf/GENERIC-SUNXI b/sys/arch/armv7/conf/GENERIC-SUNXI
index b33222f6198..b353eafbd45 100644
--- a/sys/arch/armv7/conf/GENERIC-SUNXI
+++ b/sys/arch/armv7/conf/GENERIC-SUNXI
@@ -1,4 +1,4 @@
-# $OpenBSD: GENERIC-SUNXI,v 1.2 2013/10/27 03:06:25 aalm Exp $
+# $OpenBSD: GENERIC-SUNXI,v 1.3 2013/11/15 19:42:20 sasano Exp $
#
# GENERIC machine description file
#
@@ -121,6 +121,7 @@ kue* at uhub? # Kawasaki KL5KUSB101B based Ethernet
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
diff --git a/sys/arch/armv7/conf/RAMDISK-IMX b/sys/arch/armv7/conf/RAMDISK-IMX
index cc6c528aefc..51c26e20f11 100644
--- a/sys/arch/armv7/conf/RAMDISK-IMX
+++ b/sys/arch/armv7/conf/RAMDISK-IMX
@@ -1,4 +1,4 @@
-# $OpenBSD: RAMDISK-IMX,v 1.5 2013/11/01 20:26:51 jasper Exp $
+# $OpenBSD: RAMDISK-IMX,v 1.6 2013/11/15 19:42:20 sasano Exp $
#
# GENERIC machine description file
#
@@ -128,6 +128,7 @@ kue* at uhub? # Kawasaki KL5KUSB101B based Ethernet
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
diff --git a/sys/arch/armv7/conf/RAMDISK-OMAP b/sys/arch/armv7/conf/RAMDISK-OMAP
index 0e20ce08885..254cfd9fc5a 100644
--- a/sys/arch/armv7/conf/RAMDISK-OMAP
+++ b/sys/arch/armv7/conf/RAMDISK-OMAP
@@ -1,4 +1,4 @@
-# $OpenBSD: RAMDISK-OMAP,v 1.3 2013/11/01 20:26:51 jasper Exp $
+# $OpenBSD: RAMDISK-OMAP,v 1.4 2013/11/15 19:42:20 sasano Exp $
#
# GENERIC machine description file
#
@@ -140,6 +140,7 @@ uhid* at uhidev? # USB generic HID support
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
diff --git a/sys/arch/armv7/conf/RAMDISK-SUNXI b/sys/arch/armv7/conf/RAMDISK-SUNXI
index a9d8c0d5a4a..d4d03bdf129 100644
--- a/sys/arch/armv7/conf/RAMDISK-SUNXI
+++ b/sys/arch/armv7/conf/RAMDISK-SUNXI
@@ -1,4 +1,4 @@
-# $OpenBSD: RAMDISK-SUNXI,v 1.3 2013/11/01 20:26:51 jasper Exp $
+# $OpenBSD: RAMDISK-SUNXI,v 1.4 2013/11/15 19:42:20 sasano Exp $
#
# GENERIC machine description file
#
@@ -124,6 +124,7 @@ uhid* at uhidev? # USB generic HID support
# 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
diff --git a/sys/arch/hppa/conf/GENERIC b/sys/arch/hppa/conf/GENERIC
index e0aba489af8..c6b4876a01e 100644
--- a/sys/arch/hppa/conf/GENERIC
+++ b/sys/arch/hppa/conf/GENERIC
@@ -1,4 +1,4 @@
-# $OpenBSD: GENERIC,v 1.153 2013/10/29 22:37:25 deraadt Exp $
+# $OpenBSD: GENERIC,v 1.154 2013/11/15 19:42:20 sasano Exp $
#
# For further information on compiling OpenBSD kernels, see the config(8)
# man page.
@@ -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
diff --git a/sys/arch/hppa/conf/RAMDISK b/sys/arch/hppa/conf/RAMDISK
index d5d75659c6b..276ac3940a9 100644
--- a/sys/arch/hppa/conf/RAMDISK
+++ b/sys/arch/hppa/conf/RAMDISK
@@ -1,4 +1,4 @@
-# $OpenBSD: RAMDISK,v 1.98 2013/10/29 22:37:25 deraadt Exp $
+# $OpenBSD: RAMDISK,v 1.99 2013/11/15 19:42:20 sasano Exp $
#
# Diskless kernel config
#
@@ -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
diff --git a/sys/arch/hppa64/conf/GENERIC b/sys/arch/hppa64/conf/GENERIC
index 93e9525bd5c..7adbcf41c66 100644
--- a/sys/arch/hppa64/conf/GENERIC
+++ b/sys/arch/hppa64/conf/GENERIC
@@ -1,4 +1,4 @@
-# $OpenBSD: GENERIC,v 1.30 2013/10/29 22:37:25 deraadt Exp $
+# $OpenBSD: GENERIC,v 1.31 2013/11/15 19:42:20 sasano Exp $
#
# For further information on compiling OpenBSD kernels, see the config(8)
# man page.
@@ -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
diff --git a/sys/arch/hppa64/conf/RAMDISK b/sys/arch/hppa64/conf/RAMDISK
index 34e4dae9140..bee0317c344 100644
--- a/sys/arch/hppa64/conf/RAMDISK
+++ b/sys/arch/hppa64/conf/RAMDISK
@@ -1,4 +1,4 @@
-# $OpenBSD: RAMDISK,v 1.17 2013/10/29 22:37:25 deraadt Exp $
+# $OpenBSD: RAMDISK,v 1.18 2013/11/15 19:42:20 sasano Exp $
#
# Diskless kernel config
#
@@ -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
diff --git a/sys/arch/i386/conf/GENERIC b/sys/arch/i386/conf/GENERIC
index 880964e76df..f82e559f111 100644
--- a/sys/arch/i386/conf/GENERIC
+++ b/sys/arch/i386/conf/GENERIC
@@ -1,4 +1,4 @@
-# $OpenBSD: GENERIC,v 1.760 2013/11/04 14:07:16 deraadt Exp $
+# $OpenBSD: GENERIC,v 1.761 2013/11/15 19:42:20 sasano Exp $
#
# For further information on compiling OpenBSD kernels, see the config(8)
# man page.
@@ -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
diff --git a/sys/arch/i386/conf/RAMDISKC b/sys/arch/i386/conf/RAMDISKC
index 87e970d848f..00ec9374f6e 100644
--- a/sys/arch/i386/conf/RAMDISKC
+++ b/sys/arch/i386/conf/RAMDISKC
@@ -1,4 +1,4 @@
-# $OpenBSD: RAMDISKC,v 1.107 2013/10/28 12:33:32 mpi Exp $
+# $OpenBSD: RAMDISKC,v 1.108 2013/11/15 19:42:20 sasano Exp $
machine i386 # architecture, used by config; REQUIRED
@@ -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
diff --git a/sys/arch/i386/conf/RAMDISK_CD b/sys/arch/i386/conf/RAMDISK_CD
index 09e82619c09..2a27f963003 100644
--- a/sys/arch/i386/conf/RAMDISK_CD
+++ b/sys/arch/i386/conf/RAMDISK_CD
@@ -1,4 +1,4 @@
-# $OpenBSD: RAMDISK_CD,v 1.205 2013/11/04 14:07:16 deraadt Exp $
+# $OpenBSD: RAMDISK_CD,v 1.206 2013/11/15 19:42:20 sasano Exp $
machine i386 # architecture, used by config; REQUIRED
@@ -131,6 +131,7 @@ cue* at uhub? # CATC USB-EL1201A based Ethernet
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
diff --git a/sys/arch/landisk/conf/GENERIC b/sys/arch/landisk/conf/GENERIC
index 5fb719c7ccc..d64c32eefbf 100644
--- a/sys/arch/landisk/conf/GENERIC
+++ b/sys/arch/landisk/conf/GENERIC
@@ -1,4 +1,4 @@
-# $OpenBSD: GENERIC,v 1.40 2013/09/05 19:42:07 sasano Exp $
+# $OpenBSD: GENERIC,v 1.41 2013/11/15 19:42:20 sasano Exp $
#
# For further information on compiling OpenBSD kernels, see the config(8)
# man page.
@@ -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
diff --git a/sys/arch/landisk/conf/RAMDISK b/sys/arch/landisk/conf/RAMDISK
index 60354f1f6eb..ee006901e15 100644
--- a/sys/arch/landisk/conf/RAMDISK
+++ b/sys/arch/landisk/conf/RAMDISK
@@ -1,4 +1,4 @@
-# $OpenBSD: RAMDISK,v 1.18 2013/08/20 09:14:15 mpi Exp $
+# $OpenBSD: RAMDISK,v 1.19 2013/11/15 19:42:20 sasano Exp $
#
# For further information on compiling OpenBSD kernels, see the config(8)
# man page.
@@ -99,6 +99,7 @@ kue* at uhub? # Kawasaki KL5KUSB101B based Ethernet
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
diff --git a/sys/arch/loongson/conf/GENERIC b/sys/arch/loongson/conf/GENERIC
index 516e0225255..4e8e286bb52 100644
--- a/sys/arch/loongson/conf/GENERIC
+++ b/sys/arch/loongson/conf/GENERIC
@@ -1,4 +1,4 @@
-# $OpenBSD: GENERIC,v 1.40 2013/09/05 19:42:07 sasano Exp $
+# $OpenBSD: GENERIC,v 1.41 2013/11/15 19:42:20 sasano Exp $
#
# For further information on compiling OpenBSD kernels, see the config(8)
# man page.
@@ -147,6 +147,7 @@ uath* at uhub? # Atheros AR5005UG/AR5005UX
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
diff --git a/sys/arch/loongson/conf/RAMDISK b/sys/arch/loongson/conf/RAMDISK
index 3718642642e..4646bd6efb3 100644
--- a/sys/arch/loongson/conf/RAMDISK
+++ b/sys/arch/loongson/conf/RAMDISK
@@ -1,4 +1,4 @@
-# $OpenBSD: RAMDISK,v 1.20 2012/09/27 14:01:35 jsg Exp $
+# $OpenBSD: RAMDISK,v 1.21 2013/11/15 19:42:20 sasano Exp $
#
# For further information on compiling OpenBSD kernels, see the config(8)
# man page.
@@ -121,6 +121,7 @@ uath* at uhub? # Atheros AR5005UG/AR5005UX
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
diff --git a/sys/arch/macppc/conf/GENERIC b/sys/arch/macppc/conf/GENERIC
index dc160287e76..aa78bfd2ac5 100644
--- a/sys/arch/macppc/conf/GENERIC
+++ b/sys/arch/macppc/conf/GENERIC
@@ -1,4 +1,4 @@
-# $OpenBSD: GENERIC,v 1.227 2013/11/04 14:07:16 deraadt Exp $g
+# $OpenBSD: GENERIC,v 1.228 2013/11/15 19:42:20 sasano Exp $g
#
# For further information on compiling OpenBSD kernels, see the config(8)
# man page.
@@ -260,6 +260,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
diff --git a/sys/arch/macppc/conf/RAMDISK b/sys/arch/macppc/conf/RAMDISK
index eded4557a7f..670f3709f90 100644
--- a/sys/arch/macppc/conf/RAMDISK
+++ b/sys/arch/macppc/conf/RAMDISK
@@ -1,4 +1,4 @@
-# $OpenBSD: RAMDISK,v 1.98 2013/11/10 12:10:43 mpi Exp $
+# $OpenBSD: RAMDISK,v 1.99 2013/11/15 19:42:20 sasano Exp $
#
# PPC GENERIC config file
#
@@ -171,6 +171,7 @@ kue* at uhub? # Kawasaki KL5KUSB101B based Ethernet
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
diff --git a/sys/arch/sgi/conf/GENERIC-IP27 b/sys/arch/sgi/conf/GENERIC-IP27
index 0b21927b0fb..2cb414a6131 100644
--- a/sys/arch/sgi/conf/GENERIC-IP27
+++ b/sys/arch/sgi/conf/GENERIC-IP27
@@ -1,4 +1,4 @@
-# $OpenBSD: GENERIC-IP27,v 1.47 2013/09/05 19:42:08 sasano Exp $
+# $OpenBSD: GENERIC-IP27,v 1.48 2013/11/15 19:42:20 sasano Exp $
#
# THIS KERNEL IS FOR Origin, Onyx, Fuel, Tezro (IP27, IP35) SYSTEMS ONLY.
#
@@ -136,6 +136,7 @@ uath* at uhub? # Atheros AR5005UG/AR5005UX
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
diff --git a/sys/arch/sgi/conf/GENERIC-IP30 b/sys/arch/sgi/conf/GENERIC-IP30
index 95b1e6d7885..1761eccb0cb 100644
--- a/sys/arch/sgi/conf/GENERIC-IP30
+++ b/sys/arch/sgi/conf/GENERIC-IP30
@@ -1,4 +1,4 @@
-# $OpenBSD: GENERIC-IP30,v 1.41 2013/09/05 19:42:08 sasano Exp $
+# $OpenBSD: GENERIC-IP30,v 1.42 2013/11/15 19:42:20 sasano Exp $
#
# THIS KERNEL IS FOR Octane and Octane 2 (IP30) SYSTEMS ONLY.
#
@@ -128,6 +128,7 @@ uath* at uhub? # Atheros AR5005UG/AR5005UX
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
diff --git a/sys/arch/sgi/conf/GENERIC-IP32 b/sys/arch/sgi/conf/GENERIC-IP32
index ac1dafc84a2..e9b2b331d59 100644
--- a/sys/arch/sgi/conf/GENERIC-IP32
+++ b/sys/arch/sgi/conf/GENERIC-IP32
@@ -1,4 +1,4 @@
-# $OpenBSD: GENERIC-IP32,v 1.32 2013/09/05 19:42:08 sasano Exp $
+# $OpenBSD: GENERIC-IP32,v 1.33 2013/11/15 19:42:20 sasano Exp $
#
# THIS KERNEL IS FOR O2 (IP32) SYSTEMS ONLY.
#
@@ -120,6 +120,7 @@ uath* at uhub? # Atheros AR5005UG/AR5005UX
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
diff --git a/sys/arch/sgi/conf/RAMDISK-IP27 b/sys/arch/sgi/conf/RAMDISK-IP27
index fbb3d9bd8f8..70367a9ae2e 100644
--- a/sys/arch/sgi/conf/RAMDISK-IP27
+++ b/sys/arch/sgi/conf/RAMDISK-IP27
@@ -1,4 +1,4 @@
-# $OpenBSD: RAMDISK-IP27,v 1.27 2012/09/27 14:01:35 jsg Exp $
+# $OpenBSD: RAMDISK-IP27,v 1.28 2013/11/15 19:42:20 sasano Exp $
#
# THIS KERNEL IS FOR Origin, Onyx, Fuel, Tezro (IP27, IP35) SYSTEMS ONLY.
@@ -130,6 +130,7 @@ uath* at uhub? # Atheros AR5005UG/AR5005UX
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
diff --git a/sys/arch/sgi/conf/RAMDISK-IP30 b/sys/arch/sgi/conf/RAMDISK-IP30
index b5b8cc76fc5..78442371dc6 100644
--- a/sys/arch/sgi/conf/RAMDISK-IP30
+++ b/sys/arch/sgi/conf/RAMDISK-IP30
@@ -1,4 +1,4 @@
-# $OpenBSD: RAMDISK-IP30,v 1.23 2012/09/27 14:01:35 jsg Exp $
+# $OpenBSD: RAMDISK-IP30,v 1.24 2013/11/15 19:42:20 sasano Exp $
#
# THIS KERNEL IS FOR Octane and Octane 2 (IP30) SYSTEMS ONLY.
@@ -123,6 +123,7 @@ uath* at uhub? # Atheros AR5005UG/AR5005UX
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
diff --git a/sys/arch/sgi/conf/RAMDISK-IP32 b/sys/arch/sgi/conf/RAMDISK-IP32
index 94a76a81551..85f54838ad2 100644
--- a/sys/arch/sgi/conf/RAMDISK-IP32
+++ b/sys/arch/sgi/conf/RAMDISK-IP32
@@ -1,4 +1,4 @@
-# $OpenBSD: RAMDISK-IP32,v 1.19 2012/09/27 14:01:35 jsg Exp $
+# $OpenBSD: RAMDISK-IP32,v 1.20 2013/11/15 19:42:20 sasano Exp $
#
# THIS KERNEL IS FOR O2 (IP32) SYSTEMS ONLY.
@@ -113,6 +113,7 @@ uath* at uhub? # Atheros AR5005UG/AR5005UX
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
diff --git a/sys/arch/sparc64/conf/GENERIC b/sys/arch/sparc64/conf/GENERIC
index 52afd406501..b7a7052143d 100644
--- a/sys/arch/sparc64/conf/GENERIC
+++ b/sys/arch/sparc64/conf/GENERIC
@@ -1,4 +1,4 @@
-# $OpenBSD: GENERIC,v 1.273 2013/09/05 19:42:08 sasano Exp $
+# $OpenBSD: GENERIC,v 1.274 2013/11/15 19:42:20 sasano Exp $
#
# For further information on compiling OpenBSD kernels, see the config(8)
# man page.
@@ -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
diff --git a/sys/arch/zaurus/conf/GENERIC b/sys/arch/zaurus/conf/GENERIC
index a977debdc5c..dbf8a13a502 100644
--- a/sys/arch/zaurus/conf/GENERIC
+++ b/sys/arch/zaurus/conf/GENERIC
@@ -1,4 +1,4 @@
-# $OpenBSD: GENERIC,v 1.89 2013/08/20 14:27:31 ajacoutot Exp $
+# $OpenBSD: GENERIC,v 1.90 2013/11/15 19:42:20 sasano Exp $
#
# For further information on compiling OpenBSD kernels, see the config(8)
# man page.
@@ -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
diff --git a/sys/arch/zaurus/conf/RAMDISK b/sys/arch/zaurus/conf/RAMDISK
index cc75f2bb512..4a1d28afe4b 100644
--- a/sys/arch/zaurus/conf/RAMDISK
+++ b/sys/arch/zaurus/conf/RAMDISK
@@ -1,4 +1,4 @@
-# $OpenBSD: RAMDISK,v 1.45 2013/08/20 14:27:31 ajacoutot Exp $
+# $OpenBSD: RAMDISK,v 1.46 2013/11/15 19:42:20 sasano Exp $
machine zaurus arm
@@ -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
diff --git a/sys/dev/usb/files.usb b/sys/dev/usb/files.usb
index 4dddc2ad929..b736803d5a3 100644
--- a/sys/dev/usb/files.usb
+++ b/sys/dev/usb/files.usb
@@ -1,4 +1,4 @@
-# $OpenBSD: files.usb,v 1.110 2013/10/07 05:37:41 yuo Exp $
+# $OpenBSD: files.usb,v 1.111 2013/11/15 19:42:20 sasano Exp $
# $NetBSD: files.usb,v 1.16 2000/02/14 20:29:54 augustss Exp $
#
# Config file and device description for machine-independent USB code.
@@ -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
diff --git a/sys/dev/usb/if_ugl.c b/sys/dev/usb/if_ugl.c
new file mode 100644
index 00000000000..0e7d8a1a5c8
--- /dev/null
+++ b/sys/dev/usb/if_ugl.c
@@ -0,0 +1,940 @@
+/* $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) 2000 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Lennart Augustsson (lennart@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
+ * This driver is based on Prolific PL2301/PL2302 driver (if_upl.c).
+ */
+
+#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;
+ }
+ }
+}
diff --git a/sys/dev/usb/usbdevs b/sys/dev/usb/usbdevs
index b544e2518df..3010acde6ae 100644
--- a/sys/dev/usb/usbdevs
+++ b/sys/dev/usb/usbdevs
@@ -1,4 +1,4 @@
-$OpenBSD: usbdevs,v 1.612 2013/11/09 04:01:37 jsg Exp $
+$OpenBSD: usbdevs,v 1.613 2013/11/15 19:42:20 sasano Exp $
/* $NetBSD: usbdevs,v 1.322 2003/05/10 17:47:14 hamajima Exp $ */
/*
@@ -1922,6 +1922,7 @@ product GCTSEMICON INSTALL 0x7f40 GDM720x MASS storage mode
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
diff --git a/sys/dev/usb/usbdevs.h b/sys/dev/usb/usbdevs.h
index 95fb9b21e37..5d165bd15c5 100644
--- a/sys/dev/usb/usbdevs.h
+++ b/sys/dev/usb/usbdevs.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: usbdevs.h,v 1.623 2013/11/09 04:02:02 jsg Exp $ */
+/* $OpenBSD: usbdevs.h,v 1.624 2013/11/15 19:42:20 sasano Exp $ */
/*
* THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
@@ -1929,6 +1929,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 */
diff --git a/sys/dev/usb/usbdevs_data.h b/sys/dev/usb/usbdevs_data.h
index 8a0478a95f3..8782a9e1d0f 100644
--- a/sys/dev/usb/usbdevs_data.h
+++ b/sys/dev/usb/usbdevs_data.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: usbdevs_data.h,v 1.617 2013/11/09 04:02:02 jsg Exp $ */
+/* $OpenBSD: usbdevs_data.h,v 1.618 2013/11/15 19:42:20 sasano Exp $ */
/*
* THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT.
@@ -3850,6 +3850,10 @@ const struct usb_known_product usb_known_products[] = {
"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",
},