PERFORCE change 144445 for review

Hans Petter Selasky hselasky at FreeBSD.org
Tue Jul 1 21:44:55 UTC 2008


http://perforce.freebsd.org/chv.cgi?CH=144445

Change 144445 by hselasky at hselasky_laptop001 on 2008/07/01 21:44:42

	
	New USB sound module is finished and tested.

Affected files ...

.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_core.h#8 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_device.h#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/include/usb2_defs.h#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/sound/uaudio2.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/sound/uaudio2_reg.h#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/sound/usb2_sound.c#1 add
.. //depot/projects/usb/src/sys/dev/usb2/sound/usb2_sound.h#1 add
.. //depot/projects/usb/src/sys/modules/usb2/sound/Makefile#2 edit

Differences ...

==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_core.h#8 (text+ko) ====

@@ -391,7 +391,7 @@
 struct usb2_interface_descriptor *usb2_get_interface_descriptor(struct usb2_interface *iface);
 uint8_t	usb2_clear_stall_callback(struct usb2_xfer *xfer1, struct usb2_xfer *xfer2);
 uint8_t	usb2_get_interface_altindex(struct usb2_interface *iface);
-uint8_t	usb2_get_quirk(struct usb2_attach_arg *uaa, uint16_t quirk);
+usb2_error_t usb2_set_alt_interface_index(struct usb2_device *udev, uint8_t iface_index, uint8_t alt_index);
 uint8_t	usb2_get_speed(struct usb2_device *udev);
 usb2_error_t usb2_transfer_setup(struct usb2_device *udev, const uint8_t *ifaces, struct usb2_xfer **pxfer, const struct usb2_config *setup_start, uint16_t n_setup, void *priv_sc, struct mtx *priv_mtx);
 void	usb2_set_frame_data(struct usb2_xfer *xfer, void *ptr, uint32_t frindex);

==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_device.h#3 (text+ko) ====

@@ -147,7 +147,6 @@
 usb2_error_t usb2_interface_count(struct usb2_device *udev, uint8_t *count);
 usb2_error_t usb2_probe_and_attach(struct usb2_device *udev, uint8_t iface_index);
 usb2_error_t usb2_reset_iface_endpoints(struct usb2_device *udev, uint8_t iface_index);
-usb2_error_t usb2_set_alt_interface_index(struct usb2_device *udev, uint8_t iface_index, uint8_t alt_index);
 usb2_error_t usb2_set_config_index(struct usb2_device *udev, uint8_t index);
 usb2_error_t usb2_set_endpoint_stall(struct usb2_device *udev, struct usb2_pipe *pipe, uint8_t do_stall);
 usb2_error_t usb2_suspend_resume(struct usb2_device *udev, uint8_t do_suspend);

==== //depot/projects/usb/src/sys/dev/usb2/include/usb2_defs.h#3 (text+ko) ====

@@ -32,7 +32,7 @@
 #define	USB_DEV_MAX 128			/* units */
 #define	USB_IFACE_MAX 32		/* units */
 #define	USB_EP_MAX (2*16)		/* hardcoded */
-#define	USB_FIFO_MAX (2 * USB_EP_MAX)
+#define	USB_FIFO_MAX (4 * USB_EP_MAX)
 
 #define	USB_MAX_DEVICES USB_DEV_MAX	/* including virtual root HUB and
 					 * address zero */

==== //depot/projects/usb/src/sys/dev/usb2/sound/uaudio2.c#2 (text+ko) ====

@@ -52,18 +52,30 @@
  *  $NetBSD: uaudio.c,v 1.97 2005/02/24 08:19:38 martin Exp $
  */
 
-#include <sys/cdefs.h>
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/malloc.h>
+#include <dev/usb2/include/usb2_devid.h>
+#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_revision.h>
+
+#define	USB_DEBUG_VAR uaudio_debug
+
+#include <dev/usb2/core/usb2_core.h>
+#include <dev/usb2/core/usb2_lookup.h>
+#include <dev/usb2/core/usb2_debug.h>
+#include <dev/usb2/core/usb2_util.h>
+#include <dev/usb2/core/usb2_busdma.h>
+#include <dev/usb2/core/usb2_parse.h>
+#include <dev/usb2/core/usb2_request.h>
+#include <dev/usb2/core/usb2_mbuf.h>
+#include <dev/usb2/core/usb2_dev.h>
+#include <dev/usb2/core/usb2_dynamic.h>
+
+#include <dev/usb2/quirk/usb2_quirk.h>
+#include <dev/usb2/sound/uaudio2_reg.h>
+
 #include <sys/reboot.h>			/* for bootverbose */
 
-#include <dev/usb/usb_port.h>
-#include <dev/usb/usb.h>
-#include <dev/usb/usb_subr.h>
-#include <dev/usb/usb_quirks.h>
-
 #include <dev/sound/pcm/sound.h>
 #include <dev/sound/chip.h>
 #include "feeder_if.h"
@@ -72,17 +84,11 @@
 #include <dev/sound/usb/uaudio.h>
 
 #ifdef USB_DEBUG
-#define	DPRINTF(n,fmt,...)	\
-  do { if (uaudio_debug > (n)) {		\
-      printf("%s: " fmt, __FUNCTION__,## __VA_ARGS__); } } while (0)
-
 static int uaudio_debug = 0;
 
-SYSCTL_NODE(_hw_usb, OID_AUTO, uaudio, CTLFLAG_RW, 0, "USB uaudio");
-SYSCTL_INT(_hw_usb_uaudio, OID_AUTO, debug, CTLFLAG_RW,
+SYSCTL_NODE(_hw_usb2, OID_AUTO, uaudio, CTLFLAG_RW, 0, "USB uaudio");
+SYSCTL_INT(_hw_usb2_uaudio, OID_AUTO, debug, CTLFLAG_RW,
     &uaudio_debug, 0, "uaudio debug level");
-#else
-#define	DPRINTF(...) do { } while (0)
 #endif
 
 static uint32_t uaudio_default_rate = 96000;
@@ -94,8 +100,6 @@
 #define	UAUDIO_RECURSE_LIMIT   24	/* rounds */
 #define	UAUDIO_DEFAULT_BUFSZ  (16*1024)	/* bytes */
 
-
-
 #define	MAKE_WORD(h,l) (((h) << 8) | (l))
 #define	BIT_TEST(bm,bno) (((bm)[(bno) / 8] >> (7 - ((bno) % 8))) & 1)
 
@@ -135,16 +139,16 @@
 	struct pcmchan_caps pcm_cap;	/* capabilities */
 
 	struct snd_dbuf *pcm_buf;
-	const struct usbd_config *usb_cfg;
+	const struct usb2_config *usb2_cfg;
 	struct mtx *pcm_mtx;		/* lock protecting this structure */
 	struct uaudio_softc *priv_sc;
 	struct pcm_channel *pcm_ch;
-	struct usbd_xfer *xfer[UAUDIO_NCHANBUFS];
-	const struct usb_audio_streaming_interface_descriptor *p_asid;
-	const struct usb_audio_streaming_type1_descriptor *p_asf1d;
-	const struct usb_audio_streaming_endpoint_descriptor *p_sed;
-	const usb_endpoint_descriptor_audio_t *p_ed1;
-	const usb_endpoint_descriptor_audio_t *p_ed2;
+	struct usb2_xfer *xfer[UAUDIO_NCHANBUFS];
+	const struct usb2_audio_streaming_interface_descriptor *p_asid;
+	const struct usb2_audio_streaming_type1_descriptor *p_asf1d;
+	const struct usb2_audio_streaming_endpoint_descriptor *p_sed;
+	const usb2_endpoint_descriptor_audio_t *p_ed1;
+	const usb2_endpoint_descriptor_audio_t *p_ed2;
 	const struct uaudio_format *p_fmt;
 
 	uint8_t *buf;			/* pointer to buffer */
@@ -170,7 +174,7 @@
 #define	UMIDI_BULK_SIZE  1024		/* bytes */
 
 struct umidi_sub_chan {
-	struct usb_cdev cdev;
+	struct usb2_fifo_sc fifo;
 	uint8_t *temp_cmd;
 	uint8_t	temp_0[4];
 	uint8_t	temp_1[4];
@@ -193,7 +197,7 @@
 	struct umidi_sub_chan sub[UMIDI_CABLES_MAX];
 	struct mtx mtx;
 
-	struct usbd_xfer *xfer[UMIDI_N_TRANSFER];
+	struct usb2_xfer *xfer[UMIDI_N_TRANSFER];
 
 	uint8_t	iface_index;
 	uint8_t	iface_alt_index;
@@ -217,8 +221,8 @@
 	struct uaudio_chan sc_play_chan;
 	struct umidi_chan sc_midi_chan;
 
-	struct usbd_device *sc_udev;
-	struct usbd_xfer *sc_mixer_xfer[1];
+	struct usb2_device *sc_udev;
+	struct usb2_xfer *sc_mixer_xfer[1];
 	struct mtx *sc_mixer_lock;
 	struct uaudio_mixer_node *sc_mixer_root;
 	struct uaudio_mixer_node *sc_mixer_curr;
@@ -226,7 +230,6 @@
 	uint32_t sc_buffer_size;
 	uint32_t sc_mix_info;
 	uint32_t sc_recsrc_info;
-	uint32_t sc_quirks;
 
 	uint16_t sc_audio_rev;
 	uint16_t sc_mixer_count;
@@ -237,7 +240,10 @@
 	uint8_t	sc_mixer_chan;
 	uint8_t	sc_pcm_registered:1;
 	uint8_t	sc_mixer_init:1;
-	uint8_t	sc_unused:6;
+	uint8_t	sc_uq_audio_swap_lr:1;
+	uint8_t	sc_uq_au_inp_async:1;
+	uint8_t	sc_uq_au_no_xu:1;
+	uint8_t	sc_uq_bad_adc:1;
 };
 
 struct uaudio_search_result {
@@ -250,14 +256,14 @@
 
 struct uaudio_terminal_node {
 	union {
-		const usb_descriptor_t *desc;
-		const struct usb_audio_input_terminal *it;
-		const struct usb_audio_output_terminal *ot;
-		const struct usb_audio_mixer_unit_0 *mu;
-		const struct usb_audio_selector_unit *su;
-		const struct usb_audio_feature_unit *fu;
-		const struct usb_audio_processing_unit_0 *pu;
-		const struct usb_audio_extension_unit_0 *eu;
+		const struct usb2_descriptor *desc;
+		const struct usb2_audio_input_terminal *it;
+		const struct usb2_audio_output_terminal *ot;
+		const struct usb2_audio_mixer_unit_0 *mu;
+		const struct usb2_audio_selector_unit *su;
+		const struct usb2_audio_feature_unit *fu;
+		const struct usb2_audio_processing_unit_0 *pu;
+		const struct usb2_audio_extension_unit_0 *eu;
 	}	u;
 	struct uaudio_search_result usr;
 	struct uaudio_terminal_node *root;
@@ -307,157 +313,74 @@
 static device_attach_t uaudio_attach;
 static device_detach_t uaudio_detach;
 
-static usbd_callback_t uaudio_chan_play_callback;
-static usbd_callback_t uaudio_chan_record_callback;
-static usbd_callback_t uaudio_mixer_write_cfg_callback;
-static usbd_callback_t umidi_read_clear_stall_callback;
-static usbd_callback_t umidi_bulk_read_callback;
-static usbd_callback_t umidi_write_clear_stall_callback;
-static usbd_callback_t umidi_bulk_write_callback;
+static usb2_callback_t uaudio_chan_play_callback;
+static usb2_callback_t uaudio_chan_record_callback;
+static usb2_callback_t uaudio_mixer_write_cfg_callback;
+static usb2_callback_t umidi_read_clear_stall_callback;
+static usb2_callback_t umidi_bulk_read_callback;
+static usb2_callback_t umidi_write_clear_stall_callback;
+static usb2_callback_t umidi_bulk_write_callback;
 
 #ifdef USB_DEBUG
-static void
-	uaudio_chan_dump_ep_desc(const usb_endpoint_descriptor_audio_t *ed);
+static void uaudio_chan_dump_ep_desc(const usb2_endpoint_descriptor_audio_t *ed);
 
 #endif
 
-static void
-uaudio_chan_fill_info_sub(struct uaudio_softc *sc, struct usbd_device *udev,
-    uint32_t rate, uint16_t fps, uint8_t channels,
-    uint8_t bit_resolution);
-
-static void
-	uaudio_chan_fill_info(struct uaudio_softc *sc, struct usbd_device *udev);
-
-static void
-uaudio_mixer_add_ctl_sub(struct uaudio_softc *sc,
-    struct uaudio_mixer_node *mc);
-static void
-	uaudio_mixer_add_ctl(struct uaudio_softc *sc, struct uaudio_mixer_node *mc);
+static void uaudio_chan_fill_info_sub(struct uaudio_softc *sc, struct usb2_device *udev, uint32_t rate, uint16_t fps, uint8_t channels, uint8_t bit_resolution);
+static void uaudio_chan_fill_info(struct uaudio_softc *sc, struct usb2_device *udev);
+static void uaudio_mixer_add_ctl_sub(struct uaudio_softc *sc, struct uaudio_mixer_node *mc);
+static void uaudio_mixer_add_ctl(struct uaudio_softc *sc, struct uaudio_mixer_node *mc);
+static void uaudio_mixer_add_input(struct uaudio_softc *sc, const struct uaudio_terminal_node *iot, int id);
+static void uaudio_mixer_add_output(struct uaudio_softc *sc, const struct uaudio_terminal_node *iot, int id);
+static void uaudio_mixer_add_mixer(struct uaudio_softc *sc, const struct uaudio_terminal_node *iot, int id);
+static void uaudio_mixer_add_selector(struct uaudio_softc *sc, const struct uaudio_terminal_node *iot, int id);
+static uint32_t uaudio_mixer_feature_get_bmaControls(const struct usb2_audio_feature_unit *d, uint8_t index);
+static void uaudio_mixer_add_feature(struct uaudio_softc *sc, const struct uaudio_terminal_node *iot, int id);
+static void uaudio_mixer_add_processing_updown(struct uaudio_softc *sc, const struct uaudio_terminal_node *iot, int id);
+static void uaudio_mixer_add_processing(struct uaudio_softc *sc, const struct uaudio_terminal_node *iot, int id);
+static void uaudio_mixer_add_extension(struct uaudio_softc *sc, const struct uaudio_terminal_node *iot, int id);
+static const void *uaudio_mixer_verify_desc(const void *arg, uint32_t len);
 
-static void
-uaudio_mixer_add_input(struct uaudio_softc *sc,
-    const struct uaudio_terminal_node *iot, int id);
-static void
-uaudio_mixer_add_output(struct uaudio_softc *sc,
-    const struct uaudio_terminal_node *iot, int id);
-static void
-uaudio_mixer_add_mixer(struct uaudio_softc *sc,
-    const struct uaudio_terminal_node *iot, int id);
-static void
-uaudio_mixer_add_selector(struct uaudio_softc *sc,
-    const struct uaudio_terminal_node *iot, int id);
-static uint32_t
-uaudio_mixer_feature_get_bmaControls(const struct usb_audio_feature_unit *d,
-    uint8_t index);
-static void
-uaudio_mixer_add_feature(struct uaudio_softc *sc,
-    const struct uaudio_terminal_node *iot, int id);
-static void
-uaudio_mixer_add_processing_updown(struct uaudio_softc *sc,
-    const struct uaudio_terminal_node *iot,
-    int id);
-static void
-uaudio_mixer_add_processing(struct uaudio_softc *sc,
-    const struct uaudio_terminal_node *iot, int id);
-static void
-uaudio_mixer_add_extension(struct uaudio_softc *sc,
-    const struct uaudio_terminal_node *iot, int id);
-static const void *
-	uaudio_mixer_verify_desc(const void *arg, uint32_t len);
-
 #ifdef USB_DEBUG
-static void
-	uaudio_mixer_dump_cluster(uint8_t id, const struct uaudio_terminal_node *iot);
+static void uaudio_mixer_dump_cluster(uint8_t id, const struct uaudio_terminal_node *iot);
 
 #endif
 
-static struct usb_audio_cluster
-	uaudio_mixer_get_cluster(uint8_t id, const struct uaudio_terminal_node *iot);
+static struct usb2_audio_cluster uaudio_mixer_get_cluster(uint8_t id, const struct uaudio_terminal_node *iot);
 
 #ifdef USB_DEBUG
-static const char *
-	uaudio_mixer_get_terminal_name(uint16_t terminal_type);
+static const char *uaudio_mixer_get_terminal_name(uint16_t terminal_type);
 
 #endif
 
-static uint16_t
-uaudio_mixer_determine_class(const struct uaudio_terminal_node *iot,
-    struct uaudio_mixer_node *mix);
-static uint16_t
-uaudio_mixer_feature_name(const struct uaudio_terminal_node *iot,
-    struct uaudio_mixer_node *mix);
+static uint16_t uaudio_mixer_determine_class(const struct uaudio_terminal_node *iot, struct uaudio_mixer_node *mix);
+static uint16_t uaudio_mixer_feature_name(const struct uaudio_terminal_node *iot, struct uaudio_mixer_node *mix);
+static const struct uaudio_terminal_node *uaudio_mixer_get_input(const struct uaudio_terminal_node *iot, uint8_t index);
+static const struct uaudio_terminal_node *uaudio_mixer_get_output(const struct uaudio_terminal_node *iot, uint8_t index);
+static void uaudio_mixer_find_inputs_sub(struct uaudio_terminal_node *root, const uint8_t *p_id, uint8_t n_id, struct uaudio_search_result *info);
+static void uaudio_mixer_find_outputs_sub(struct uaudio_terminal_node *root, uint8_t id, uint8_t n_id, struct uaudio_search_result *info);
+static void uaudio_mixer_fill_info(struct uaudio_softc *sc, struct usb2_device *udev, void *desc);
+static uint16_t uaudio_mixer_get(struct usb2_device *udev, uint8_t what, struct uaudio_mixer_node *mc);
+static usb2_error_t uaudio_set_speed(struct usb2_device *udev, uint8_t endpt, uint32_t speed);
+static int uaudio_mixer_signext(uint8_t type, int val);
+static int uaudio_mixer_bsd2value(struct uaudio_mixer_node *mc, int32_t val);
 
-static const struct uaudio_terminal_node *
-	uaudio_mixer_get_input(const struct uaudio_terminal_node *iot, uint8_t index);
+static void uaudio_mixer_ctl_set(struct uaudio_softc *sc, struct uaudio_mixer_node *mc, uint8_t chan, int32_t val);
+static void uaudio_mixer_init(struct uaudio_softc *sc);
+static uint8_t umidi_convert_to_usb(struct umidi_sub_chan *sub, uint8_t cn, uint8_t b);
+static struct umidi_sub_chan *umidi_sub_by_fifo(struct usb2_fifo *fifo);
+static void umidi_start_read(struct usb2_fifo *fifo);
+static void umidi_stop_read(struct usb2_fifo *fifo);
+static void umidi_start_write(struct usb2_fifo *fifo);
+static void umidi_stop_write(struct usb2_fifo *fifo);
+static int umidi_open(struct usb2_fifo *fifo, int fflags, struct thread *td);
+static int umidi_ioctl(struct usb2_fifo *fifo, u_long cmd, void *data, int fflags, struct thread *td);
+static void umidi_close(struct usb2_fifo *fifo, int fflags, struct thread *td);
+static void umidi_init(device_t dev);
+static int32_t umidi_probe(device_t dev);
+static int32_t umidi_detach(device_t dev);
 
-static const struct uaudio_terminal_node *
-uaudio_mixer_get_output(const struct uaudio_terminal_node *iot,
-    uint8_t index);
-static void
-uaudio_mixer_find_inputs_sub(struct uaudio_terminal_node *root,
-    const uint8_t *p_id, uint8_t n_id,
-    struct uaudio_search_result *info);
-static void
-uaudio_mixer_find_outputs_sub(struct uaudio_terminal_node *root, uint8_t id,
-    uint8_t n_id,
-    struct uaudio_search_result *info);
-static void
-uaudio_mixer_fill_info(struct uaudio_softc *sc, struct usbd_device *udev,
-    void *desc);
-static uint16_t
-uaudio_mixer_get(struct usbd_device *udev, uint8_t what,
-    struct uaudio_mixer_node *mc);
-static usbd_status_t
-	uaudio_set_speed(struct usbd_device *udev, uint8_t endpt, uint32_t speed);
-
-static int
-	uaudio_mixer_signext(uint8_t type, int val);
-
-static int
-	uaudio_mixer_bsd2value(struct uaudio_mixer_node *mc, int32_t val);
-
-static void
-uaudio_mixer_ctl_set(struct uaudio_softc *sc, struct uaudio_mixer_node *mc,
-    uint8_t chan, int32_t val);
-static void
-	uaudio_mixer_init(struct uaudio_softc *sc);
-
-static uint8_t
-	umidi_convert_to_usb(struct umidi_sub_chan *sub, uint8_t cn, uint8_t b);
-
-static struct umidi_sub_chan *
-	umidi_sub_by_cdev(struct usb_cdev *cdev);
-
-static void
-	umidi_start_read(struct usb_cdev *cdev);
-
-static void
-	umidi_stop_read(struct usb_cdev *cdev);
-
-static void
-	umidi_start_write(struct usb_cdev *cdev);
-
-static void
-	umidi_stop_write(struct usb_cdev *cdev);
-
-static int32_t
-umidi_open(struct usb_cdev *cdev, int32_t fflags,
-    int32_t devtype, struct thread *td);
-
-static int32_t
-umidi_ioctl(struct usb_cdev *cdev, u_long cmd, caddr_t data,
-    int32_t fflags, struct thread *td);
-static void
-	umidi_init(device_t dev);
-
-static int32_t
-	umidi_probe(device_t dev);
-
-static int32_t
-	umidi_detach(device_t dev);
-
-static const struct usbd_config
+static const struct usb2_config
 	uaudio_cfg_record_full_speed[UAUDIO_NCHANBUFS] = {
 	[0] = {
 		.type = UE_ISOCHRONOUS,
@@ -480,7 +403,7 @@
 	},
 };
 
-static const struct usbd_config
+static const struct usb2_config
 	uaudio_cfg_record_high_speed[UAUDIO_NCHANBUFS] = {
 	[0] = {
 		.type = UE_ISOCHRONOUS,
@@ -503,7 +426,7 @@
 	},
 };
 
-static const struct usbd_config
+static const struct usb2_config
 	uaudio_cfg_play_full_speed[UAUDIO_NCHANBUFS] = {
 	[0] = {
 		.type = UE_ISOCHRONOUS,
@@ -526,7 +449,7 @@
 	},
 };
 
-static const struct usbd_config
+static const struct usb2_config
 	uaudio_cfg_play_high_speed[UAUDIO_NCHANBUFS] = {
 	[0] = {
 		.type = UE_ISOCHRONOUS,
@@ -549,13 +472,13 @@
 	},
 };
 
-static const struct usbd_config
+static const struct usb2_config
 	uaudio_mixer_config[1] = {
 	[0] = {
 		.type = UE_CONTROL,
 		.endpoint = 0x00,	/* Control pipe */
 		.direction = UE_DIR_ANY,
-		.mh.bufsize = (sizeof(usb_device_request_t) + 4),
+		.mh.bufsize = (sizeof(struct usb2_device_request) + 4),
 		.mh.callback = &uaudio_mixer_write_cfg_callback,
 		.mh.timeout = 1000,	/* 1 second */
 	},
@@ -581,7 +504,7 @@
 	[0xF] = 1,			/* bytes */
 };
 
-static const struct usbd_config
+static const struct usb2_config
 	umidi_config[UMIDI_N_TRANSFER] = {
 	[0] = {
 		.type = UE_BULK,
@@ -605,7 +528,7 @@
 		.type = UE_CONTROL,
 		.endpoint = 0x00,	/* Control pipe */
 		.direction = UE_DIR_ANY,
-		.mh.bufsize = sizeof(usb_device_request_t),
+		.mh.bufsize = sizeof(struct usb2_device_request),
 		.mh.flags = {},
 		.mh.callback = &umidi_write_clear_stall_callback,
 		.mh.timeout = 1000,	/* 1 second */
@@ -616,7 +539,7 @@
 		.type = UE_CONTROL,
 		.endpoint = 0x00,	/* Control pipe */
 		.direction = UE_DIR_ANY,
-		.mh.bufsize = sizeof(usb_device_request_t),
+		.mh.bufsize = sizeof(struct usb2_device_request),
 		.mh.flags = {},
 		.mh.callback = &umidi_read_clear_stall_callback,
 		.mh.timeout = 1000,	/* 1 second */
@@ -646,34 +569,29 @@
 static int
 uaudio_probe(device_t dev)
 {
-	struct usb_attach_arg *uaa = device_get_ivars(dev);
-	usb_interface_descriptor_t *id;
+	struct usb2_attach_arg *uaa = device_get_ivars(dev);
 
-	if (uaa->usb_mode != USB_MODE_HOST) {
-		return (UMATCH_NONE);
-	}
-	if (uaa->iface == NULL) {
-		return (UMATCH_NONE);
+	if (uaa->usb2_mode != USB_MODE_HOST) {
+		return (ENXIO);
 	}
-	id = usbd_get_interface_descriptor(uaa->iface);
-
 	/* trigger on the control interface */
 
-	if ((id == NULL) ||
-	    (id->bInterfaceClass != UICLASS_AUDIO) ||
-	    (id->bInterfaceSubClass != UISUBCLASS_AUDIOCONTROL) ||
-	    (usbd_get_quirks(uaa->device)->uq_flags & UQ_BAD_AUDIO)) {
-		return (UMATCH_NONE);
+	if ((uaa->info.bInterfaceClass == UICLASS_AUDIO) &&
+	    (uaa->info.bInterfaceSubClass == UISUBCLASS_AUDIOCONTROL)) {
+		if (usb2_test_quirk(uaa, UQ_BAD_AUDIO))
+			return (ENXIO);
+		else
+			return (0);
 	}
-	return (UMATCH_IFACECLASS_IFACESUBCLASS);
+	return (ENXIO);
 }
 
 static int
 uaudio_attach(device_t dev)
 {
-	struct usb_attach_arg *uaa = device_get_ivars(dev);
+	struct usb2_attach_arg *uaa = device_get_ivars(dev);
 	struct uaudio_softc *sc = device_get_softc(dev);
-	usb_interface_descriptor_t *id;
+	struct usb2_interface_descriptor *id;
 	device_t child;
 
 	if (sc == NULL) {
@@ -682,20 +600,31 @@
 	sc->sc_play_chan.priv_sc = sc;
 	sc->sc_rec_chan.priv_sc = sc;
 	sc->sc_udev = uaa->device;
-	sc->sc_quirks = usbd_get_quirks(uaa->device)->uq_flags;
+
+	if (usb2_test_quirk(uaa, UQ_AUDIO_SWAP_LR))
+		sc->sc_uq_audio_swap_lr = 1;
+
+	if (usb2_test_quirk(uaa, UQ_AU_INP_ASYNC))
+		sc->sc_uq_au_inp_async = 1;
+
+	if (usb2_test_quirk(uaa, UQ_AU_NO_XU))
+		sc->sc_uq_au_no_xu = 1;
+
+	if (usb2_test_quirk(uaa, UQ_BAD_ADC))
+		sc->sc_uq_bad_adc = 1;
 
 	umidi_init(dev);
 
-	usbd_set_device_desc(dev);
+	device_set_usb2_desc(dev);
 
-	id = usbd_get_interface_descriptor(uaa->iface);
+	id = usb2_get_interface_descriptor(uaa->iface);
 
 	uaudio_chan_fill_info(sc, uaa->device);
 
 	uaudio_mixer_fill_info(sc, uaa->device, id);
 
-	sc->sc_mixer_iface_index = uaa->iface_index;
-	sc->sc_mixer_iface_no = id->bInterfaceNumber;
+	sc->sc_mixer_iface_index = uaa->info.bIfaceIndex;
+	sc->sc_mixer_iface_no = uaa->info.bIfaceNum;
 
 	DPRINTF(0, "audio rev %d.%02x\n",
 	    sc->sc_audio_rev >> 8,
@@ -782,7 +711,7 @@
 	}
 	uaudio_mixer_init(sc);
 
-	if (sc->sc_quirks & UQ_AUDIO_SWAP_LR) {
+	if (sc->sc_uq_audio_swap_lr) {
 		DPRINTF(0, "hardware has swapped left and right\n");
 		uaudio_pcm_setflags(dev, SD_F_PSWAPLR);
 	}
@@ -868,7 +797,7 @@
 
 #ifdef USB_DEBUG
 static void
-uaudio_chan_dump_ep_desc(const usb_endpoint_descriptor_audio_t *ed)
+uaudio_chan_dump_ep_desc(const usb2_endpoint_descriptor_audio_t *ed)
 {
 	if (ed) {
 		DPRINTF(0, "endpoint=%p bLength=%d bDescriptorType=%d \n"
@@ -886,18 +815,18 @@
 #endif
 
 static void
-uaudio_chan_fill_info_sub(struct uaudio_softc *sc, struct usbd_device *udev,
+uaudio_chan_fill_info_sub(struct uaudio_softc *sc, struct usb2_device *udev,
     uint32_t rate, uint16_t fps, uint8_t channels,
     uint8_t bit_resolution)
 {
-	usb_descriptor_t *desc = NULL;
-	const struct usb_audio_streaming_interface_descriptor *asid = NULL;
-	const struct usb_audio_streaming_type1_descriptor *asf1d = NULL;
-	const struct usb_audio_streaming_endpoint_descriptor *sed = NULL;
-	const usb_endpoint_descriptor_audio_t *ed1 = NULL;
-	const usb_endpoint_descriptor_audio_t *ed2 = NULL;
-	usb_config_descriptor_t *cd = usbd_get_config_descriptor(udev);
-	usb_interface_descriptor_t *id;
+	struct usb2_descriptor *desc = NULL;
+	const struct usb2_audio_streaming_interface_descriptor *asid = NULL;
+	const struct usb2_audio_streaming_type1_descriptor *asf1d = NULL;
+	const struct usb2_audio_streaming_endpoint_descriptor *sed = NULL;
+	const usb2_endpoint_descriptor_audio_t *ed1 = NULL;
+	const usb2_endpoint_descriptor_audio_t *ed2 = NULL;
+	struct usb2_config_descriptor *cd = usb2_get_config_descriptor(udev);
+	struct usb2_interface_descriptor *id;
 	const struct uaudio_format *p_fmt;
 	struct uaudio_chan *chan;
 	uint16_t curidx = 0xFFFF;
@@ -913,7 +842,7 @@
 	uint8_t audio_if = 0;
 	uint8_t sample_size;
 
-	while ((desc = usbd_desc_foreach(cd, desc))) {
+	while ((desc = usb2_desc_foreach(cd, desc))) {
 
 		if ((desc->bDescriptorType == UDESC_INTERFACE) &&
 		    (desc->bLength >= sizeof(*id))) {
@@ -945,7 +874,7 @@
 				 */
 
 				if ((sc->sc_midi_chan.valid == 0) &&
-				    usbd_get_iface(udev, curidx)) {
+				    usb2_get_iface(udev, curidx)) {
 					sc->sc_midi_chan.iface_index = curidx;
 					sc->sc_midi_chan.iface_alt_index = alt_index;
 					sc->sc_midi_chan.valid = 1;
@@ -1028,7 +957,7 @@
 			ep_type = UE_GET_ISO_TYPE(ed1->bmAttributes);
 			ep_sync = 0;
 
-			if ((sc->sc_quirks & UQ_AU_INP_ASYNC) &&
+			if ((sc->sc_uq_au_inp_async) &&
 			    (ep_dir == UE_DIR_IN) && (ep_type == UE_ISO_ADAPT)) {
 				ep_type = UE_ISO_ASYNC;
 			}
@@ -1105,7 +1034,7 @@
 				    &(sc->sc_rec_chan) :
 				    &(sc->sc_play_chan);
 
-				if ((chan->valid == 0) && usbd_get_iface(udev, curidx)) {
+				if ((chan->valid == 0) && usb2_get_iface(udev, curidx)) {
 
 					chan->valid = 1;
 #ifdef USB_DEBUG
@@ -1133,7 +1062,7 @@
 					chan->iface_index = curidx;
 					chan->iface_alt_index = alt_index;
 
-					chan->usb_cfg =
+					chan->usb2_cfg =
 					    (ep_dir == UE_DIR_IN) ?
 					    ((fps == 1000) ?
 					    uaudio_cfg_record_full_speed :
@@ -1167,11 +1096,11 @@
 }
 
 static void
-uaudio_chan_fill_info(struct uaudio_softc *sc, struct usbd_device *udev)
+uaudio_chan_fill_info(struct uaudio_softc *sc, struct usb2_device *udev)
 {
 	uint32_t rate = uaudio_default_rate;
 	uint32_t z;
-	uint16_t fps = (usbd_get_speed(udev) == USB_SPEED_HIGH) ? 8000 : 1000;
+	uint16_t fps = (usb2_get_speed(udev) == USB_SPEED_HIGH) ? 8000 : 1000;
 	uint8_t bits = uaudio_default_bits;
 	uint8_t y;
 	uint8_t channels = uaudio_default_channels;
@@ -1206,7 +1135,7 @@
 }
 
 static void
-uaudio_chan_play_callback(struct usbd_xfer *xfer)
+uaudio_chan_play_callback(struct usb2_xfer *xfer)
 {
 	struct uaudio_chan *ch = xfer->priv_sc;
 	uint32_t *p_len = xfer->frlengths;
@@ -1214,8 +1143,8 @@
 	uint32_t total = (ch->bytes_per_frame * xfer->nframes);
 	uint32_t offset;
 
-	switch (USBD_GET_STATE(xfer)) {
-	case USBD_ST_TRANSFERRED:
+	switch (USB_GET_STATE(xfer)) {
+	case USB_ST_TRANSFERRED:
 tr_transferred:
 		if (xfer->actlen < xfer->sumlen) {
 			DPRINTF(0, "short transfer, "
@@ -1223,7 +1152,7 @@
 		}
 		chn_intr(ch->pcm_ch);
 
-	case USBD_ST_SETUP:
+	case USB_ST_SETUP:
 		if (ch->bytes_per_frame > xfer->max_frame_size) {
 			DPRINTF(0, "bytes per transfer, %d, "
 			    "exceeds maximum, %d!\n",
@@ -1249,7 +1178,7 @@
 			if (n > total) {
 				n = total;
 			}
-			usbd_copy_in(xfer->frbuffers, offset, ch->cur, n);
+			usb2_copy_in(xfer->frbuffers, offset, ch->cur, n);
 
 			total -= n;
 			ch->cur += n;
@@ -1260,11 +1189,11 @@
 			}
 		}
 
-		usbd_start_hardware(xfer);
+		usb2_start_hardware(xfer);
 		return;
 
 	default:			/* Error */
-		if (xfer->error == USBD_ERR_CANCELLED) {
+		if (xfer->error == USB_ERR_CANCELLED) {
 			return;
 		}
 		goto tr_transferred;
@@ -1272,7 +1201,7 @@
 }
 
 static void
-uaudio_chan_record_callback(struct usbd_xfer *xfer)
+uaudio_chan_record_callback(struct usb2_xfer *xfer)
 {
 	struct uaudio_chan *ch = xfer->priv_sc;
 	uint32_t *p_len = xfer->frlengths;
@@ -1282,8 +1211,8 @@
 	uint32_t offset0;
 	uint32_t offset1;
 
-	switch (USBD_GET_STATE(xfer)) {
-	case USBD_ST_TRANSFERRED:
+	switch (USB_GET_STATE(xfer)) {
+	case USB_ST_TRANSFERRED:
 tr_transferred:
 		if (xfer->actlen < total) {
 			DPRINTF(0, "short transfer, "
@@ -1305,7 +1234,7 @@
 				if (m > p_len[n]) {
 					m = p_len[n];
 				}
-				usbd_copy_out(xfer->frbuffers, offset1, ch->cur, m);
+				usb2_copy_out(xfer->frbuffers, offset1, ch->cur, m);
 
 				p_len[n] -= m;
 				offset1 += m;
@@ -1321,7 +1250,7 @@
 
 		chn_intr(ch->pcm_ch);
 
-	case USBD_ST_SETUP:
+	case USB_ST_SETUP:
 		if (ch->bytes_per_frame > xfer->max_frame_size) {
 			DPRINTF(0, "bytes per transfer, %d, "
 			    "exceeds maximum, %d!\n",
@@ -1337,11 +1266,11 @@
 			DPRINTF(0, "no buffer!\n");
 			return;
 		}
-		usbd_start_hardware(xfer);
+		usb2_start_hardware(xfer);
 		return;
 
 	default:			/* Error */
-		if (xfer->error == USBD_ERR_CANCELLED) {
+		if (xfer->error == USB_ERR_CANCELLED) {
 			return;
 		}
 		goto tr_transferred;
@@ -1357,7 +1286,7 @@
 	uint8_t endpoint;
 	uint8_t iface_index;
 	uint8_t alt_index;
-	usbd_status_t err;
+	usb2_error_t err;
 
 	ch->buf = malloc(sc->sc_buffer_size, M_DEVBUF, M_WAITOK | M_ZERO);
 
@@ -1405,13 +1334,13 @@
 	DPRINTF(0, "endpoint=0x%02x, speed=%d, iface=%d alt=%d\n",
 	    endpoint, ch->sample_rate, iface_index, alt_index);
 
-	err = usbd_set_alt_interface_index(sc->sc_udev, iface_index, alt_index);
+	err = usb2_set_alt_interface_index(sc->sc_udev, iface_index, alt_index);
 	if (err) {
 		DPRINTF(0, "setting of alternate index failed: %s!\n",
-		    usbd_errstr(err));
+		    usb2_errstr(err));
 		goto error;
 	}
-	USBD_SET_IFACE_NO_PROBE(sc->sc_udev, iface_index);
+	usb2_set_parent_iface(sc->sc_udev, iface_index, sc->sc_mixer_iface_index);
 
 	/*
 	 * If just one sampling rate is supported,
@@ -1427,8 +1356,8 @@
 			DPRINTF(0, "setting of sample rate failed! (continuing anyway)\n");
 		}
 	}
-	if (usbd_transfer_setup(sc->sc_udev, &iface_index, ch->xfer,
-	    ch->usb_cfg, UAUDIO_NCHANBUFS, ch, ch->pcm_mtx)) {
+	if (usb2_transfer_setup(sc->sc_udev, &iface_index, ch->xfer,
+	    ch->usb2_cfg, UAUDIO_NCHANBUFS, ch, ch->pcm_mtx)) {
 		DPRINTF(0, "could not allocate USB transfers!\n");
 		goto error;
 	}
@@ -1446,7 +1375,7 @@
 		free(ch->buf, M_DEVBUF);
 		ch->buf = NULL;
 	}
-	usbd_transfer_unsetup(ch->xfer, UAUDIO_NCHANBUFS);
+	usb2_transfer_unsetup(ch->xfer, UAUDIO_NCHANBUFS);
 
 	ch->valid = 0;
 
@@ -1533,10 +1462,10 @@
 #error "please update code"
 #endif
 	if (ch->xfer[0]) {
-		usbd_transfer_start(ch->xfer[0]);
+		usb2_transfer_start(ch->xfer[0]);
 	}
 	if (ch->xfer[1]) {
-		usbd_transfer_start(ch->xfer[1]);
+		usb2_transfer_start(ch->xfer[1]);
 	}
 	return (0);
 }
@@ -1547,8 +1476,8 @@
 #if (UAUDIO_NCHANBUFS != 2)
 #error "please update code"
 #endif
-	usbd_transfer_stop(ch->xfer[0]);
-	usbd_transfer_stop(ch->xfer[1]);
+	usb2_transfer_stop(ch->xfer[0]);
+	usb2_transfer_stop(ch->xfer[1]);
 	return (0);
 }
 
@@ -1639,7 +1568,7 @@
     const struct uaudio_terminal_node *iot, int id)
 {
 #ifdef USB_DEBUG
-	const struct usb_audio_input_terminal *d = iot[id].u.it;
+	const struct usb2_audio_input_terminal *d = iot[id].u.it;
 
 	DPRINTF(2, "bTerminalId=%d wTerminalType=0x%04x "
 	    "bAssocTerminal=%d bNrChannels=%d wChannelConfig=%d "
@@ -1656,7 +1585,7 @@
     const struct uaudio_terminal_node *iot, int id)
 {
 #ifdef USB_DEBUG
-	const struct usb_audio_output_terminal *d = iot[id].u.ot;
+	const struct usb2_audio_output_terminal *d = iot[id].u.ot;
 
 	DPRINTF(2, "bTerminalId=%d wTerminalType=0x%04x "
 	    "bAssocTerminal=%d bSourceId=%d iTerminal=%d\n",
@@ -1672,8 +1601,8 @@
 {
 	struct uaudio_mixer_node mix;
 
-	const struct usb_audio_mixer_unit_0 *d0 = iot[id].u.mu;
-	const struct usb_audio_mixer_unit_1 *d1;
+	const struct usb2_audio_mixer_unit_0 *d0 = iot[id].u.mu;
+	const struct usb2_audio_mixer_unit_1 *d1;
 
 	uint32_t bno;			/* bit number */
 	uint32_t p;			/* bit number accumulator */
@@ -1756,7 +1685,7 @@
 uaudio_mixer_add_selector(struct uaudio_softc *sc,
     const struct uaudio_terminal_node *iot, int id)
 {
-	const struct usb_audio_selector_unit *d = iot[id].u.su;
+	const struct usb2_audio_selector_unit *d = iot[id].u.su;
 	struct uaudio_mixer_node mix;
 	struct uaudio_mixer_node dummy;
 	uint16_t i;
@@ -1797,7 +1726,7 @@
 }
 
 static uint32_t
-uaudio_mixer_feature_get_bmaControls(const struct usb_audio_feature_unit *d,
+uaudio_mixer_feature_get_bmaControls(const struct usb2_audio_feature_unit *d,
     uint8_t index)
 {
 	uint32_t temp = 0;
@@ -1822,7 +1751,7 @@
 uaudio_mixer_add_feature(struct uaudio_softc *sc,
     const struct uaudio_terminal_node *iot, int id)
 {
-	const struct usb_audio_feature_unit *d = iot[id].u.fu;
+	const struct usb2_audio_feature_unit *d = iot[id].u.fu;
 	struct uaudio_mixer_node mix;
 	uint32_t fumask;
 	uint32_t mmask;
@@ -1949,10 +1878,10 @@
 uaudio_mixer_add_processing_updown(struct uaudio_softc *sc,
     const struct uaudio_terminal_node *iot, int id)
 {
-	const struct usb_audio_processing_unit_0 *d0 = iot[id].u.pu;
-	const struct usb_audio_processing_unit_1 *d1 =
+	const struct usb2_audio_processing_unit_0 *d0 = iot[id].u.pu;
+	const struct usb2_audio_processing_unit_1 *d1 =
 	(const void *)(d0->baSourceId + d0->bNrInPins);
-	const struct usb_audio_processing_unit_updown *ud =
+	const struct usb2_audio_processing_unit_updown *ud =
 	(const void *)(d1->bmControls + d1->bControlSize);
 	struct uaudio_mixer_node mix;
 	uint8_t i;
@@ -1992,8 +1921,8 @@
 uaudio_mixer_add_processing(struct uaudio_softc *sc,
     const struct uaudio_terminal_node *iot, int id)
 {
-	const struct usb_audio_processing_unit_0 *d0 = iot[id].u.pu;
-	const struct usb_audio_processing_unit_1 *d1 =
+	const struct usb2_audio_processing_unit_0 *d0 = iot[id].u.pu;
+	const struct usb2_audio_processing_unit_1 *d1 =
 	(const void *)(d0->baSourceId + d0->bNrInPins);
 	struct uaudio_mixer_node mix;
 	uint16_t ptype;
@@ -2038,15 +1967,15 @@
 uaudio_mixer_add_extension(struct uaudio_softc *sc,
     const struct uaudio_terminal_node *iot, int id)
 {
-	const struct usb_audio_extension_unit_0 *d0 = iot[id].u.eu;
-	const struct usb_audio_extension_unit_1 *d1 =
+	const struct usb2_audio_extension_unit_0 *d0 = iot[id].u.eu;
+	const struct usb2_audio_extension_unit_1 *d1 =
 	(const void *)(d0->baSourceId + d0->bNrInPins);
 	struct uaudio_mixer_node mix;
 
 	DPRINTF(2, "bUnitId=%d bNrInPins=%d\n",
 	    d0->bUnitId, d0->bNrInPins);
 
-	if (sc->sc_quirks & UQ_AU_NO_XU) {
+	if (sc->sc_uq_au_no_xu) {
 		return;
 	}
 	if (d1->bControlSize == 0) {
@@ -2070,19 +1999,19 @@
 static const void *
 uaudio_mixer_verify_desc(const void *arg, uint32_t len)
 {
-	const struct usb_audio_mixer_unit_1 *d1;
-	const struct usb_audio_extension_unit_1 *e1;
-	const struct usb_audio_processing_unit_1 *u1;
+	const struct usb2_audio_mixer_unit_1 *d1;
+	const struct usb2_audio_extension_unit_1 *e1;
+	const struct usb2_audio_processing_unit_1 *u1;
 
 	union {
-		const usb_descriptor_t *desc;
-		const struct usb_audio_input_terminal *it;
-		const struct usb_audio_output_terminal *ot;
-		const struct usb_audio_mixer_unit_0 *mu;
-		const struct usb_audio_selector_unit *su;
-		const struct usb_audio_feature_unit *fu;
-		const struct usb_audio_processing_unit_0 *pu;
-		const struct usb_audio_extension_unit_0 *eu;
+		const struct usb2_descriptor *desc;
+		const struct usb2_audio_input_terminal *it;
+		const struct usb2_audio_output_terminal *ot;
+		const struct usb2_audio_mixer_unit_0 *mu;
+		const struct usb2_audio_selector_unit *su;
+		const struct usb2_audio_feature_unit *fu;
+		const struct usb2_audio_processing_unit_0 *pu;
+		const struct usb2_audio_extension_unit_0 *eu;
 	}     u;
 
 	u.desc = arg;
@@ -2206,7 +2135,7 @@
 	};
 	uint16_t cc;
 	uint8_t i;
-	const struct usb_audio_cluster cl = uaudio_mixer_get_cluster(id, iot);
+	const struct usb2_audio_cluster cl = uaudio_mixer_get_cluster(id, iot);

>>> TRUNCATED FOR MAIL (1000 lines) <<<


More information about the p4-projects mailing list