PERFORCE change 131577 for review
Hans Petter Selasky
hselasky at FreeBSD.org
Tue Dec 25 02:43:09 PST 2007
http://perforce.freebsd.org/chv.cgi?CH=131577
Change 131577 by hselasky at 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,
* };
*/
More information about the p4-projects
mailing list