1
0
mirror of https://git.FreeBSD.org/src.git synced 2025-01-17 15:27:36 +00:00

Fix compile with USB_HAVE_BUSDMA/USB_HAVE_UGEN/USB_HAVE_STRINGS.

Submitted by:	Hans Petter Selasky
This commit is contained in:
Andrew Thompson 2009-03-20 23:12:14 +00:00
parent d891ddcaea
commit 8755859a43
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=190191
8 changed files with 68 additions and 54 deletions

View File

@ -75,9 +75,10 @@ struct usb2_bus {
device_t parent;
device_t bdev; /* filled by HC driver */
#if USB_HAVE_BUSDMA
struct usb2_dma_parent_tag dma_parent_tag[1];
struct usb2_dma_tag dma_tags[USB_BUS_DMA_TAG_MAX];
#endif
struct usb2_bus_methods *methods; /* filled by HC driver */
struct usb2_device **devices;

View File

@ -48,6 +48,7 @@
struct usb2_xfer_root;
struct usb2_dma_parent_tag;
struct usb2_dma_tag;
/*
* The following typedef defines the USB DMA load done callback.
@ -115,11 +116,11 @@ struct usb2_page_cache {
/*
* The following structure describes the parent USB DMA tag.
*/
#if USB_HAVE_BUSDMA
struct usb2_dma_parent_tag {
#if USB_HAVE_BUSDMA && defined(__FreeBSD__)
#if defined(__FreeBSD__)
struct cv cv[1]; /* internal condition variable */
#endif
#if USB_HAVE_BUSDMA
bus_dma_tag_t tag; /* always set */
struct mtx *mtx; /* private mutex, always set */
@ -128,27 +129,31 @@ struct usb2_dma_parent_tag {
uint8_t dma_error; /* set if DMA load operation failed */
uint8_t dma_bits; /* number of DMA address lines */
uint8_t utag_max; /* number of USB DMA tags */
#endif
};
#else
struct usb2_dma_parent_tag {}; /* empty struct */
#endif
/*
* The following structure describes an USB DMA tag.
*/
#if USB_HAVE_BUSDMA
struct usb2_dma_tag {
#if USB_HAVE_BUSDMA && defined(__NetBSD__)
#if defined(__NetBSD__)
bus_dma_segment_t *p_seg;
#endif
#if USB_HAVE_BUSDMA
struct usb2_dma_parent_tag *tag_parent;
bus_dma_tag_t tag;
usb2_size_t align;
usb2_size_t size;
#endif
#if USB_HAVE_BUSDMA && defined(__NetBSD__)
#if defined(__NetBSD__)
usb2_size_t n_seg;
#endif
};
#else
struct usb2_dma_tag {}; /* empty struct */
#endif
/* function prototypes */

View File

@ -54,6 +54,8 @@
#include <machine/stdarg.h>
#if USB_HAVE_UGEN
#if USB_DEBUG
static int usb2_fifo_debug = 0;
@ -2195,3 +2197,4 @@ usb2_fifo_set_close_zlp(struct usb2_fifo *f, uint8_t onoff)
/* send a Zero Length Packet, ZLP, before close */
f->flag_short = onoff;
}
#endif /* USB_HAVE_UGEN */

View File

@ -75,9 +75,8 @@ static void usb2_check_strings(struct usb2_device *);
#endif
static usb2_error_t usb2_fill_iface_data(struct usb2_device *, uint8_t,
uint8_t);
static void usb2_notify_addq(const char *type, struct usb2_device *);
#if USB_HAVE_UGEN
static void usb2_notify_addq(const char *type, struct usb2_device *);
static void usb2_fifo_free_wrap(struct usb2_device *, uint8_t, uint8_t);
static struct cdev *usb2_make_dev(struct usb2_device *, int, int);
static void usb2_cdev_create(struct usb2_device *);
@ -738,7 +737,6 @@ usb2_set_alt_interface_index(struct usb2_device *udev,
*/
usb2_fifo_free_wrap(udev, iface_index, 0);
#endif
err = usb2_fill_iface_data(udev, iface_index, alt_index);
if (err) {
goto done;
@ -1378,8 +1376,6 @@ usb2_alloc_device(device_t parent_dev, struct usb2_bus *bus,
usb2_cv_init(udev->default_cv, "WCTRL");
usb2_cv_init(udev->default_cv + 1, "UGONE");
LIST_INIT(&udev->pd_list);
/* initialise our mutex */
mtx_init(udev->default_mtx, "USB device mutex", NULL, MTX_DEF);
@ -1449,18 +1445,19 @@ usb2_alloc_device(device_t parent_dev, struct usb2_bus *bus,
/* set device index */
udev->device_index = device_index;
#if USB_HAVE_UGEN
/* Create ugen name */
snprintf(udev->ugen_name, sizeof(udev->ugen_name),
USB_GENERIC_NAME "%u.%u", device_get_unit(bus->bdev),
device_index);
#if USB_HAVE_UGEN
LIST_INIT(&udev->pd_list);
/* Create the control endpoint device */
udev->default_dev = usb2_make_dev(udev, 0, FREAD|FWRITE);
/* Create a link from /dev/ugenX.X to the default endpoint */
make_dev_alias(udev->default_dev, udev->ugen_name);
#endif
if (udev->flags.usb2_mode == USB_MODE_HOST) {
err = usb2_req_set_address(udev, NULL, device_index);
@ -1713,14 +1710,17 @@ usb2_alloc_device(device_t parent_dev, struct usb2_bus *bus,
usb2_bus_port_set_device(bus, parent_hub ?
parent_hub->hub->ports + port_index : NULL, udev, device_index);
/* Link and announce the ugen device name */
#if USB_HAVE_UGEN
/* Symlink the ugen device name */
udev->ugen_symlink = usb2_alloc_symlink(udev->ugen_name);
#endif
/* Announce device */
#if USB_HAVE_STRINGS
printf("%s: <%s> at %s\n", udev->ugen_name, udev->manufacturer,
device_get_nameunit(udev->bus->bdev));
#endif
usb2_notify_addq("+", udev);
#endif
done:
if (err) {
/* free device */
@ -1824,7 +1824,6 @@ usb2_cdev_free(struct usb2_device *udev)
while ((pd = LIST_FIRST(&udev->pd_list)) != NULL) {
KASSERT(pd->cdev->si_drv1 == pd, ("privdata corrupt"));
KASSERT(pd->ep_addr > 0, ("freeing EP0"));
destroy_dev_sched_cb(pd->cdev, usb2_cdev_cleanup, pd);
pd->cdev = NULL;
@ -1851,18 +1850,20 @@ usb2_free_device(struct usb2_device *udev)
DPRINTFN(4, "udev=%p port=%d\n", udev, udev->port_no);
#if USB_HAVE_UGEN
usb2_notify_addq("-", udev);
#if USB_HAVE_STRINGS
printf("%s: <%s> at %s (disconnected)\n", udev->ugen_name,
udev->manufacturer, device_get_nameunit(bus->bdev));
#endif
/* Destroy UGEN symlink, if any */
if (udev->ugen_symlink) {
#if USB_HAVE_UGEN
usb2_free_symlink(udev->ugen_symlink);
#endif
udev->ugen_symlink = NULL;
}
#endif
/*
* Unregister our device first which will prevent any further
* references:
@ -1873,7 +1874,6 @@ usb2_free_device(struct usb2_device *udev)
#if USB_HAVE_UGEN
/* wait for all pending references to go away: */
mtx_lock(&usb2_ref_lock);
udev->refcount--;
while (udev->refcount != 0) {
@ -1923,7 +1923,9 @@ usb2_free_device(struct usb2_device *udev)
usb2_cv_destroy(udev->default_cv + 1);
mtx_destroy(udev->default_mtx);
#if USB_HAVE_UGEN
KASSERT(LIST_FIRST(&udev->pd_list) == NULL, ("leaked cdev entries"));
#endif
/* free device */
free(udev, M_USB);
@ -2026,14 +2028,24 @@ usb2_devinfo(struct usb2_device *udev, char *dst_ptr, uint16_t dst_len)
if (udd->bDeviceClass != 0xFF) {
snprintf(dst_ptr, dst_len, "%s %s, class %d/%d, rev %x.%02x/"
"%x.%02x, addr %d", udev->manufacturer, udev->product,
"%x.%02x, addr %d",
#if USB_HAVE_STRINGS
udev->manufacturer, udev->product,
#else
"-", "-",
#endif
udd->bDeviceClass, udd->bDeviceSubClass,
(bcdUSB >> 8), bcdUSB & 0xFF,
(bcdDevice >> 8), bcdDevice & 0xFF,
udev->address);
} else {
snprintf(dst_ptr, dst_len, "%s %s, rev %x.%02x/"
"%x.%02x, addr %d", udev->manufacturer, udev->product,
"%x.%02x, addr %d",
#if USB_HAVE_STRINGS
udev->manufacturer, udev->product,
#else
"-", "-",
#endif
(bcdUSB >> 8), bcdUSB & 0xFF,
(bcdDevice >> 8), bcdDevice & 0xFF,
udev->address);
@ -2230,6 +2242,7 @@ usb2_get_device_index(struct usb2_device *udev)
return (udev->device_index);
}
#if USB_HAVE_UGEN
/*------------------------------------------------------------------------*
* usb2_notify_addq
*
@ -2271,35 +2284,19 @@ usb2_notify_addq(const char *type, struct usb2_device *udev)
UGETW(udev->ddesc.idProduct),
udev->ddesc.bDeviceClass,
udev->ddesc.bDeviceSubClass,
#if USB_HAVE_STRINGS
udev->serial,
#else
"",
#endif
udev->port_no,
udev->parent_hub->ugen_name);
} else {
snprintf(data, 1024,
"%s"
"%s "
"vendor=0x%04x "
"product=0x%04x "
"devclass=0x%02x "
"devsubclass=0x%02x "
"sernum=\"%s\" "
"at port=%u "
"on "
"%s\n",
type,
udev->ugen_name,
UGETW(udev->ddesc.idVendor),
UGETW(udev->ddesc.idProduct),
udev->ddesc.bDeviceClass,
udev->ddesc.bDeviceSubClass,
udev->serial,
udev->port_no,
udev->parent_hub != NULL ?
udev->parent_hub->ugen_name :
device_get_nameunit(device_get_parent(udev->bus->bdev)));
}
devctl_queue_data(data);
}
#if USB_HAVE_UGEN
/*------------------------------------------------------------------------*
* usb2_fifo_free_wrap
*

View File

@ -27,7 +27,7 @@
#ifndef _USB2_DEVICE_H_
#define _USB2_DEVICE_H_
struct usb2_symlink;
struct usb2_symlink; /* UGEN */
struct usb_device; /* linux compat */
#define USB_DEFAULT_XFER_MAX 2
@ -121,13 +121,12 @@ struct usb2_device {
struct usb2_xfer *default_xfer[USB_DEFAULT_XFER_MAX];
struct usb2_temp_data *usb2_template_ptr;
struct usb2_pipe *pipe_curr; /* current clear stall pipe */
#if USB_HAVE_UGEN
struct usb2_fifo *fifo[USB_FIFO_MAX];
char ugen_name[20]; /* name of ugenX.X device */
struct usb2_symlink *ugen_symlink; /* our generic symlink */
LIST_HEAD(,usb2_fs_privdata) pd_list;
char ugen_name[20]; /* name of ugenX.X device */
#endif
usb2_ticks_t plugtime; /* copy of "ticks" */
uint16_t refcount;
@ -156,9 +155,11 @@ struct usb2_device {
struct usb2_endpoint_descriptor default_ep_desc; /* for pipe 0 */
struct usb2_device_descriptor ddesc; /* device descriptor */
#if USB_HAVE_STRINGS
char serial[64]; /* serial number */
char manufacturer[64]; /* manufacturer string */
char product[64]; /* product string */
#endif
};
/* globals */

View File

@ -47,6 +47,8 @@
#include <dev/usb/usb_controller.h>
#include <dev/usb/usb_bus.h>
#if USB_HAVE_UGEN
/* defines */
#define UGEN_BULK_FS_BUFFER_SIZE (64*32) /* bytes */
@ -799,12 +801,14 @@ usb2_gen_fill_deviceinfo(struct usb2_fifo *f, struct usb2_device_info *di)
di->udi_bus = device_get_unit(udev->bus->bdev);
di->udi_addr = udev->address;
di->udi_index = udev->device_index;
#if USB_HAVE_STRINGS
strlcpy(di->udi_serial, udev->serial,
sizeof(di->udi_serial));
strlcpy(di->udi_vendor, udev->manufacturer,
sizeof(di->udi_vendor));
strlcpy(di->udi_product, udev->product,
sizeof(di->udi_product));
#endif
usb2_printBCD(di->udi_release, sizeof(di->udi_release),
UGETW(udev->ddesc.bcdDevice));
di->udi_vendorNo = UGETW(udev->ddesc.idVendor);
@ -2183,3 +2187,4 @@ ugen_default_fs_callback(struct usb2_xfer *xfer)
break;
}
}
#endif /* USB_HAVE_UGEN */

View File

@ -978,7 +978,11 @@ uhub_child_pnpinfo_string(device_t parent, device_t child,
UGETW(res.udev->ddesc.idProduct),
res.udev->ddesc.bDeviceClass,
res.udev->ddesc.bDeviceSubClass,
#if USB_HAVE_STRINGS
res.udev->serial,
#else
"",
#endif
iface->idesc->bInterfaceClass,
iface->idesc->bInterfaceSubClass);
} else {

View File

@ -167,7 +167,6 @@ usb2_pause_mtx(struct mtx *mtx, int _ticks)
* pointed to by "p" having a maximum length of "p_len" bytes
* including the terminating zero.
*------------------------------------------------------------------------*/
#if USB_HAVE_STRINGS
void
usb2_printBCD(char *p, uint16_t p_len, uint16_t bcd)
{
@ -175,7 +174,6 @@ usb2_printBCD(char *p, uint16_t p_len, uint16_t bcd)
/* ignore any errors */
}
}
#endif
/*------------------------------------------------------------------------*
* usb2_trim_spaces