svn commit: r187189 - in user/thompsa/usb: . bin/kenv bin/ln lib/libarchive lib/libc/string lib/libusb20 lib/msun/src sbin/mount share/examples/cvsup sys/amd64/conf sys/arm/arm sys/boot/forth sys/c...

Andrew Thompson thompsa at FreeBSD.org
Tue Jan 13 12:42:07 PST 2009


Author: thompsa
Date: Tue Jan 13 20:42:05 2009
New Revision: 187189
URL: http://svn.freebsd.org/changeset/base/187189

Log:
  MFH r187125-187188

Added:
  user/thompsa/usb/sys/dev/usb2/controller/atmegadci.c
     - copied unchanged from r187188, head/sys/dev/usb2/controller/atmegadci.c
  user/thompsa/usb/sys/dev/usb2/controller/atmegadci.h
     - copied unchanged from r187188, head/sys/dev/usb2/controller/atmegadci.h
  user/thompsa/usb/sys/dev/usb2/controller/atmegadci_atmelarm.c
     - copied unchanged from r187188, head/sys/dev/usb2/controller/atmegadci_atmelarm.c
  user/thompsa/usb/sys/modules/usb2/controller_atmegadci/
     - copied from r187188, head/sys/modules/usb2/controller_atmegadci/
Deleted:
  user/thompsa/usb/sys/powerpc/booke/support.S
Modified:
  user/thompsa/usb/   (props changed)
  user/thompsa/usb/bin/kenv/kenv.1
  user/thompsa/usb/bin/ln/ln.1
  user/thompsa/usb/lib/libarchive/archive_read_support_format_iso9660.c
  user/thompsa/usb/lib/libc/string/ffs.3
  user/thompsa/usb/lib/libusb20/libusb20.c
  user/thompsa/usb/lib/msun/src/e_rem_pio2.c
  user/thompsa/usb/lib/msun/src/e_rem_pio2f.c
  user/thompsa/usb/lib/msun/src/k_cosf.c
  user/thompsa/usb/lib/msun/src/k_sinf.c
  user/thompsa/usb/lib/msun/src/k_tanf.c
  user/thompsa/usb/sbin/mount/mount.c
  user/thompsa/usb/share/examples/cvsup/refuse.README
  user/thompsa/usb/sys/amd64/conf/GENERIC
  user/thompsa/usb/sys/amd64/conf/USB2
  user/thompsa/usb/sys/arm/arm/cpufunc_asm_sheeva.S   (props changed)
  user/thompsa/usb/sys/boot/forth/support.4th
  user/thompsa/usb/sys/conf/files
  user/thompsa/usb/sys/conf/files.powerpc
  user/thompsa/usb/sys/dev/ath/ath_hal/ar5212/ar5212_rfgain.c
  user/thompsa/usb/sys/dev/bce/if_bce.c
  user/thompsa/usb/sys/dev/sound/pci/hda/hdac.c
  user/thompsa/usb/sys/dev/usb/usbdevs
  user/thompsa/usb/sys/dev/usb2/controller/at91dci.c
  user/thompsa/usb/sys/dev/usb2/controller/at91dci.h
  user/thompsa/usb/sys/dev/usb2/controller/at91dci_atmelarm.c
  user/thompsa/usb/sys/dev/usb2/controller/ehci2.c
  user/thompsa/usb/sys/dev/usb2/controller/ehci2.h
  user/thompsa/usb/sys/dev/usb2/controller/ehci2_pci.c
  user/thompsa/usb/sys/dev/usb2/controller/musb2_otg.c
  user/thompsa/usb/sys/dev/usb2/controller/musb2_otg.h
  user/thompsa/usb/sys/dev/usb2/controller/musb2_otg_atmelarm.c
  user/thompsa/usb/sys/dev/usb2/controller/ohci2.c
  user/thompsa/usb/sys/dev/usb2/controller/ohci2.h
  user/thompsa/usb/sys/dev/usb2/controller/ohci2_atmelarm.c
  user/thompsa/usb/sys/dev/usb2/controller/ohci2_pci.c
  user/thompsa/usb/sys/dev/usb2/controller/uhci2.c
  user/thompsa/usb/sys/dev/usb2/controller/uhci2.h
  user/thompsa/usb/sys/dev/usb2/controller/uhci2_pci.c
  user/thompsa/usb/sys/dev/usb2/controller/usb2_bus.h
  user/thompsa/usb/sys/dev/usb2/controller/usb2_controller.c
  user/thompsa/usb/sys/dev/usb2/controller/usb2_controller.h
  user/thompsa/usb/sys/dev/usb2/controller/uss820dci.c
  user/thompsa/usb/sys/dev/usb2/controller/uss820dci.h
  user/thompsa/usb/sys/dev/usb2/controller/uss820dci_atmelarm.c
  user/thompsa/usb/sys/dev/usb2/core/usb2_busdma.c
  user/thompsa/usb/sys/dev/usb2/core/usb2_compat_linux.c
  user/thompsa/usb/sys/dev/usb2/core/usb2_core.h
  user/thompsa/usb/sys/dev/usb2/core/usb2_debug.c
  user/thompsa/usb/sys/dev/usb2/core/usb2_device.c
  user/thompsa/usb/sys/dev/usb2/core/usb2_generic.c
  user/thompsa/usb/sys/dev/usb2/core/usb2_handle_request.c
  user/thompsa/usb/sys/dev/usb2/core/usb2_hub.c
  user/thompsa/usb/sys/dev/usb2/core/usb2_mbuf.h
  user/thompsa/usb/sys/dev/usb2/core/usb2_parse.c
  user/thompsa/usb/sys/dev/usb2/core/usb2_request.c
  user/thompsa/usb/sys/dev/usb2/core/usb2_sw_transfer.c
  user/thompsa/usb/sys/dev/usb2/core/usb2_transfer.c
  user/thompsa/usb/sys/dev/usb2/core/usb2_transfer.h
  user/thompsa/usb/sys/dev/usb2/include/usb2_defs.h
  user/thompsa/usb/sys/dev/usb2/include/usb2_devid.h
  user/thompsa/usb/sys/dev/usb2/include/usb2_devtable.h
  user/thompsa/usb/sys/dev/usb2/include/usb2_standard.h
  user/thompsa/usb/sys/dev/usb2/serial/u3g2.c
  user/thompsa/usb/sys/dev/usb2/serial/uark2.c
  user/thompsa/usb/sys/dev/usb2/serial/ubsa2.c
  user/thompsa/usb/sys/dev/usb2/serial/ubser2.c
  user/thompsa/usb/sys/dev/usb2/serial/uchcom2.c
  user/thompsa/usb/sys/dev/usb2/serial/ucycom2.c
  user/thompsa/usb/sys/dev/usb2/serial/ufoma2.c
  user/thompsa/usb/sys/dev/usb2/serial/uftdi2.c
  user/thompsa/usb/sys/dev/usb2/serial/ugensa2.c
  user/thompsa/usb/sys/dev/usb2/serial/uipaq2.c
  user/thompsa/usb/sys/dev/usb2/serial/ulpt2.c
  user/thompsa/usb/sys/dev/usb2/serial/umct2.c
  user/thompsa/usb/sys/dev/usb2/serial/umodem2.c
  user/thompsa/usb/sys/dev/usb2/serial/umoscom2.c
  user/thompsa/usb/sys/dev/usb2/serial/uplcom2.c
  user/thompsa/usb/sys/dev/usb2/serial/usb2_serial.c
  user/thompsa/usb/sys/dev/usb2/serial/usb2_serial.h
  user/thompsa/usb/sys/dev/usb2/serial/uvisor2.c
  user/thompsa/usb/sys/dev/usb2/serial/uvscom2.c
  user/thompsa/usb/sys/dev/usb2/sound/uaudio2.c
  user/thompsa/usb/sys/dev/usb2/storage/ata-usb2.c
  user/thompsa/usb/sys/dev/usb2/storage/umass2.c
  user/thompsa/usb/sys/i386/conf/GENERIC
  user/thompsa/usb/sys/i386/conf/USB2
  user/thompsa/usb/sys/i386/i386/msi.c
  user/thompsa/usb/sys/kern/kern_timeout.c
  user/thompsa/usb/sys/powerpc/booke/locore.S
  user/thompsa/usb/sys/powerpc/booke/machdep.c
  user/thompsa/usb/sys/powerpc/booke/pmap.c
  user/thompsa/usb/sys/powerpc/booke/trap_subr.S
  user/thompsa/usb/sys/powerpc/include/pcpu.h
  user/thompsa/usb/sys/powerpc/include/pmap.h
  user/thompsa/usb/sys/powerpc/include/pte.h
  user/thompsa/usb/sys/powerpc/include/tlb.h
  user/thompsa/usb/sys/powerpc/powerpc/genassym.c
  user/thompsa/usb/tools/sched/schedgraph.py
  user/thompsa/usb/usr.bin/make/job.c
  user/thompsa/usb/usr.bin/make/main.c
  user/thompsa/usb/usr.bin/netstat/inet6.c
  user/thompsa/usb/usr.sbin/crunch/crunchgen/crunchgen.c
  user/thompsa/usb/usr.sbin/makefs/ffs/ffs_bswap.c   (props changed)
  user/thompsa/usb/usr.sbin/makefs/ffs/ffs_subr.c   (props changed)
  user/thompsa/usb/usr.sbin/makefs/ffs/ufs_bswap.h   (props changed)
  user/thompsa/usb/usr.sbin/makefs/getid.c   (props changed)
  user/thompsa/usb/usr.sbin/usbconfig/usbconfig.c

Modified: user/thompsa/usb/bin/kenv/kenv.1
==============================================================================
--- user/thompsa/usb/bin/kenv/kenv.1	Tue Jan 13 19:18:43 2009	(r187188)
+++ user/thompsa/usb/bin/kenv/kenv.1	Tue Jan 13 20:42:05 2009	(r187189)
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd September 13, 2005
+.Dd January 13, 2009
 .Dt KENV 1
 .Os
 .Sh NAME
@@ -67,8 +67,28 @@ If the
 .Fl q
 option is set, warnings normally printed as a result of being unable to
 perform the requested operation will be suppressed.
+.Pp
+Variables can be added to the kernel environment using the
+.Xr /boot/loader.conf
+file, or also statically compiled into the kernel using the statement
+.Pp
+.Dl Ic env Ar filename
+.Pp
+in the kernel config file.
+The file can contain lines of the form
+.Pp
+.Dl name = "value"  # this is a comment
+.Pp
+where whitespace around name and '=', and
+everything after a '#' character, are ignored.  Almost any printable
+character except '=' is acceptable as part of a name.  Quotes
+are optional and necessary only if the value contains
+whitespace.
+.Pp
 .Sh SEE ALSO
 .Xr kenv 2 ,
+.Xr config 5 ,
+.Xr loader.conf 5 ,
 .Xr loader 8
 .Sh HISTORY
 The

Modified: user/thompsa/usb/bin/ln/ln.1
==============================================================================
--- user/thompsa/usb/bin/ln/ln.1	Tue Jan 13 19:18:43 2009	(r187188)
+++ user/thompsa/usb/bin/ln/ln.1	Tue Jan 13 20:42:05 2009	(r187189)
@@ -38,7 +38,7 @@
 .Sh NAME
 .Nm ln ,
 .Nm link
-.Nd make links
+.Nd link files
 .Sh SYNOPSIS
 .Nm
 .Op Fl s Op Fl F
@@ -57,8 +57,13 @@
 .Sh DESCRIPTION
 The
 .Nm
-utility creates a new directory entry (linked file) which has the
-same modes as the original file.
+utility creates a new directory entry (linked file) for the file name
+specified by
+.Ar target_file .
+The
+.Ar target_file
+will be created with the same file modes as the
+.Ar source_file .
 It is useful for maintaining multiple copies of a file in many places
 at once without using up storage for the
 .Dq copies ;
@@ -148,7 +153,7 @@ links.
 A hard link to a file is indistinguishable from the original directory entry;
 any changes to a file are effectively independent of the name used to reference
 the file.
-Hard links may not normally refer to directories and may not span file systems.
+Directories may not be hardlinked, and hard links may not span file systems.
 .Pp
 A symbolic link contains the name of the file to
 which it is linked.

Modified: user/thompsa/usb/lib/libarchive/archive_read_support_format_iso9660.c
==============================================================================
--- user/thompsa/usb/lib/libarchive/archive_read_support_format_iso9660.c	Tue Jan 13 19:18:43 2009	(r187188)
+++ user/thompsa/usb/lib/libarchive/archive_read_support_format_iso9660.c	Tue Jan 13 20:42:05 2009	(r187189)
@@ -466,7 +466,10 @@ archive_read_format_iso9660_read_header(
 	 * seek backwards to extract it, so issue a warning. */
 	if (file->offset < iso9660->current_position) {
 		archive_set_error(&a->archive, ARCHIVE_ERRNO_MISC,
-		    "Ignoring out-of-order file");
+		    "Ignoring out-of-order file @%x (%s) %jd < %jd",
+		    file,
+		    iso9660->pathname.s,
+		    file->offset, iso9660->current_position);
 		iso9660->entry_bytes_remaining = 0;
 		iso9660->entry_sparse_offset = 0;
 		release_file(iso9660, file);
@@ -607,7 +610,7 @@ parse_file_info(struct iso9660 *iso9660,
 	file->parent = parent;
 	if (parent != NULL)
 		parent->refcount++;
-	file->offset = toi(isodirrec + DR_extent_offset, DR_extent_size)
+	file->offset = (uint64_t)toi(isodirrec + DR_extent_offset, DR_extent_size)
 	    * iso9660->logical_block_size;
 	file->size = toi(isodirrec + DR_size_offset, DR_size_size);
 	file->mtime = isodate7(isodirrec + DR_date_offset);

Modified: user/thompsa/usb/lib/libc/string/ffs.3
==============================================================================
--- user/thompsa/usb/lib/libc/string/ffs.3	Tue Jan 13 19:18:43 2009	(r187188)
+++ user/thompsa/usb/lib/libc/string/ffs.3	Tue Jan 13 20:42:05 2009	(r187189)
@@ -108,4 +108,4 @@ The
 and
 .Fn flsll
 functions appeared in
-.Fx 8.0 .
+.Fx 7.1 .

Modified: user/thompsa/usb/lib/libusb20/libusb20.c
==============================================================================
--- user/thompsa/usb/lib/libusb20/libusb20.c	Tue Jan 13 19:18:43 2009	(r187188)
+++ user/thompsa/usb/lib/libusb20/libusb20.c	Tue Jan 13 20:42:05 2009	(r187189)
@@ -486,6 +486,8 @@ libusb20_dev_close(struct libusb20_devic
 
 	pdev->is_opened = 0;
 
+	pdev->claimed_interfaces = 0;
+
 	return (error);
 }
 

Modified: user/thompsa/usb/lib/msun/src/e_rem_pio2.c
==============================================================================
--- user/thompsa/usb/lib/msun/src/e_rem_pio2.c	Tue Jan 13 19:18:43 2009	(r187188)
+++ user/thompsa/usb/lib/msun/src/e_rem_pio2.c	Tue Jan 13 20:42:05 2009	(r187189)
@@ -49,7 +49,7 @@ pio2_3  =  2.02226624871116645580e-21, /
 pio2_3t =  8.47842766036889956997e-32; /* 0x397B839A, 0x252049C1 */
 
 #ifdef INLINE_REM_PIO2
-extern inline
+extern __gnu89_inline
 #endif
 int
 __ieee754_rem_pio2(double x, double *y)

Modified: user/thompsa/usb/lib/msun/src/e_rem_pio2f.c
==============================================================================
--- user/thompsa/usb/lib/msun/src/e_rem_pio2f.c	Tue Jan 13 19:18:43 2009	(r187188)
+++ user/thompsa/usb/lib/msun/src/e_rem_pio2f.c	Tue Jan 13 20:42:05 2009	(r187189)
@@ -41,7 +41,7 @@ pio2_1  =  1.57079631090164184570e+00, /
 pio2_1t =  1.58932547735281966916e-08; /* 0x3E5110b4, 0x611A6263 */
 
 #ifdef INLINE_REM_PIO2F
-extern inline
+extern __gnu89_inline
 #endif
 int
 __ieee754_rem_pio2f(float x, double *y)

Modified: user/thompsa/usb/lib/msun/src/k_cosf.c
==============================================================================
--- user/thompsa/usb/lib/msun/src/k_cosf.c	Tue Jan 13 19:18:43 2009	(r187188)
+++ user/thompsa/usb/lib/msun/src/k_cosf.c	Tue Jan 13 20:42:05 2009	(r187189)
@@ -31,7 +31,7 @@ C2  = -0x16c087e80f1e27.0p-62,	/* -0.001
 C3  =  0x199342e0ee5069.0p-68;	/*  0.0000243904487962774090654 */
 
 #ifdef INLINE_KERNEL_COSDF
-extern inline
+extern __gnu89_inline
 #endif
 float
 __kernel_cosdf(double x)

Modified: user/thompsa/usb/lib/msun/src/k_sinf.c
==============================================================================
--- user/thompsa/usb/lib/msun/src/k_sinf.c	Tue Jan 13 19:18:43 2009	(r187188)
+++ user/thompsa/usb/lib/msun/src/k_sinf.c	Tue Jan 13 20:42:05 2009	(r187189)
@@ -30,7 +30,7 @@ S3 = -0x1a00f9e2cae774.0p-65,	/* -0.0001
 S4 =  0x16cd878c3b46a7.0p-71;	/*  0.0000027183114939898219064 */
 
 #ifdef INLINE_KERNEL_SINDF
-extern inline
+extern __gnu89_inline
 #endif
 float
 __kernel_sindf(double x)

Modified: user/thompsa/usb/lib/msun/src/k_tanf.c
==============================================================================
--- user/thompsa/usb/lib/msun/src/k_tanf.c	Tue Jan 13 19:18:43 2009	(r187188)
+++ user/thompsa/usb/lib/msun/src/k_tanf.c	Tue Jan 13 20:42:05 2009	(r187189)
@@ -33,7 +33,7 @@ T[] =  {
 };
 
 #ifdef INLINE_KERNEL_TANDF
-extern inline
+extern __gnu89_inline
 #endif
 float
 __kernel_tandf(double x, int iy)

Modified: user/thompsa/usb/sbin/mount/mount.c
==============================================================================
--- user/thompsa/usb/sbin/mount/mount.c	Tue Jan 13 19:18:43 2009	(r187188)
+++ user/thompsa/usb/sbin/mount/mount.c	Tue Jan 13 20:42:05 2009	(r187189)
@@ -70,6 +70,7 @@ int debug, fstab_style, verbose;
 
 struct cpa {
 	char	**a;
+	ssize_t	sz;
 	int	c;
 };
 
@@ -503,11 +504,9 @@ hasopt(const char *mntopts, const char *
 static void
 append_arg(struct cpa *sa, char *arg)
 {
-	static int a_sz;
-
-	if (sa->c + 1 == a_sz) {
-		a_sz = a_sz == 0 ? 8 : a_sz * 2;
-		sa->a = realloc(sa->a, sizeof(sa->a) * a_sz);
+	if (sa->c + 1 == sa->sz) {
+		sa->sz = sa->sz == 0 ? 8 : sa->sz * 2;
+		sa->a = realloc(sa->a, sizeof(sa->a) * sa->sz);
 		if (sa->a == NULL)
 			errx(1, "realloc failed");
 	}
@@ -518,11 +517,10 @@ int
 mountfs(const char *vfstype, const char *spec, const char *name, int flags,
 	const char *options, const char *mntopts)
 {
-	struct cpa mnt_argv;
 	struct statfs sf;
 	int i, ret;
 	char *optbuf, execname[PATH_MAX], mntpath[PATH_MAX];
-	static int mnt_argv_inited;
+	static struct cpa mnt_argv;
 
 	/* resolve the mountpoint with realpath(3) */
 	(void)checkpath(name, mntpath);
@@ -557,10 +555,6 @@ mountfs(const char *vfstype, const char 
 	/* Construct the name of the appropriate mount command */
 	(void)snprintf(execname, sizeof(execname), "mount_%s", vfstype);
 
-	if (!mnt_argv_inited) {
-		mnt_argv_inited++;
-		mnt_argv.a = NULL;
-	}
 	mnt_argv.c = -1;
 	append_arg(&mnt_argv, execname);
 	mangle(optbuf, &mnt_argv);

Modified: user/thompsa/usb/share/examples/cvsup/refuse.README
==============================================================================
--- user/thompsa/usb/share/examples/cvsup/refuse.README	Tue Jan 13 19:18:43 2009	(r187188)
+++ user/thompsa/usb/share/examples/cvsup/refuse.README	Tue Jan 13 20:42:05 2009	(r187189)
@@ -12,8 +12,8 @@ everything beneath that directory will b
 
 You can copy "refuse" to your sup directory and add or remove
 whatever you like.  The example supfiles in this directory set
-CVSup's base directory to "/usr".  The sup directory is in the base
-directory; i.e., it is "/usr/sup".  If you have changed your base
+CVSup's base directory to "/var/db".  The sup directory is in the base
+directory; i.e., it is "/var/db/sup".  If you have changed your base
 directory, your sup directory is /path/to/base/sup.
 
 This file used to contain /usr/src/etc/sendmail/freebsd.mc in case
@@ -62,4 +62,4 @@ depend on files in completely different 
 
 For more information about refuse files see cvsup(1), which is
 installed by the "cvsup" and "cvsup-bin" ports.  See also the CVSup
-FAQ at <http://www.polstra.com/projects/freeware/CVSup/>.
+FAQ at <http://www.cvsup.org/faq.html>.

Modified: user/thompsa/usb/sys/amd64/conf/GENERIC
==============================================================================
--- user/thompsa/usb/sys/amd64/conf/GENERIC	Tue Jan 13 19:18:43 2009	(r187188)
+++ user/thompsa/usb/sys/amd64/conf/GENERIC	Tue Jan 13 20:42:05 2009	(r187189)
@@ -1,8 +1,8 @@
 #
 # GENERIC -- Generic kernel configuration file for FreeBSD/amd64
 #
-# For more information on this file, please read the handbook section on
-# Kernel Configuration Files:
+# For more information on this file, please read the config(5) manual page,
+# and/or the handbook section on Kernel Configuration Files:
 #
 #    http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html
 #
@@ -24,6 +24,12 @@ ident		GENERIC
 # To statically compile in device wiring instead of /boot/device.hints
 #hints		"GENERIC.hints"		# Default places to look for devices.
 
+# Use the following to compile in values accessible to the kernel
+# through getenv() (or kenv(1) in userland). The format of the file
+# is 'variable=value', see kenv(1)
+#
+# env          "GENERIC.env"
+
 makeoptions	DEBUG=-g		# Build kernel with gdb(1) debug symbols
 
 options 	SCHED_ULE		# ULE scheduler

Modified: user/thompsa/usb/sys/amd64/conf/USB2
==============================================================================
--- user/thompsa/usb/sys/amd64/conf/USB2	Tue Jan 13 19:18:43 2009	(r187188)
+++ user/thompsa/usb/sys/amd64/conf/USB2	Tue Jan 13 20:42:05 2009	(r187189)
@@ -108,3 +108,7 @@ device		usb2_input_ms
 
 # USB sound and MIDI device support
 #device		usb2_sound
+
+# USB scanner support
+device		usb2_image
+device		usb2_scanner

Modified: user/thompsa/usb/sys/boot/forth/support.4th
==============================================================================
--- user/thompsa/usb/sys/boot/forth/support.4th	Tue Jan 13 19:18:43 2009	(r187188)
+++ user/thompsa/usb/sys/boot/forth/support.4th	Tue Jan 13 20:42:05 2009	(r187189)
@@ -820,7 +820,7 @@ only forth also support-functions defini
 \ Interface to loading conf files
 
 : load_conf  ( addr len -- )
-  ." ----- Trying conf " 2dup type cr
+  \ ." ----- Trying conf " 2dup type cr \ debugging
   0 to end_of_file?
   reset_line_reading
   O_RDONLY fopen fd !
@@ -912,7 +912,7 @@ string current_file_name_ref	\ used to p
 \ loader_conf_files processing support functions
 
 : get_conf_files ( -- addr len )  \ put addr/len on stack, reset var
-  ." -- starting on <" conf_files strtype ." >" cr
+  \ ." -- starting on <" conf_files strtype ." >" cr \ debugging
   conf_files strget 0 0 conf_files strset
 ;
 
@@ -939,8 +939,7 @@ string current_file_name_ref	\ used to p
     pos char+ to pos
   repeat
   addr len pos addr r@ + pos r> -
-  2dup
-  ." get_file_name has " type cr
+  \ 2dup ." get_file_name has " type cr \ debugging
 ;
 
 : get_next_file  ( addr len ptr -- addr len ptr' addr' len' | 0 )

Modified: user/thompsa/usb/sys/conf/files
==============================================================================
--- user/thompsa/usb/sys/conf/files	Tue Jan 13 19:18:43 2009	(r187188)
+++ user/thompsa/usb/sys/conf/files	Tue Jan 13 20:42:05 2009	(r187189)
@@ -1609,6 +1609,7 @@ dev/usb2/wlan/usb2_wlan.c	optional usb2_
 #
 # USB2 serial and parallel port drivers
 #
+dev/usb2/serial/u3g2.c		optional usb2_core usb2_serial usb2_serial_3g
 dev/usb2/serial/uark2.c		optional usb2_core usb2_serial usb2_serial_ark
 dev/usb2/serial/ubsa2.c		optional usb2_core usb2_serial usb2_serial_bsa
 dev/usb2/serial/ubser2.c	optional usb2_core usb2_serial usb2_serial_bser

Modified: user/thompsa/usb/sys/conf/files.powerpc
==============================================================================
--- user/thompsa/usb/sys/conf/files.powerpc	Tue Jan 13 19:18:43 2009	(r187188)
+++ user/thompsa/usb/sys/conf/files.powerpc	Tue Jan 13 20:42:05 2009	(r187189)
@@ -84,7 +84,6 @@ powerpc/booke/interrupt.c	optional	e500
 powerpc/booke/locore.S		optional	e500 no-obj
 powerpc/booke/machdep.c		optional	e500
 powerpc/booke/pmap.c		optional	e500
-powerpc/booke/support.S		optional	e500
 powerpc/booke/swtch.S		optional	e500
 powerpc/booke/trap.c		optional	e500
 powerpc/booke/uio_machdep.c	optional	e500

Modified: user/thompsa/usb/sys/dev/ath/ath_hal/ar5212/ar5212_rfgain.c
==============================================================================
--- user/thompsa/usb/sys/dev/ath/ath_hal/ar5212/ar5212_rfgain.c	Tue Jan 13 19:18:43 2009	(r187188)
+++ user/thompsa/usb/sys/dev/ath/ath_hal/ar5212/ar5212_rfgain.c	Tue Jan 13 20:42:05 2009	(r187189)
@@ -14,7 +14,7 @@
  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  *
- * $Id: ar5212_rfgain.c,v 1.2 2008/11/19 21:23:01 sam Exp $
+ * $FreeBSD$
  */
 #include "opt_ah.h"
 
@@ -280,7 +280,8 @@ ar5212GetRfgain(struct ath_hal *ah)
 	GAIN_VALUES *gv = &ahp->ah_gainValues;
 	uint32_t rddata, probeType;
 
-	if (!gv->active)
+	/* NB: beware of touching the BB when PHY is powered down */
+	if (!gv->active || !ahp->ah_phyPowerOn)
 		return HAL_RFGAIN_INACTIVE;
 
 	if (ahp->ah_rfgainState == HAL_RFGAIN_READ_REQUESTED) {

Modified: user/thompsa/usb/sys/dev/bce/if_bce.c
==============================================================================
--- user/thompsa/usb/sys/dev/bce/if_bce.c	Tue Jan 13 19:18:43 2009	(r187188)
+++ user/thompsa/usb/sys/dev/bce/if_bce.c	Tue Jan 13 20:42:05 2009	(r187189)
@@ -106,6 +106,8 @@ static struct bce_type bce_devs[] = {
 		"HP NC370T Multifunction Gigabit Server Adapter" },
 	{ BRCM_VENDORID, BRCM_DEVICEID_BCM5706,  HP_VENDORID, 0x3106,
 		"HP NC370i Multifunction Gigabit Server Adapter" },
+	{ BRCM_VENDORID, BRCM_DEVICEID_BCM5706,  HP_VENDORID, 0x3070,
+		"HP NC380T PCI Express Dual Port Multifunction Gigabit Server Adapter" },
 	{ BRCM_VENDORID, BRCM_DEVICEID_BCM5706,  PCI_ANY_ID,  PCI_ANY_ID,
 		"Broadcom NetXtreme II BCM5706 1000Base-T" },
 
@@ -116,18 +118,38 @@ static struct bce_type bce_devs[] = {
 		"Broadcom NetXtreme II BCM5706 1000Base-SX" },
 
 	/* BCM5708C controllers and OEM boards. */
+	{ BRCM_VENDORID, BRCM_DEVICEID_BCM5708,  HP_VENDORID, 0x7037,
+		"HP NC373T PCI Express Multifunction Gigabit Server Adapter" },
+	{ BRCM_VENDORID, BRCM_DEVICEID_BCM5708,  HP_VENDORID, 0x7038,
+		"HP NC373i Integrated Multifunction Gigabit Server Adapter" },
 	{ BRCM_VENDORID, BRCM_DEVICEID_BCM5708,  PCI_ANY_ID,  PCI_ANY_ID,
 		"Broadcom NetXtreme II BCM5708 1000Base-T" },
 
 	/* BCM5708S controllers and OEM boards. */
+	{ BRCM_VENDORID, BRCM_DEVICEID_BCM5708S,  HP_VENDORID, 0x1706,
+                "HP NC373m Multifunction Gigabit Server Adapter" },
+	{ BRCM_VENDORID, BRCM_DEVICEID_BCM5708S,  HP_VENDORID, 0x7038,
+                "HP NC373i PCI Express Multifunction Gigabit Server Adapter" },
+	{ BRCM_VENDORID, BRCM_DEVICEID_BCM5708S,  HP_VENDORID, 0x703b,
+                "HP NC373i Integrated Multifunction Gigabit Server Adapter" },
+	{ BRCM_VENDORID, BRCM_DEVICEID_BCM5708S,  HP_VENDORID, 0x703d,
+                "HP NC373F PCI Express Multifunction Gigabit Server Adapter" },
 	{ BRCM_VENDORID, BRCM_DEVICEID_BCM5708S,  PCI_ANY_ID,  PCI_ANY_ID,
 		"Broadcom NetXtreme II BCM5708 1000Base-SX" },
 
 	/* BCM5709C controllers and OEM boards. */
+	{ BRCM_VENDORID, BRCM_DEVICEID_BCM5709,  HP_VENDORID, 0x7055,
+		"HP NC382i Integrated Quad Port PCI Express Gigabit Server Adapter" },
+	{ BRCM_VENDORID, BRCM_DEVICEID_BCM5709,  HP_VENDORID, 0x7059,
+		"HP NC382T PCI Express Dual Port Multifunction Gigabit Server Adapter" },
 	{ BRCM_VENDORID, BRCM_DEVICEID_BCM5709,  PCI_ANY_ID,  PCI_ANY_ID,
 		"Broadcom NetXtreme II BCM5709 1000Base-T" },
 
 	/* BCM5709S controllers and OEM boards. */
+	{ BRCM_VENDORID, BRCM_DEVICEID_BCM5709S,  HP_VENDORID, 0x171d,
+		"HP NC382m Dual Port 1GbE Multifunction BL-c Adapter" },
+	{ BRCM_VENDORID, BRCM_DEVICEID_BCM5709S,  HP_VENDORID, 0x7056,
+		"HP NC382i Integrated Quad Port PCI Express Gigabit Server Adapter" },
 	{ BRCM_VENDORID, BRCM_DEVICEID_BCM5709S,  PCI_ANY_ID,  PCI_ANY_ID,
 		"Broadcom NetXtreme II BCM5709 1000Base-SX" },
 

Modified: user/thompsa/usb/sys/dev/sound/pci/hda/hdac.c
==============================================================================
--- user/thompsa/usb/sys/dev/sound/pci/hda/hdac.c	Tue Jan 13 19:18:43 2009	(r187188)
+++ user/thompsa/usb/sys/dev/sound/pci/hda/hdac.c	Tue Jan 13 20:42:05 2009	(r187189)
@@ -83,7 +83,7 @@
 
 #include "mixer_if.h"
 
-#define HDA_DRV_TEST_REV	"20090110_0123"
+#define HDA_DRV_TEST_REV	"20090113_0124"
 
 SND_DECLARE_FILE("$FreeBSD$");
 
@@ -6111,6 +6111,29 @@ hdac_audio_prepare_pin_ctrl(struct hdac_
 }
 
 static void
+hdac_audio_ctl_commit(struct hdac_devinfo *devinfo)
+{
+	struct hdac_audio_ctl *ctl;
+	int i, z;
+
+	i = 0;
+	while ((ctl = hdac_audio_ctl_each(devinfo, &i)) != NULL) {
+		if (ctl->enable == 0 || ctl->ossmask != 0) {
+			/* Mute disabled and mixer controllable controls.
+			 * Last will be initialized by mixer_init().
+			 * This expected to reduce click on startup. */
+			hdac_audio_ctl_amp_set(ctl, HDA_AMP_MUTE_ALL, 0, 0);
+			continue;
+		}
+		/* Init fixed controls to 0dB amplification. */
+		z = ctl->offset;
+		if (z > ctl->step)
+			z = ctl->step;
+		hdac_audio_ctl_amp_set(ctl, HDA_AMP_MUTE_NONE, z, z);
+	}
+}
+
+static void
 hdac_audio_commit(struct hdac_devinfo *devinfo)
 {
 	struct hdac_softc *sc = devinfo->codec->sc;
@@ -6126,11 +6149,41 @@ hdac_audio_commit(struct hdac_devinfo *d
 		hdac_command(sc, HDA_CMD_12BIT(cad, devinfo->nid,
 		    0x7e7, 0), cad);
 
+	/* Commit controls. */
+	hdac_audio_ctl_commit(devinfo);
+	
+	/* Commit selectors, pins and EAPD. */
+	for (i = 0; i < devinfo->nodecnt; i++) {
+		w = &devinfo->widget[i];
+		if (w == NULL)
+			continue;
+		if (w->selconn == -1)
+			w->selconn = 0;
+		if (w->nconns > 0)
+			hdac_widget_connection_select(w, w->selconn);
+		if (w->type == HDA_PARAM_AUDIO_WIDGET_CAP_TYPE_PIN_COMPLEX) {
+			hdac_command(sc,
+			    HDA_CMD_SET_PIN_WIDGET_CTRL(cad, w->nid,
+			    w->wclass.pin.ctrl), cad);
+		}
+		if (w->param.eapdbtl != HDAC_INVALID) {
+		    	uint32_t val;
+
+			val = w->param.eapdbtl;
+			if (devinfo->function.audio.quirks &
+			    HDA_QUIRK_EAPDINV)
+				val ^= HDA_CMD_SET_EAPD_BTL_ENABLE_EAPD;
+			hdac_command(sc,
+			    HDA_CMD_SET_EAPD_BTL_ENABLE(cad, w->nid,
+			    val), cad);
+		}
+	}
+
+	/* Commit GPIOs. */
 	gdata = 0;
 	gmask = 0;
 	gdir = 0;
 	commitgpio = 0;
-
 	numgpio = HDA_PARAM_GPIO_COUNT_NUM_GPIO(
 	    devinfo->function.audio.gpio);
 
@@ -6185,54 +6238,6 @@ hdac_audio_commit(struct hdac_devinfo *d
 		    HDA_CMD_SET_GPIO_DATA(cad, devinfo->nid,
 		    gdata), cad);
 	}
-
-	for (i = 0; i < devinfo->nodecnt; i++) {
-		w = &devinfo->widget[i];
-		if (w == NULL)
-			continue;
-		if (w->selconn == -1)
-			w->selconn = 0;
-		if (w->nconns > 0)
-			hdac_widget_connection_select(w, w->selconn);
-		if (w->type == HDA_PARAM_AUDIO_WIDGET_CAP_TYPE_PIN_COMPLEX) {
-			hdac_command(sc,
-			    HDA_CMD_SET_PIN_WIDGET_CTRL(cad, w->nid,
-			    w->wclass.pin.ctrl), cad);
-		}
-		if (w->param.eapdbtl != HDAC_INVALID) {
-		    	uint32_t val;
-
-			val = w->param.eapdbtl;
-			if (devinfo->function.audio.quirks &
-			    HDA_QUIRK_EAPDINV)
-				val ^= HDA_CMD_SET_EAPD_BTL_ENABLE_EAPD;
-			hdac_command(sc,
-			    HDA_CMD_SET_EAPD_BTL_ENABLE(cad, w->nid,
-			    val), cad);
-
-		}
-	}
-}
-
-static void
-hdac_audio_ctl_commit(struct hdac_devinfo *devinfo)
-{
-	struct hdac_audio_ctl *ctl;
-	int i, z;
-
-	i = 0;
-	while ((ctl = hdac_audio_ctl_each(devinfo, &i)) != NULL) {
-		if (ctl->enable == 0) {
-			/* Mute disabled controls. */
-			hdac_audio_ctl_amp_set(ctl, HDA_AMP_MUTE_ALL, 0, 0);
-			continue;
-		}
-		/* Init controls to 0dB amplification. */
-		z = ctl->offset;
-		if (z > ctl->step)
-			z = ctl->step;
-		hdac_audio_ctl_amp_set(ctl, HDA_AMP_MUTE_NONE, z, z);
-	}
 }
 
 static void
@@ -7477,10 +7482,6 @@ hdac_attach2(void *arg)
 		    	);
 			hdac_audio_commit(devinfo);
 		    	HDA_BOOTHVERBOSE(
-				device_printf(sc->dev, "Ctls commit...\n");
-			);
-			hdac_audio_ctl_commit(devinfo);
-		    	HDA_BOOTHVERBOSE(
 				device_printf(sc->dev, "HP switch init...\n");
 			);
 			hdac_hp_switch_init(devinfo);
@@ -7730,10 +7731,6 @@ hdac_resume(device_t dev)
 		    	);
 			hdac_audio_commit(devinfo);
 		    	HDA_BOOTHVERBOSE(
-				device_printf(dev, "Ctls commit...\n");
-			);
-			hdac_audio_ctl_commit(devinfo);
-		    	HDA_BOOTHVERBOSE(
 				device_printf(dev, "HP switch init...\n");
 			);
 			hdac_hp_switch_init(devinfo);

Modified: user/thompsa/usb/sys/dev/usb/usbdevs
==============================================================================
--- user/thompsa/usb/sys/dev/usb/usbdevs	Tue Jan 13 19:18:43 2009	(r187188)
+++ user/thompsa/usb/sys/dev/usb/usbdevs	Tue Jan 13 20:42:05 2009	(r187189)
@@ -151,6 +151,7 @@ vendor PLANTRONICS	0x047f	Plantronics
 vendor KYOCERA		0x0482	Kyocera Wireless Corp.
 vendor STMICRO		0x0483	STMicroelectronics
 vendor FOXCONN		0x0489	Foxconn
+vendor MEIZU		0x0492	Meizu Electronics
 vendor YAMAHA		0x0499	YAMAHA
 vendor COMPAQ		0x049f	Compaq
 vendor HITACHI		0x04a4	Hitachi
@@ -1657,6 +1658,9 @@ product MCT DU_H3SP_USB232	0x0200	D-Link
 product MCT USB232		0x0210	USB-232 Interface
 product MCT SITECOM_USB232	0x0230	Sitecom USB-232 Products
 
+/* Meizu Electronics */
+product MEIZU M6_SL		0x0140	MiniPlayer M6 (SL)
+
 /* Melco, Inc products */
 product MELCO LUATX1		0x0001	LUA-TX Ethernet
 product MELCO LUATX5		0x0005	LUA-TX Ethernet

Modified: user/thompsa/usb/sys/dev/usb2/controller/at91dci.c
==============================================================================
--- user/thompsa/usb/sys/dev/usb2/controller/at91dci.c	Tue Jan 13 19:18:43 2009	(r187188)
+++ user/thompsa/usb/sys/dev/usb2/controller/at91dci.c	Tue Jan 13 20:42:05 2009	(r187189)
@@ -50,14 +50,11 @@ __FBSDID("$FreeBSD$");
 #include <dev/usb2/include/usb2_defs.h>
 
 #define	USB_DEBUG_VAR at91dcidebug
-#define	usb2_config_td_cc at91dci_config_copy
-#define	usb2_config_td_softc at91dci_softc
 
 #include <dev/usb2/core/usb2_core.h>
 #include <dev/usb2/core/usb2_debug.h>
 #include <dev/usb2/core/usb2_busdma.h>
 #include <dev/usb2/core/usb2_process.h>
-#include <dev/usb2/core/usb2_config_td.h>
 #include <dev/usb2/core/usb2_sw_transfer.h>
 #include <dev/usb2/core/usb2_transfer.h>
 #include <dev/usb2/core/usb2_device.h>
@@ -106,7 +103,6 @@ static void	at91dci_standard_done(struct
 
 static usb2_sw_transfer_func_t at91dci_root_intr_done;
 static usb2_sw_transfer_func_t at91dci_root_ctrl_done;
-static usb2_config_td_command_t at91dci_root_ctrl_task;
 
 /*
  * NOTE: Some of the bits in the CSR register have inverse meaning so
@@ -263,13 +259,13 @@ at91dci_pull_down(struct at91dci_softc *
 static void
 at91dci_wakeup_peer(struct usb2_xfer *xfer)
 {
-	struct at91dci_softc *sc = xfer->usb2_sc;
+	struct at91dci_softc *sc = AT9100_DCI_BUS2SC(xfer->xroot->bus);
 	uint8_t use_polling;
 
 	if (!(sc->sc_flags.status_suspend)) {
 		return;
 	}
-	use_polling = mtx_owned(xfer->xfer_mtx) ? 1 : 0;
+	use_polling = mtx_owned(xfer->xroot->xfer_mtx) ? 1 : 0;
 
 	AT91_UDP_WRITE_4(sc, AT91_UDP_GSTATE, AT91_UDP_GSTATE_ESR);
 
@@ -702,7 +698,7 @@ at91dci_xfer_do_fifo(struct usb2_xfer *x
 	return (1);			/* not complete */
 
 done:
-	sc = xfer->usb2_sc;
+	sc = AT9100_DCI_BUS2SC(xfer->xroot->bus);
 	temp = (xfer->endpoint & UE_ADDR);
 
 	/* update FIFO bank flag and multi buffer */
@@ -733,11 +729,9 @@ repeat:
 	}
 }
 
-static void
-at91dci_vbus_interrupt(struct usb2_bus *bus, uint8_t is_on)
+void
+at91dci_vbus_interrupt(struct at91dci_softc *sc, uint8_t is_on)
 {
-	struct at91dci_softc *sc = AT9100_DCI_BUS2SC(bus);
-
 	DPRINTFN(5, "vbus = %u\n", is_on);
 
 	USB_BUS_LOCK(&sc->sc_bus);
@@ -764,7 +758,6 @@ at91dci_vbus_interrupt(struct usb2_bus *
 			    &at91dci_root_intr_done);
 		}
 	}
-
 	USB_BUS_UNLOCK(&sc->sc_bus);
 }
 
@@ -890,7 +883,7 @@ at91dci_setup_standard_chain(struct usb2
 
 	DPRINTFN(9, "addr=%d endpt=%d sumlen=%d speed=%d\n",
 	    xfer->address, UE_GET_ADDR(xfer->endpoint),
-	    xfer->sumlen, usb2_get_speed(xfer->udev));
+	    xfer->sumlen, usb2_get_speed(xfer->xroot->udev));
 
 	temp.max_frame_size = xfer->max_frame_size;
 
@@ -905,7 +898,7 @@ at91dci_setup_standard_chain(struct usb2
 	temp.setup_alt_next = xfer->flags_int.short_frames_ok;
 	temp.offset = 0;
 
-	sc = xfer->usb2_sc;
+	sc = AT9100_DCI_BUS2SC(xfer->xroot->bus);
 	ep_no = (xfer->endpoint & UE_ADDR);
 
 	/* check if we should prepend a setup message */
@@ -1032,7 +1025,7 @@ at91dci_timeout(void *arg)
 
 	DPRINTF("xfer=%p\n", xfer);
 
-	USB_BUS_LOCK_ASSERT(xfer->udev->bus, MA_OWNED);
+	USB_BUS_LOCK_ASSERT(xfer->xroot->bus, MA_OWNED);
 
 	/* transfer is transferred */
 	at91dci_device_done(xfer, USB_ERR_TIMEOUT);
@@ -1046,7 +1039,7 @@ at91dci_start_standard_chain(struct usb2
 	/* poll one time */
 	if (at91dci_xfer_do_fifo(xfer)) {
 
-		struct at91dci_softc *sc = xfer->usb2_sc;
+		struct at91dci_softc *sc = AT9100_DCI_BUS2SC(xfer->xroot->bus);
 		uint8_t ep_no = xfer->endpoint & UE_ADDR;
 
 		/*
@@ -1059,7 +1052,7 @@ at91dci_start_standard_chain(struct usb2
 		DPRINTFN(15, "enable interrupts on endpoint %d\n", ep_no);
 
 		/* put transfer on interrupt queue */
-		usb2_transfer_enqueue(&xfer->udev->bus->intr_q, xfer);
+		usb2_transfer_enqueue(&xfer->xroot->bus->intr_q, xfer);
 
 		/* start timeout, if any */
 		if (xfer->timeout != 0) {
@@ -1073,7 +1066,7 @@ static void
 at91dci_root_intr_done(struct usb2_xfer *xfer,
     struct usb2_sw_transfer *std)
 {
-	struct at91dci_softc *sc = xfer->usb2_sc;
+	struct at91dci_softc *sc = AT9100_DCI_BUS2SC(xfer->xroot->bus);
 
 	DPRINTFN(9, "\n");
 
@@ -1213,7 +1206,7 @@ done:
 static void
 at91dci_device_done(struct usb2_xfer *xfer, usb2_error_t error)
 {
-	struct at91dci_softc *sc = xfer->usb2_sc;
+	struct at91dci_softc *sc = AT9100_DCI_BUS2SC(xfer->xroot->bus);
 	uint8_t ep_no;
 
 	USB_BUS_LOCK_ASSERT(&sc->sc_bus, MA_OWNED);
@@ -1627,7 +1620,7 @@ at91dci_device_isoc_fs_close(struct usb2
 static void
 at91dci_device_isoc_fs_enter(struct usb2_xfer *xfer)
 {
-	struct at91dci_softc *sc = xfer->usb2_sc;
+	struct at91dci_softc *sc = AT9100_DCI_BUS2SC(xfer->xroot->bus);
 	uint32_t temp;
 	uint32_t nframes;
 
@@ -1709,7 +1702,7 @@ at91dci_root_ctrl_open(struct usb2_xfer 
 static void
 at91dci_root_ctrl_close(struct usb2_xfer *xfer)
 {
-	struct at91dci_softc *sc = xfer->usb2_sc;
+	struct at91dci_softc *sc = AT9100_DCI_BUS2SC(xfer->xroot->bus);
 
 	if (sc->sc_root_ctrl.xfer == xfer) {
 		sc->sc_root_ctrl.xfer = NULL;
@@ -1783,7 +1776,7 @@ static const struct usb2_hub_descriptor_
 	.wHubCharacteristics[0] =
 	(UHD_PWR_NO_SWITCH | UHD_OC_INDIVIDUAL) & 0xFF,
 	.wHubCharacteristics[1] =
-	(UHD_PWR_NO_SWITCH | UHD_OC_INDIVIDUAL) >> 16,
+	(UHD_PWR_NO_SWITCH | UHD_OC_INDIVIDUAL) >> 8,
 	.bPwrOn2PwrGood = 50,
 	.bHubContrCurrent = 0,
 	.DeviceRemovable = {0},		/* port is removable */
@@ -1813,26 +1806,24 @@ at91dci_root_ctrl_enter(struct usb2_xfer
 static void
 at91dci_root_ctrl_start(struct usb2_xfer *xfer)
 {
-	struct at91dci_softc *sc = xfer->usb2_sc;
+	struct at91dci_softc *sc = AT9100_DCI_BUS2SC(xfer->xroot->bus);
 
 	sc->sc_root_ctrl.xfer = xfer;
 
-	usb2_config_td_queue_command(
-	    &sc->sc_config_td, NULL, &at91dci_root_ctrl_task, 0, 0);
+	usb2_bus_roothub_exec(xfer->xroot->bus);
 }
 
 static void
-at91dci_root_ctrl_task(struct at91dci_softc *sc,
-    struct at91dci_config_copy *cc, uint16_t refcount)
+at91dci_root_ctrl_task(struct usb2_bus *bus)
 {
-	at91dci_root_ctrl_poll(sc);
+	at91dci_root_ctrl_poll(AT9100_DCI_BUS2SC(bus));
 }
 
 static void
 at91dci_root_ctrl_done(struct usb2_xfer *xfer,
     struct usb2_sw_transfer *std)
 {
-	struct at91dci_softc *sc = xfer->usb2_sc;
+	struct at91dci_softc *sc = AT9100_DCI_BUS2SC(xfer->xroot->bus);
 	uint16_t value;
 	uint16_t index;
 	uint8_t use_polling;
@@ -1853,7 +1844,7 @@ at91dci_root_ctrl_done(struct usb2_xfer 
 	value = UGETW(std->req.wValue);
 	index = UGETW(std->req.wIndex);
 
-	use_polling = mtx_owned(xfer->xfer_mtx) ? 1 : 0;
+	use_polling = mtx_owned(xfer->xroot->xfer_mtx) ? 1 : 0;
 
 	/* demultiplex the control request */
 
@@ -2258,7 +2249,7 @@ at91dci_root_intr_open(struct usb2_xfer 
 static void
 at91dci_root_intr_close(struct usb2_xfer *xfer)
 {
-	struct at91dci_softc *sc = xfer->usb2_sc;
+	struct at91dci_softc *sc = AT9100_DCI_BUS2SC(xfer->xroot->bus);
 
 	if (sc->sc_root_intr.xfer == xfer) {
 		sc->sc_root_intr.xfer = NULL;
@@ -2275,7 +2266,7 @@ at91dci_root_intr_enter(struct usb2_xfer
 static void
 at91dci_root_intr_start(struct usb2_xfer *xfer)
 {
-	struct at91dci_softc *sc = xfer->usb2_sc;
+	struct at91dci_softc *sc = AT9100_DCI_BUS2SC(xfer->xroot->bus);
 
 	sc->sc_root_intr.xfer = xfer;
 }
@@ -2305,11 +2296,6 @@ at91dci_xfer_setup(struct usb2_setup_par
 	xfer = parm->curr_xfer;
 
 	/*
-	 * setup xfer
-	 */
-	xfer->usb2_sc = sc;
-
-	/*
 	 * NOTE: This driver does not use any of the parameters that
 	 * are computed from the following values. Just set some
 	 * reasonable dummies:
@@ -2477,5 +2463,5 @@ struct usb2_bus_methods at91dci_bus_meth
 	.get_hw_ep_profile = &at91dci_get_hw_ep_profile,
 	.set_stall = &at91dci_set_stall,
 	.clear_stall = &at91dci_clear_stall,
-	.vbus_interrupt = &at91dci_vbus_interrupt,
+	.roothub_exec = &at91dci_root_ctrl_task,
 };

Modified: user/thompsa/usb/sys/dev/usb2/controller/at91dci.h
==============================================================================
--- user/thompsa/usb/sys/dev/usb2/controller/at91dci.h	Tue Jan 13 19:18:43 2009	(r187188)
+++ user/thompsa/usb/sys/dev/usb2/controller/at91dci.h	Tue Jan 13 20:42:05 2009	(r187189)
@@ -34,6 +34,8 @@
 #ifndef _AT9100_DCI_H_
 #define	_AT9100_DCI_H_
 
+#define	AT91_MAX_DEVICES (USB_MIN_DEVICES + 1)
+
 #define	AT91_UDP_FRM 	0x00		/* Frame number register */
 #define	AT91_UDP_FRM_MASK     (0x7FF <<  0)	/* Frame Number as Defined in
 						 * the Packet Field Formats */
@@ -204,8 +206,8 @@ struct at91dci_softc {
 	LIST_HEAD(, usb2_xfer) sc_interrupt_list_head;
 	struct usb2_sw_transfer sc_root_ctrl;
 	struct usb2_sw_transfer sc_root_intr;
-	struct usb2_config_td sc_config_td;
 
+	struct usb2_device *sc_devices[AT91_MAX_DEVICES];
 	struct resource *sc_io_res;
 	struct resource *sc_irq_res;
 	void   *sc_intr_hdl;
@@ -238,5 +240,6 @@ void	at91dci_uninit(struct at91dci_softc
 void	at91dci_suspend(struct at91dci_softc *sc);
 void	at91dci_resume(struct at91dci_softc *sc);
 void	at91dci_interrupt(struct at91dci_softc *sc);
+void	at91dci_vbus_interrupt(struct at91dci_softc *sc, uint8_t is_on);
 
 #endif					/* _AT9100_DCI_H_ */

Modified: user/thompsa/usb/sys/dev/usb2/controller/at91dci_atmelarm.c
==============================================================================
--- user/thompsa/usb/sys/dev/usb2/controller/at91dci_atmelarm.c	Tue Jan 13 19:18:43 2009	(r187188)
+++ user/thompsa/usb/sys/dev/usb2/controller/at91dci_atmelarm.c	Tue Jan 13 20:42:05 2009	(r187189)
@@ -34,7 +34,6 @@ __FBSDID("$FreeBSD$");
 #include <dev/usb2/core/usb2_core.h>
 #include <dev/usb2/core/usb2_busdma.h>
 #include <dev/usb2/core/usb2_process.h>
-#include <dev/usb2/core/usb2_config_td.h>
 #include <dev/usb2/core/usb2_sw_transfer.h>
 #include <dev/usb2/core/usb2_util.h>
 
@@ -73,7 +72,7 @@ struct at91_udp_softc {
 };
 
 static void
-at91_vbus_interrupt(struct at91_udp_softc *sc)
+at91_vbus_poll(struct at91_udp_softc *sc)
 {
 	uint32_t temp;
 	uint8_t vbus_val;
@@ -85,8 +84,7 @@ at91_vbus_interrupt(struct at91_udp_soft
 	/* just forward it */
 
 	vbus_val = at91_pio_gpio_get(VBUS_BASE, VBUS_MASK);
-	(sc->sc_dci.sc_bus.methods->vbus_interrupt)
-	    (&sc->sc_dci.sc_bus, vbus_val);
+	at91dci_vbus_interrupt(&sc->sc_dci, vbus_val);
 }
 
 static void
@@ -145,9 +143,12 @@ at91_udp_attach(device_t dev)
 	sc->sc_dci.sc_pull_down = &at91_udp_pull_down;
 	sc->sc_dci.sc_pull_arg = sc;
 
-	/* get all DMA memory */
-
+	/* initialise some bus fields */
 	sc->sc_dci.sc_bus.parent = dev;
+	sc->sc_dci.sc_bus.devices = sc->sc_dci.sc_devices;
+	sc->sc_dci.sc_bus.devices_max = AT91_MAX_DEVICES;
+
+	/* get all DMA memory */
 	if (usb2_bus_mem_alloc_all(&sc->sc_dci.sc_bus,
 	    USB_GET_DMA_TAG(dev), NULL)) {
 		return (ENOMEM);
@@ -205,12 +206,6 @@ at91_udp_attach(device_t dev)
 	}
 	device_set_ivars(sc->sc_dci.sc_bus.bdev, &sc->sc_dci.sc_bus);
 
-	err = usb2_config_td_setup(&sc->sc_dci.sc_config_td, sc,
-	    &sc->sc_dci.sc_bus.bus_mtx, NULL, 0, 4);
-	if (err) {
-		device_printf(dev, "could not setup config thread!\n");
-		goto error;
-	}
 #if (__FreeBSD_version >= 700031)
 	err = bus_setup_intr(dev, sc->sc_dci.sc_irq_res, INTR_TYPE_BIO | INTR_MPSAFE,
 	    NULL, (void *)at91dci_interrupt, sc, &sc->sc_dci.sc_intr_hdl);
@@ -224,10 +219,10 @@ at91_udp_attach(device_t dev)
 	}
 #if (__FreeBSD_version >= 700031)
 	err = bus_setup_intr(dev, sc->sc_vbus_irq_res, INTR_TYPE_BIO | INTR_MPSAFE,
-	    NULL, (void *)at91_vbus_interrupt, sc, &sc->sc_vbus_intr_hdl);
+	    NULL, (void *)at91_vbus_poll, sc, &sc->sc_vbus_intr_hdl);
 #else
 	err = bus_setup_intr(dev, sc->sc_vbus_irq_res, INTR_TYPE_BIO | INTR_MPSAFE,
-	    (void *)at91_vbus_interrupt, sc, &sc->sc_vbus_intr_hdl);
+	    (void *)at91_vbus_poll, sc, &sc->sc_vbus_intr_hdl);
 #endif
 	if (err) {
 		sc->sc_vbus_intr_hdl = NULL;
@@ -241,7 +236,7 @@ at91_udp_attach(device_t dev)
 		goto error;
 	} else {
 		/* poll VBUS one time */
-		at91_vbus_interrupt(sc);
+		at91_vbus_poll(sc);
 	}
 	return (0);
 
@@ -305,8 +300,6 @@ at91_udp_detach(device_t dev)
 		    sc->sc_dci.sc_io_res);
 		sc->sc_dci.sc_io_res = NULL;
 	}
-	usb2_config_td_unsetup(&sc->sc_dci.sc_config_td);
-
 	usb2_bus_mem_free_all(&sc->sc_dci.sc_bus, NULL);
 
 	/* disable clocks */

Copied: user/thompsa/usb/sys/dev/usb2/controller/atmegadci.c (from r187188, head/sys/dev/usb2/controller/atmegadci.c)
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ user/thompsa/usb/sys/dev/usb2/controller/atmegadci.c	Tue Jan 13 20:42:05 2009	(r187189, copy of r187188, head/sys/dev/usb2/controller/atmegadci.c)
@@ -0,0 +1,2327 @@
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+/*-
+ * Copyright (c) 2009 Hans Petter Selasky. All rights reserved.
+ *
+ * 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 AUTHOR 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 AUTHOR 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.
+ */
+
+/*
+ * This file contains the driver for the ATMEGA series USB Device
+ * Controller
+ */
+
+/*
+ * NOTE: When the chip detects BUS-reset it will also reset the
+ * endpoints, Function-address and more.
+ */
+
+#include <dev/usb2/include/usb2_standard.h>
+#include <dev/usb2/include/usb2_mfunc.h>
+#include <dev/usb2/include/usb2_error.h>
+#include <dev/usb2/include/usb2_defs.h>
+
+#define	USB_DEBUG_VAR atmegadci_debug
+
+#include <dev/usb2/core/usb2_core.h>
+#include <dev/usb2/core/usb2_debug.h>
+#include <dev/usb2/core/usb2_busdma.h>
+#include <dev/usb2/core/usb2_process.h>
+#include <dev/usb2/core/usb2_sw_transfer.h>
+#include <dev/usb2/core/usb2_transfer.h>
+#include <dev/usb2/core/usb2_device.h>
+#include <dev/usb2/core/usb2_hub.h>
+#include <dev/usb2/core/usb2_util.h>
+
+#include <dev/usb2/controller/usb2_controller.h>
+#include <dev/usb2/controller/usb2_bus.h>
+#include <dev/usb2/controller/atmegadci.h>
+
+#define	ATMEGA_BUS2SC(bus) \
+   ((struct atmegadci_softc *)(((uint8_t *)(bus)) - \
+   USB_P2U(&(((struct atmegadci_softc *)0)->sc_bus))))

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-src-user mailing list