Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 25 Dec 2007 10:43:08 GMT
From:      Hans Petter Selasky <hselasky@FreeBSD.org>
To:        Perforce Change Reviews <perforce@FreeBSD.org>
Subject:   PERFORCE change 131577 for review
Message-ID:  <200712251043.lBPAh8Du004477@repoman.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=131577

Change 131577 by hselasky@hselasky_laptop001 on 2007/12/25 10:42:44

	
	Some manual edits that were not covered by change 131575 .

Affected files ...

.. //depot/projects/usb/src/sys/dev/usb/usb_subr.h#86 edit
.. //depot/projects/usb/src/sys/dev/usb/usb_transfer.c#86 edit

Differences ...

==== //depot/projects/usb/src/sys/dev/usb/usb_subr.h#86 (text+ko) ====

@@ -271,6 +271,7 @@
 	struct usbd_device *udev;
 	struct usbd_xfer *curr_xfer;
 	const struct usbd_config *curr_setup;
+	const struct usbd_config_sub *curr_setup_sub;
 	const struct usbd_pipe_methods *methods;
 	void   *buf;
 	uint32_t *xfer_length_ptr;

==== //depot/projects/usb/src/sys/dev/usb/usb_transfer.c#86 (text+ko) ====

@@ -372,6 +372,7 @@
 	};
 	struct usbd_xfer *xfer = parm->curr_xfer;
 	const struct usbd_config *setup = parm->curr_setup;
+	const struct usbd_config_sub *setup_sub = parm->curr_setup_sub;
 	usb_endpoint_descriptor_t *edesc;
 	struct usbd_std_packet_size std_size;
 	uint32_t n_frlengths;
@@ -392,10 +393,10 @@
 
 	type = (edesc->bmAttributes & UE_XFERTYPE);
 
-	xfer->flags = setup->flags;
+	xfer->flags = setup_sub->flags;
 	xfer->nframes = setup->frames;
-	xfer->timeout = setup->timeout;
-	xfer->callback = setup->cb[parm->udev->flags.usb_mode];
+	xfer->timeout = setup_sub->timeout;
+	xfer->callback = setup_sub->callback;
 	xfer->interval = setup->interval;
 	xfer->endpoint = edesc->bEndpointAddress;
 	xfer->max_packet_size = UGETW(edesc->wMaxPacketSize);
@@ -789,14 +790,15 @@
 		PRINTFN(5, ("using global lock\n"));
 		priv_mtx = &usb_global_lock;
 	}
+	/* sanity checks */
 	for (setup = setup_start, n = 0;
 	    setup != setup_end; setup++, n++) {
 		if (setup->bufsize == 0xffffffff) {
 			parm.err = USBD_BAD_BUFSIZE;
 			PRINTF(("invalid bufsize\n"));
 		}
-		if ((setup->cb[USB_MODE_HOST] == NULL) &&
-		    (setup->cb[USB_MODE_DEVICE] == NULL)) {
+		if ((setup->mh.callback == NULL) &&
+		    (setup->md.callback == NULL)) {
 			parm.err = USBD_NO_CALLBACK;
 			PRINTF(("no callback\n"));
 		}
@@ -860,7 +862,14 @@
 		for (setup = setup_start, n = 0;
 		    setup != setup_end; setup++, n++) {
 
-			if (setup->cb[udev->flags.usb_mode] == NULL) {
+			/* select mode specific structure */
+			if (udev->flags.usb_mode == USB_MODE_HOST) {
+				parm.curr_setup_sub = &(setup->mh);
+			} else {
+				parm.curr_setup_sub = &(setup->md);
+			}
+
+			if (parm.curr_setup_sub->callback == NULL) {
 				/*
 				 * Skip USB transfers without
 				 * callbacks !
@@ -872,7 +881,7 @@
 			    ifaces[setup->if_index], setup);
 
 			if (!pipe) {
-				if (setup->flags.no_pipe_ok) {
+				if (parm.curr_setup_sub->flags.no_pipe_ok) {
 					continue;
 				}
 				parm.err = USBD_NO_PIPE;
@@ -3358,6 +3367,7 @@
 		.bufsize = 1024,	/* bytes */
 		.mh.flags = {.proxy_buffer = 1,.short_xfer_ok = 1,},
 		.mh.callback = &usbd_do_request_callback,
+		.md.flags = {.proxy_buffer = 1,.short_xfer_ok = 1,},
 		.md.callback = &usbd_handle_request_callback,
 	},
 };
@@ -3764,11 +3774,11 @@
  *	.type = UE_CONTROL,
  *	.endpoint = 0,
  *	.direction = UE_DIR_ANY,
- *	.timeout = 1000, //1.000 seconds
  *	.interval = 50, //50 milliseconds
- *	.flags = { },
  *	.bufsize = sizeof(usb_device_request_t),
- *	.cb[USB_MODE_HOST] = &my_clear_stall_callback,
+ *	.mh.timeout = 1000, //1.000 seconds
+ *	.mh.flags = { },
+ *	.mh.callback = &my_clear_stall_callback,
  * };
  */
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200712251043.lBPAh8Du004477>