PERFORCE change 146633 for review
Hans Petter Selasky
hselasky at FreeBSD.org
Mon Aug 4 15:49:38 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=146633
Change 146633 by hselasky at hselasky_laptop001 on 2008/08/04 15:49:33
Various changes to support more compilers and
to allow easier porting of the code to other
platforms.
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb2/controller/musb2_otg.c#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/controller/ohci2.c#6 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_compat_linux.h#4 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_config_td.c#5 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_core.h#13 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_dev.c#19 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_device.c#16 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_device.h#6 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_handle_request.c#5 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_hid.c#4 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_hid.h#5 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_hub.c#13 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_process.h#2 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_request.c#11 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_transfer.c#15 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_util.c#3 edit
.. //depot/projects/usb/src/sys/dev/usb2/core/usb2_util.h#3 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb2/controller/musb2_otg.c#2 (text+ko) ====
@@ -1305,7 +1305,7 @@
static void
musbotg_device_done(struct usb2_xfer *xfer, usb2_error_t error)
{
- mtx_assert(&sc->sc_bus.mtx, MA_OWNED);
+ mtx_assert(xfer->usb2_mtx, MA_OWNED);
DPRINTFN(2, "xfer=%p, pipe=%p, error=%d\n",
xfer, xfer->pipe, error);
==== //depot/projects/usb/src/sys/dev/usb2/controller/ohci2.c#6 (text+ko) ====
@@ -629,7 +629,7 @@
le32toh(sitd->itd_be));
for (i = 0; i < OHCI_ITD_NOFFSET; i++) {
printf("offs[%d]=0x%04x ", i,
- (u_int)le16toh(sitd->itd_offset[i]));
+ (uint32_t)le16toh(sitd->itd_offset[i]));
}
printf("\n");
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_compat_linux.h#4 (text+ko) ====
@@ -429,7 +429,7 @@
uint8_t transfer_dma; /* (in) not used on FreeBSD */
uint8_t bsd_isread;
- struct usb_iso_packet_descriptor iso_frame_desc[0]; /* (in) ISO ONLY */
+ struct usb_iso_packet_descriptor iso_frame_desc[]; /* (in) ISO ONLY */
};
/* various prototypes */
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_config_td.c#5 (text+ko) ====
@@ -261,15 +261,19 @@
}
if (timeout == 0) {
/*
- * zero means no timeout, so avoid that by setting
+ * Zero means no timeout, so avoid that by setting
* timeout to one:
*/
timeout = 1;
}
- if (mtx_sleep(ctd, ctd->usb2_proc.up_mtx, 0,
- "DELAY", timeout)) {
+ mtx_unlock(ctd->usb2_proc.up_mtx);
+
+ if (pause("USBWAIT", timeout)) {
/* ignore */
}
+ mtx_lock(ctd->usb2_proc.up_mtx);
+
+ is_gone = usb2_config_td_is_gone(ctd);
done:
return (is_gone);
}
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_core.h#13 (text+ko) ====
@@ -31,6 +31,18 @@
#ifndef _USB2_CORE_H_
#define _USB2_CORE_H_
+/* Default USB configuration */
+
+#ifndef USB_NO_POLL
+#define USB_NO_POLL 0
+#endif
+
+#ifndef USB_USE_CONDVAR
+#define USB_USE_CONDVAR 0
+#endif
+
+/* Include files */
+
#include <sys/stdint.h>
#include <sys/stddef.h>
#include <sys/param.h>
@@ -55,9 +67,7 @@
#include <dev/usb2/include/usb2_revision.h>
#include "usb2_if.h"
-
#include "opt_usb.h"
-
#include "opt_bus.h"
#define USB_STACK_VERSION 2000 /* 2.0 */
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_dev.c#19 (text+ko) ====
@@ -1552,7 +1552,7 @@
tr_data = 1;
}
- io_len = min(m->cur_data_len, uio->uio_resid);
+ io_len = MIN(m->cur_data_len, uio->uio_resid);
DPRINTFN(2, "transfer %d bytes from %p\n",
io_len, m->cur_data_ptr);
@@ -1684,7 +1684,7 @@
USB_MBUF_RESET(m);
- io_len = min(m->cur_data_len, uio->uio_resid);
+ io_len = MIN(m->cur_data_len, uio->uio_resid);
m->cur_data_len = io_len;
@@ -2103,7 +2103,7 @@
if (m) {
USB_MBUF_RESET(m);
- io_len = min(len, m->cur_data_len);
+ io_len = MIN(len, m->cur_data_len);
usb2_copy_out(pc, offset, m->cur_data_ptr, io_len);
@@ -2142,7 +2142,7 @@
if (m) {
USB_MBUF_RESET(m);
- io_len = min(len, m->cur_data_len);
+ io_len = MIN(len, m->cur_data_len);
bcopy(ptr, m->cur_data_ptr, io_len);
@@ -2205,7 +2205,7 @@
tr_data = 1;
- io_len = min(len, m->cur_data_len);
+ io_len = MIN(len, m->cur_data_len);
usb2_copy_in(pc, offset, m->cur_data_ptr, io_len);
@@ -2263,7 +2263,7 @@
tr_data = 1;
- io_len = min(len, m->cur_data_len);
+ io_len = MIN(len, m->cur_data_len);
bcopy(m->cur_data_ptr, ptr, io_len);
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_device.c#16 (text+ko) ====
@@ -96,7 +96,7 @@
usb2_get_pipe_by_addr(struct usb2_device *udev, uint8_t ea_val)
{
struct usb2_pipe *pipe = udev->pipes;
- struct usb2_pipe *pipe_end = udev->pipes_end;
+ struct usb2_pipe *pipe_end = udev->pipes + USB_EP_MAX;
enum {
EA_MASK = (UE_DIR_IN | UE_DIR_OUT | UE_ADDR),
};
@@ -151,7 +151,7 @@
const struct usb2_config *setup)
{
struct usb2_pipe *pipe = udev->pipes;
- struct usb2_pipe *pipe_end = udev->pipes_end;
+ struct usb2_pipe *pipe_end = udev->pipes + USB_EP_MAX;
uint8_t index = setup->ep_index;
uint8_t ea_mask;
uint8_t ea_val;
@@ -311,7 +311,7 @@
uint8_t iface_index, uint8_t iface_mask)
{
struct usb2_pipe *pipe = udev->pipes;
- struct usb2_pipe *pipe_end = udev->pipes_end;
+ struct usb2_pipe *pipe_end = udev->pipes + USB_EP_MAX;
while (pipe != pipe_end) {
if ((pipe->iface_index & iface_mask) == iface_index) {
@@ -337,7 +337,7 @@
{
struct usb2_interface *iface = usb2_get_iface(udev, iface_index);
struct usb2_pipe *pipe = udev->pipes;
- struct usb2_pipe *pipe_end = udev->pipes_end;
+ struct usb2_pipe *pipe_end = udev->pipes + USB_EP_MAX;
struct usb2_interface_descriptor *id;
struct usb2_endpoint_descriptor *ed = NULL;
struct usb2_descriptor *desc;
@@ -446,7 +446,7 @@
usb2_free_iface_data(struct usb2_device *udev)
{
struct usb2_interface *iface = udev->ifaces;
- struct usb2_interface *iface_end = udev->ifaces_end;
+ struct usb2_interface *iface_end = udev->ifaces + USB_IFACE_MAX;
uint8_t n;
/* mtx_assert() */
@@ -786,7 +786,7 @@
usb2_error_t err;
pipe = udev->pipes;
- pipe_end = udev->pipes_end;
+ pipe_end = udev->pipes + USB_EP_MAX;
for (; pipe != pipe_end; pipe++) {
@@ -1491,7 +1491,7 @@
udev->ddesc.iSerialNumber) {
/* read out the language ID string */
err = usb2_req_get_string_desc(udev, &Giant,
- scratch_ptr, 4, scratch_size,
+ (char *)scratch_ptr, 4, scratch_size,
USB_LANGUAGE_TABLE);
} else {
err = USB_ERR_INVAL;
@@ -1509,24 +1509,24 @@
/* get serial number string */
err = usb2_req_get_string_any
- (udev, &Giant, scratch_ptr,
+ (udev, &Giant, (char *)scratch_ptr,
scratch_size, udev->ddesc.iSerialNumber);
- strlcpy(udev->serial, scratch_ptr, sizeof(udev->serial));
+ strlcpy(udev->serial, (char *)scratch_ptr, sizeof(udev->serial));
/* get manufacturer string */
err = usb2_req_get_string_any
- (udev, &Giant, scratch_ptr,
+ (udev, &Giant, (char *)scratch_ptr,
scratch_size, udev->ddesc.iManufacturer);
- strlcpy(udev->manufacturer, scratch_ptr, sizeof(udev->manufacturer));
+ strlcpy(udev->manufacturer, (char *)scratch_ptr, sizeof(udev->manufacturer));
/* get product string */
err = usb2_req_get_string_any
- (udev, &Giant, scratch_ptr,
+ (udev, &Giant, (char *)scratch_ptr,
scratch_size, udev->ddesc.iProduct);
- strlcpy(udev->product, scratch_ptr, sizeof(udev->product));
+ strlcpy(udev->product, (char *)scratch_ptr, sizeof(udev->product));
/* finish up all the strings */
usb2_check_strings(udev);
@@ -1608,14 +1608,14 @@
parent_hub->hub->ports + port_index : NULL, udev, device_index);
/* make a symlink for UGEN */
- if (snprintf(scratch_ptr, scratch_size,
+ if (snprintf((char *)scratch_ptr, scratch_size,
USB_DEVICE_NAME "%u.%u.0.0",
device_get_unit(udev->bus->bdev),
udev->device_index)) {
/* ignore */
}
udev->ugen_symlink =
- usb2_alloc_symlink(scratch_ptr, "ugen%u.%u",
+ usb2_alloc_symlink((char *)scratch_ptr, "ugen%u.%u",
device_get_unit(udev->bus->bdev),
udev->device_index);
@@ -1720,7 +1720,7 @@
struct usb2_interface *iface = udev->ifaces + iface_index;
if ((iface < udev->ifaces) ||
- (iface >= udev->ifaces_end) ||
+ (iface_index >= USB_IFACE_MAX) ||
(udev->cdesc == NULL) ||
(iface_index >= udev->cdesc->bNumInterface)) {
return (NULL);
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_device.h#6 (text+ko) ====
@@ -92,13 +92,9 @@
struct sx default_sx[2];
struct mtx default_mtx[1];
struct cv default_cv[2];
-
struct usb2_interface ifaces[USB_IFACE_MAX];
- struct usb2_interface ifaces_end[0];
-
struct usb2_pipe default_pipe; /* Control Endpoint 0 */
struct usb2_pipe pipes[USB_EP_MAX];
- struct usb2_pipe pipes_end[0];
struct usb2_bus *bus; /* our USB BUS */
device_t parent_dev; /* parent device */
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_handle_request.c#5 (text+ko) ====
@@ -207,6 +207,9 @@
(error != ENOTTY) &&
(iface->subdev != NULL) &&
device_is_attached(iface->subdev)) {
+#if 0
+ DEVMETHOD(usb2_handle_request, NULL); /* dummy */
+#endif
error = USB2_HANDLE_REQUEST(iface->subdev,
&req, ppdata, plen,
off, (state == ST_POST_STATUS));
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_hid.c#4 (text+ko) ====
@@ -60,9 +60,9 @@
#define MAXUSAGE 100
struct hid_data {
- const u_char *start;
- const u_char *end;
- const u_char *p;
+ const uint8_t *start;
+ const uint8_t *end;
+ const uint8_t *p;
struct hid_item cur;
int32_t usages[MAXUSAGE];
int nu;
@@ -101,7 +101,7 @@
s = malloc(sizeof *s, M_TEMP, M_WAITOK | M_ZERO);
s->start = s->p = d;
- s->end = ((const char *)d) + len;
+ s->end = ((const uint8_t *)d) + len;
s->kindset = kindset;
return (s);
}
@@ -131,16 +131,16 @@
struct hid_item *c = &s->cur;
unsigned int bTag, bType, bSize;
uint32_t oldpos;
- const u_char *data;
+ const uint8_t *data;
int32_t dval;
- const u_char *p;
+ const uint8_t *p;
struct hid_item *hi;
int i;
top:
if (s->multimax != 0) {
if (s->multi < s->multimax) {
- c->usage = s->usages[min(s->multi, s->nu - 1)];
+ c->usage = s->usages[MIN(s->multi, s->nu - 1)];
s->multi++;
*h = *c;
c->loc.pos += c->loc.size;
@@ -435,11 +435,11 @@
/*------------------------------------------------------------------------*
* hid_get_data
*------------------------------------------------------------------------*/
-u_long
-hid_get_data(const u_char *buf, uint32_t len, struct hid_location *loc)
+uint32_t
+hid_get_data(const uint8_t *buf, uint32_t len, struct hid_location *loc)
{
- u_int hpos = loc->pos;
- u_int hsize = loc->size;
+ uint32_t hpos = loc->pos;
+ uint32_t hsize = loc->size;
uint32_t data;
int i, s, t;
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_hid.h#5 (text+ko) ====
@@ -80,7 +80,7 @@
int hid_get_item(struct hid_data *s, struct hid_item *h);
int hid_report_size(const void *buf, int len, enum hid_kind k, uint8_t *id);
int hid_locate(const void *desc, int size, uint32_t usage, enum hid_kind kind, struct hid_location *loc, uint32_t *flags);
-u_long hid_get_data(const u_char *buf, uint32_t len, struct hid_location *loc);
+uint32_t hid_get_data(const uint8_t *buf, uint32_t len, struct hid_location *loc);
int hid_is_collection(const void *desc, int size, uint32_t usage);
struct usb2_hid_descriptor *hid_get_descriptor_from_usb(struct usb2_config_descriptor *cd, struct usb2_interface_descriptor *id);
usb2_error_t usb2_req_get_hid_desc(struct usb2_device *udev, struct mtx *mtx, void **descp, uint16_t *sizep, usb2_malloc_type mem, uint8_t iface_index);
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_hub.c#13 (text+ko) ====
@@ -72,7 +72,7 @@
struct usb2_xfer *sc_xfer[2]; /* interrupt xfer */
uint8_t sc_flags;
#define UHUB_FLAG_INTR_STALL 0x02
- uint8_t sc_name[32];
+ char sc_name[32];
};
#define UHUB_PROTO(sc) ((sc)->sc_udev->ddesc.bDeviceProtocol)
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_process.h#2 (text+ko) ====
@@ -1,4 +1,4 @@
-/*
+/*-
* Copyright (c) 2008 Hans Petter Selasky. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_request.c#11 (text+ko) ====
@@ -102,7 +102,7 @@
/* round robin pipe clear stall */
pipe = xfer->udev->pipe_curr;
- pipe_end = xfer->udev->pipes_end;
+ pipe_end = xfer->udev->pipes + USB_EP_MAX;
pipe_first = xfer->udev->pipes;
if (pipe == NULL) {
pipe = pipe_first;
@@ -665,7 +665,7 @@
if (err) {
return (err);
}
- temp = buf;
+ temp = (uint8_t *)buf;
if (temp[0] < 2) {
/* string length is too short */
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_transfer.c#15 (text+ko) ====
@@ -72,14 +72,14 @@
},
[UE_BULK] = {
- [USB_SPEED_LOW] = {}, /* invalid (all zero) */
+ [USB_SPEED_LOW] = {.fixed = {0, 0, 0, 0}}, /* invalid */
[USB_SPEED_FULL] = {.fixed = {8, 16, 32, 64}},
[USB_SPEED_HIGH] = {.fixed = {512, 512, 512, 512}},
[USB_SPEED_VARIABLE] = {.fixed = {512, 512, 1024, 1536}},
},
[UE_ISOCHRONOUS] = {
- [USB_SPEED_LOW] = {}, /* invalid (all zero) */
+ [USB_SPEED_LOW] = {.fixed = {0, 0, 0, 0}}, /* invalid */
[USB_SPEED_FULL] = {.range = {0, 1023}},
[USB_SPEED_HIGH] = {.range = {0, 1024}},
[USB_SPEED_VARIABLE] = {.range = {0, 3584}},
@@ -2585,6 +2585,8 @@
return (1); /* Clear Stall Finished */
}
+#if (USB_NO_POLL == 0)
+
/*------------------------------------------------------------------------*
* usb2_callout_poll
*------------------------------------------------------------------------*/
@@ -2693,3 +2695,14 @@
}
return;
}
+
+#else
+
+void
+usb2_do_poll(struct usb2_xfer **ppxfer, uint16_t max)
+{
+ /* polling not supported */
+ return;
+}
+
+#endif
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_util.c#3 (text+ko) ====
@@ -39,8 +39,11 @@
#include <dev/usb2/controller/usb2_bus.h>
/* function prototypes */
+#if (USB_USE_CONDVAR == 0)
static int usb2_msleep(void *chan, struct mtx *mtx, int priority, const char *wmesg, int timo);
+#endif
+
/*------------------------------------------------------------------------*
* device_delete_all_children - delete all children of a device
*------------------------------------------------------------------------*/
@@ -99,7 +102,7 @@
err = 0;
}
- temp_p = udev->bus->scratch[0].data;
+ temp_p = (char *)udev->bus->scratch[0].data;
if (!err) {
/* try to get the interface string ! */
@@ -136,12 +139,18 @@
} else {
ms = USB_MS_TO_TICKS(ms);
- ms++; /* be sure that we don't return too
- * early */
+ /*
+ * Add one to the number of ticks so that we don't return
+ * too early!
+ */
+ ms++;
+
+ mtx_unlock(mtx);
- if (mtx_sleep(&ms, mtx, 0, "pause_mtx", ms)) {
- /* should not happen */
+ if (pause("USBWAIT", ms)) {
+ /* ignore */
}
+ mtx_lock(mtx);
}
return;
}
@@ -238,6 +247,8 @@
return (totlen);
}
+#if (USB_USE_CONDVAR == 0)
+
/*------------------------------------------------------------------------*
* usb2_cv_init - wrapper function
*------------------------------------------------------------------------*/
@@ -336,3 +347,5 @@
}
return (err);
}
+
+#endif
==== //depot/projects/usb/src/sys/dev/usb2/core/usb2_util.h#3 (text+ko) ====
@@ -33,6 +33,8 @@
void usb2_pause_mtx(struct mtx *mtx, uint32_t ms);
void usb2_printBCD(char *p, uint16_t p_len, uint16_t bcd);
void usb2_trim_spaces(char *p);
+
+#if (USB_USE_CONDVAR == 0)
void usb2_cv_init(struct cv *cv, const char *desc);
void usb2_cv_destroy(struct cv *cv);
void usb2_cv_wait(struct cv *cv, struct mtx *mtx);
@@ -41,4 +43,14 @@
void usb2_cv_signal(struct cv *cv);
void usb2_cv_broadcast(struct cv *cv);
+#else
+#define usb2_cv_init cv_init
+#define usb2_cv_destroy cv_destroy
+#define usb2_cv_wait cv_wait
+#define usb2_cv_wait_sig cv_wait_sig
+#define usb2_cv_timedwait cv_timedwait
+#define usb2_cv_signal cv_signal
+#define usb2_cv_broadcast cv_broadcast
+#endif
+
#endif /* _USB2_UTIL_H_ */
More information about the p4-projects
mailing list