Date: Thu, 3 Jul 2008 20:36:25 GMT From: Hans Petter Selasky <hselasky@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 144569 for review Message-ID: <200807032036.m63KaPQp016655@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=144569 Change 144569 by hselasky@hselasky_laptop001 on 2008/07/03 20:35:44 The misc. USB module is finished. - mostly symbol renaming. - some minor code changes to ufm2.c Affected files ... .. //depot/projects/usb/src/sys/dev/usb2/misc/udbp2.c#2 edit .. //depot/projects/usb/src/sys/dev/usb2/misc/udbp2.h#2 edit .. //depot/projects/usb/src/sys/dev/usb2/misc/ufm2.c#2 edit .. //depot/projects/usb/src/sys/dev/usb2/misc/usb2_misc.c#1 add .. //depot/projects/usb/src/sys/dev/usb2/misc/usb2_misc.h#1 add .. //depot/projects/usb/src/sys/modules/usb2/misc/Makefile#2 edit Differences ... ==== //depot/projects/usb/src/sys/dev/usb2/misc/udbp2.c#2 (text+ko) ==== @@ -57,37 +57,36 @@ * */ -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#include <sys/mbuf.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 udbp_debug -#include <dev/usb/usb_port.h> -#include <dev/usb/usb.h> -#include <dev/usb/usb_subr.h> +#include <dev/usb2/core/usb2_core.h> +#include <dev/usb2/core/usb2_debug.h> +#include <dev/usb2/core/usb2_parse.h> +#include <dev/usb2/core/usb2_lookup.h> +#include <dev/usb2/core/usb2_util.h> +#include <dev/usb2/core/usb2_busdma.h> -#include "usbdevs.h" +#include <sys/mbuf.h> #include <netgraph/ng_message.h> +#include <netgraph/netgraph.h> #include <netgraph/ng_parse.h> -#include <dev/usb/udbp.h> -#include <netgraph/netgraph.h> #include <netgraph/bluetooth/include/ng_bluetooth.h> +#include <dev/usb2/misc/udbp2.h> + #ifdef USB_DEBUG -#define DPRINTF(sc,n,fmt,...) do { \ - if (udbp_debug > (n)) \ - printf("%s:%s: " fmt, (sc)->sc_name, \ - __FUNCTION__,## __VA_ARGS__); \ -} while (0) - static int udbp_debug = 0; -SYSCTL_NODE(_hw_usb, OID_AUTO, udbp, CTLFLAG_RW, 0, "USB udbp"); -SYSCTL_INT(_hw_usb_udbp, OID_AUTO, debug, CTLFLAG_RW, +SYSCTL_NODE(_hw_usb2, OID_AUTO, udbp, CTLFLAG_RW, 0, "USB udbp"); +SYSCTL_INT(_hw_usb2_udbp, OID_AUTO, debug, CTLFLAG_RW, &udbp_debug, 0, "udbp debug level"); -#else -#define DPRINTF(...) do { } while (0) #endif #define UDBP_TIMEOUT 2000 /* timeout on outbound transfers, in @@ -107,7 +106,7 @@ struct ng_bt_mbufq sc_xmitq_hipri; /* hi-priority transmit queue */ struct ng_bt_mbufq sc_xmitq; /* low-priority transmit queue */ - struct usbd_xfer *sc_xfer[UDBP_T_MAX]; + struct usb2_xfer *sc_xfer[UDBP_T_MAX]; node_p sc_node; /* back pointer to node */ hook_p sc_hook; /* pointer to the hook */ struct mbuf *sc_bulk_in_buffer; @@ -124,20 +123,18 @@ /* prototypes */ -static int - udbp_modload(module_t mod, int event, void *data); +static int udbp_modload(module_t mod, int event, void *data); static device_probe_t udbp_probe; static device_attach_t udbp_attach; static device_detach_t udbp_detach; -static usbd_callback_t udbp_bulk_read_callback; -static usbd_callback_t udbp_bulk_read_clear_stall_callback; -static usbd_callback_t udbp_bulk_write_callback; -static usbd_callback_t udbp_bulk_write_clear_stall_callback; +static usb2_callback_t udbp_bulk_read_callback; +static usb2_callback_t udbp_bulk_read_clear_stall_callback; +static usb2_callback_t udbp_bulk_write_callback; +static usb2_callback_t udbp_bulk_write_clear_stall_callback; -static void - udbp_bulk_read_complete(node_p node, hook_p hook, void *arg1, int arg2); +static void udbp_bulk_read_complete(node_p node, hook_p hook, void *arg1, int arg2); static ng_constructor_t ng_udbp_constructor; static ng_rcvmsg_t ng_udbp_rcvmsg; @@ -150,6 +147,7 @@ /* Parse type for struct ngudbpstat */ static const struct ng_parse_struct_field ng_udbp_stat_type_fields[] = NG_UDBP_STATS_TYPE_INFO; + static const struct ng_parse_type ng_udbp_stat_type = { &ng_parse_struct_type, &ng_udbp_stat_type_fields @@ -189,7 +187,7 @@ }; /* USB config */ -static const struct usbd_config udbp_config[UDBP_T_MAX] = { +static const struct usb2_config udbp_config[UDBP_T_MAX] = { [UDBP_T_WR] = { .type = UE_BULK, @@ -214,7 +212,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 = &udbp_bulk_write_clear_stall_callback, .mh.timeout = 1000, /* 1 second */ @@ -225,7 +223,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 = &udbp_bulk_read_clear_stall_callback, .mh.timeout = 1000, /* 1 second */ @@ -249,9 +247,9 @@ .size = sizeof(struct udbp_softc), }; -DRIVER_MODULE(udbp, uhub, udbp_driver, udbp_devclass, udbp_modload, 0); +DRIVER_MODULE(udbp, ushub, udbp_driver, udbp_devclass, udbp_modload, 0); MODULE_DEPEND(udbp, netgraph, NG_ABI_VERSION, NG_ABI_VERSION, NG_ABI_VERSION); -MODULE_DEPEND(udbp, usb, 1, 1, 1); +MODULE_DEPEND(udbp, usb2_core, 1, 1, 1); static int udbp_modload(module_t mod, int event, void *data) @@ -265,14 +263,11 @@ printf("%s: Could not register " "Netgraph node type, error=%d\n", NG_UDBP_NODE_TYPE, error); - } else - error = usbd_driver_load(mod, event, data); + } break; case MOD_UNLOAD: error = ng_rmtype(&ng_udbp_typestruct); - if (error == 0) - error = usbd_driver_load(mod, event, data); break; default: @@ -285,14 +280,11 @@ static int udbp_probe(device_t dev) { - struct usb_attach_arg *uaa = device_get_ivars(dev); + struct usb2_attach_arg *uaa = device_get_ivars(dev); - if (uaa->usb_mode != USB_MODE_HOST) { - return (UMATCH_NONE); + if (uaa->usb2_mode != USB_MODE_HOST) { + return (ENXIO); } - if (!uaa->iface) - return (UMATCH_NONE); - /* * XXX Julian, add the id of the device if you have one to test * things with. run 'usbdevs -v' and note the 3 ID's that appear. @@ -301,47 +293,47 @@ * compare the revision id in the device descriptor with 0x101 Or go * search the file usbdevs.h. Maybe the device is already in there. */ - if (((uaa->vendor == USB_VENDOR_NETCHIP) && - (uaa->product == USB_PRODUCT_NETCHIP_TURBOCONNECT))) - return (UMATCH_VENDOR_PRODUCT); + if (((uaa->info.idVendor == USB_VENDOR_NETCHIP) && + (uaa->info.idProduct == USB_PRODUCT_NETCHIP_TURBOCONNECT))) + return (0); - if (((uaa->vendor == USB_VENDOR_PROLIFIC) && - ((uaa->product == USB_PRODUCT_PROLIFIC_PL2301) || - (uaa->product == USB_PRODUCT_PROLIFIC_PL2302)))) - return (UMATCH_VENDOR_PRODUCT); + if (((uaa->info.idVendor == USB_VENDOR_PROLIFIC) && + ((uaa->info.idProduct == USB_PRODUCT_PROLIFIC_PL2301) || + (uaa->info.idProduct == USB_PRODUCT_PROLIFIC_PL2302)))) + return (0); - if ((uaa->vendor == USB_VENDOR_ANCHOR) && - (uaa->product == USB_PRODUCT_ANCHOR_EZLINK)) - return (UMATCH_VENDOR_PRODUCT); + if ((uaa->info.idVendor == USB_VENDOR_ANCHOR) && + (uaa->info.idProduct == USB_PRODUCT_ANCHOR_EZLINK)) + return (0); - if ((uaa->vendor == USB_VENDOR_GENESYS) && - (uaa->product == USB_PRODUCT_GENESYS_GL620USB)) - return (UMATCH_VENDOR_PRODUCT); + if ((uaa->info.idVendor == USB_VENDOR_GENESYS) && + (uaa->info.idProduct == USB_PRODUCT_GENESYS_GL620USB)) + return (0); - return (UMATCH_NONE); + return (ENXIO); } static int udbp_attach(device_t dev) { - struct usb_attach_arg *uaa = device_get_ivars(dev); + struct usb2_attach_arg *uaa = device_get_ivars(dev); struct udbp_softc *sc = device_get_softc(dev); - int32_t error; + int error; if (sc == NULL) { return (ENOMEM); } - usbd_set_device_desc(dev); + device_set_usb2_desc(dev); snprintf(sc->sc_name, sizeof(sc->sc_name), "%s", device_get_nameunit(dev)); mtx_init(&(sc->sc_mtx), "udbp lock", NULL, MTX_DEF | MTX_RECURSE); - error = usbd_transfer_setup(uaa->device, &(uaa->iface_index), + error = usb2_transfer_setup(uaa->device, &(uaa->info.bIfaceIndex), sc->sc_xfer, udbp_config, UDBP_T_MAX, sc, &(sc->sc_mtx)); if (error) { - DPRINTF(sc, 0, "error=%s\n", usbd_errstr(error)); + DPRINTF(0, "error=%s\n", usb2_errstr(error)); goto detach; } NG_BT_MBUFQ_INIT(&(sc->sc_xmitq), UDBP_Q_MAXLEN); @@ -390,7 +382,7 @@ } /* free USB transfers, if any */ - usbd_transfer_unsetup(sc->sc_xfer, UDBP_T_MAX); + usb2_transfer_unsetup(sc->sc_xfer, UDBP_T_MAX); mtx_destroy(&(sc->sc_mtx)); @@ -409,13 +401,13 @@ } static void -udbp_bulk_read_callback(struct usbd_xfer *xfer) +udbp_bulk_read_callback(struct usb2_xfer *xfer) { struct udbp_softc *sc = xfer->priv_sc; struct mbuf *m; - switch (USBD_GET_STATE(xfer)) { - case USBD_ST_TRANSFERRED: + switch (USB_GET_STATE(xfer)) { + case USB_ST_TRANSFERRED: /* allocate new mbuf */ @@ -432,32 +424,32 @@ } m->m_pkthdr.len = m->m_len = xfer->actlen; - usbd_copy_out(xfer->frbuffers, 0, m->m_data, xfer->actlen); + usb2_copy_out(xfer->frbuffers, 0, m->m_data, xfer->actlen); sc->sc_bulk_in_buffer = m; - DPRINTF(sc, 0, "received package %d " + DPRINTF(0, "received package %d " "bytes\n", xfer->actlen); - case USBD_ST_SETUP: + case USB_ST_SETUP: tr_setup: if (sc->sc_bulk_in_buffer) { ng_send_fn(sc->sc_node, NULL, &udbp_bulk_read_complete, NULL, 0); return; } if (sc->sc_flags & UDBP_FLAG_READ_STALL) { - usbd_transfer_start(sc->sc_xfer[UDBP_T_RD_CS]); + usb2_transfer_start(sc->sc_xfer[UDBP_T_RD_CS]); return; } xfer->frlengths[0] = xfer->max_data_length; - usbd_start_hardware(xfer); + usb2_start_hardware(xfer); return; default: /* Error */ - if (xfer->error != USBD_ERR_CANCELLED) { + if (xfer->error != USB_ERR_CANCELLED) { /* try to clear stall first */ sc->sc_flags |= UDBP_FLAG_READ_STALL; - usbd_transfer_start(sc->sc_xfer[UDBP_T_RD_CS]); + usb2_transfer_start(sc->sc_xfer[UDBP_T_RD_CS]); } return; @@ -465,15 +457,15 @@ } static void -udbp_bulk_read_clear_stall_callback(struct usbd_xfer *xfer) +udbp_bulk_read_clear_stall_callback(struct usb2_xfer *xfer) { struct udbp_softc *sc = xfer->priv_sc; - struct usbd_xfer *xfer_other = sc->sc_xfer[UDBP_T_RD]; + struct usb2_xfer *xfer_other = sc->sc_xfer[UDBP_T_RD]; - if (usbd_clear_stall_callback(xfer, xfer_other)) { - DPRINTF(sc, 0, "stall cleared\n"); + if (usb2_clear_stall_callback(xfer, xfer_other)) { + DPRINTF(0, "stall cleared\n"); sc->sc_flags &= ~UDBP_FLAG_READ_STALL; - usbd_transfer_start(xfer_other); + usb2_transfer_start(xfer_other); } return; } @@ -498,7 +490,7 @@ if ((sc->sc_hook == NULL) || NG_HOOK_NOT_VALID(sc->sc_hook)) { - DPRINTF(sc, 0, "No upstream hook\n"); + DPRINTF(0, "No upstream hook\n"); goto done; } sc->sc_packets_in++; @@ -513,7 +505,7 @@ } /* start USB bulk-in transfer, if not already started */ - usbd_transfer_start(sc->sc_xfer[UDBP_T_RD]); + usb2_transfer_start(sc->sc_xfer[UDBP_T_RD]); mtx_unlock(&(sc->sc_mtx)); @@ -521,19 +513,19 @@ } static void -udbp_bulk_write_callback(struct usbd_xfer *xfer) +udbp_bulk_write_callback(struct usb2_xfer *xfer) { struct udbp_softc *sc = xfer->priv_sc; struct mbuf *m; - switch (USBD_GET_STATE(xfer)) { - case USBD_ST_TRANSFERRED: + switch (USB_GET_STATE(xfer)) { + case USB_ST_TRANSFERRED: sc->sc_packets_out++; - case USBD_ST_SETUP: + case USB_ST_SETUP: if (sc->sc_flags & UDBP_FLAG_WRITE_STALL) { - usbd_transfer_start(sc->sc_xfer[UDBP_T_WR_CS]); + usb2_transfer_start(sc->sc_xfer[UDBP_T_WR_CS]); return; } /* get next mbuf, if any */ @@ -542,33 +534,33 @@ if (m == NULL) { NG_BT_MBUFQ_DEQUEUE(&(sc->sc_xmitq), m); if (m == NULL) { - DPRINTF(sc, 0, "Data queue is empty\n"); + DPRINTF(0, "Data queue is empty\n"); return; } } if (m->m_pkthdr.len > MCLBYTES) { - DPRINTF(sc, 0, "truncating large packet " + DPRINTF(0, "truncating large packet " "from %d to %d bytes\n", m->m_pkthdr.len, MCLBYTES); m->m_pkthdr.len = MCLBYTES; } - usbd_m_copy_in(xfer->frbuffers, 0, m, 0, m->m_pkthdr.len); + usb2_m_copy_in(xfer->frbuffers, 0, m, 0, m->m_pkthdr.len); xfer->frlengths[0] = m->m_pkthdr.len; m_freem(m); - DPRINTF(sc, 0, "packet out: %d bytes\n", + DPRINTF(0, "packet out: %d bytes\n", xfer->frlengths[0]); - usbd_start_hardware(xfer); + usb2_start_hardware(xfer); return; default: /* Error */ - if (xfer->error != USBD_ERR_CANCELLED) { + if (xfer->error != USB_ERR_CANCELLED) { /* try to clear stall first */ sc->sc_flags |= UDBP_FLAG_WRITE_STALL; - usbd_transfer_start(sc->sc_xfer[UDBP_T_WR_CS]); + usb2_transfer_start(sc->sc_xfer[UDBP_T_WR_CS]); } return; @@ -576,15 +568,15 @@ } static void -udbp_bulk_write_clear_stall_callback(struct usbd_xfer *xfer) +udbp_bulk_write_clear_stall_callback(struct usb2_xfer *xfer) { struct udbp_softc *sc = xfer->priv_sc; - struct usbd_xfer *xfer_other = sc->sc_xfer[UDBP_T_WR]; + struct usb2_xfer *xfer_other = sc->sc_xfer[UDBP_T_WR]; - if (usbd_clear_stall_callback(xfer, xfer_other)) { - DPRINTF(sc, 0, "stall cleared\n"); + if (usb2_clear_stall_callback(xfer, xfer_other)) { + DPRINTF(0, "stall cleared\n"); sc->sc_flags &= ~UDBP_FLAG_WRITE_STALL; - usbd_transfer_start(xfer_other); + usb2_transfer_start(xfer_other); } return; } @@ -683,7 +675,7 @@ error = EINVAL; break; } - DPRINTF(sc, 0, "flags = 0x%08x\n", + DPRINTF(0, "flags = 0x%08x\n", *((uint32_t *)msg->data)); break; default: @@ -743,7 +735,7 @@ /* * start bulk-out transfer, if not already started: */ - usbd_transfer_start(sc->sc_xfer[UDBP_T_WR]); + usb2_transfer_start(sc->sc_xfer[UDBP_T_WR]); error = 0; } @@ -811,10 +803,10 @@ UDBP_FLAG_WRITE_STALL); /* start bulk-in transfer */ - usbd_transfer_start(sc->sc_xfer[UDBP_T_RD]); + usb2_transfer_start(sc->sc_xfer[UDBP_T_RD]); /* start bulk-out transfer */ - usbd_transfer_start(sc->sc_xfer[UDBP_T_WR]); + usb2_transfer_start(sc->sc_xfer[UDBP_T_WR]); mtx_unlock(&(sc->sc_mtx)); @@ -841,12 +833,12 @@ } else { /* stop bulk-in transfer */ - usbd_transfer_stop(sc->sc_xfer[UDBP_T_RD_CS]); - usbd_transfer_stop(sc->sc_xfer[UDBP_T_RD]); + usb2_transfer_stop(sc->sc_xfer[UDBP_T_RD_CS]); + usb2_transfer_stop(sc->sc_xfer[UDBP_T_RD]); /* stop bulk-out transfer */ - usbd_transfer_stop(sc->sc_xfer[UDBP_T_WR_CS]); - usbd_transfer_stop(sc->sc_xfer[UDBP_T_WR]); + usb2_transfer_stop(sc->sc_xfer[UDBP_T_WR_CS]); + usb2_transfer_stop(sc->sc_xfer[UDBP_T_WR]); /* cleanup queues */ NG_BT_MBUFQ_DRAIN(&sc->sc_xmitq); ==== //depot/projects/usb/src/sys/dev/usb2/misc/udbp2.h#2 (text+ko) ==== ==== //depot/projects/usb/src/sys/dev/usb2/misc/ufm2.c#2 (text+ko) ==== @@ -32,47 +32,34 @@ __FBSDID("$FreeBSD: src/sys/dev/usb/ufm.c,v 1.36 2007/06/21 14:42:33 imp Exp $"); -#include <sys/param.h> -#include <sys/systm.h> -#include <sys/kernel.h> -#include <sys/malloc.h> -#include <sys/fcntl.h> -#include <sys/filio.h> -#include <sys/conf.h> -#include <sys/sysctl.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/ufm2_ioctl.h> -#include <dev/usb/usb_port.h> -#include <dev/usb/usb.h> -#include <dev/usb/usb_subr.h> +#define USB_DEBUG_VAR usb2_debug -#include "usbdevs.h" - -#include <dev/usb/dsbr100io.h> - -#ifdef USB_DEBUG -#define DPRINTF(sc,n,fmt,...) \ - do { if (ufm_debug > (n)) { \ - printf("%s:%s: " fmt, (sc)->sc_name, \ - __FUNCTION__,## __VA_ARGS__); } } while (0) +#include <dev/usb2/core/usb2_core.h> +#include <dev/usb2/core/usb2_debug.h> +#include <dev/usb2/core/usb2_process.h> +#include <dev/usb2/core/usb2_config_td.h> +#include <dev/usb2/core/usb2_request.h> +#include <dev/usb2/core/usb2_lookup.h> +#include <dev/usb2/core/usb2_util.h> +#include <dev/usb2/core/usb2_busdma.h> +#include <dev/usb2/core/usb2_mbuf.h> +#include <dev/usb2/core/usb2_dev.h> -static int ufm_debug = 0; - -SYSCTL_NODE(_hw_usb, OID_AUTO, ufm, CTLFLAG_RW, 0, "USB ufm"); -SYSCTL_INT(_hw_usb_ufm, OID_AUTO, debug, CTLFLAG_RW, - &ufm_debug, 0, "ufm debug level"); -#else -#define DPRINTF(...) do { } while (0) -#endif - #define UFM_CMD0 0x00 #define UFM_CMD_SET_FREQ 0x01 #define UFM_CMD2 0x02 struct ufm_softc { - struct usb_cdev sc_cdev; + struct usb2_fifo_sc sc_fifo; struct mtx sc_mtx; - struct usbd_device *sc_udev; + struct usb2_device *sc_udev; uint32_t sc_unit; uint32_t sc_freq; @@ -86,32 +73,22 @@ static device_attach_t ufm_attach; static device_detach_t ufm_detach; -static int32_t -ufm_open(struct usb_cdev *dev, int32_t fflags, - int32_t devtype, struct thread *td); +static usb2_fifo_ioctl_t ufm_ioctl; +static usb2_fifo_open_t ufm_open; -static int -ufm_do_req(struct ufm_softc *sc, int32_t fflags, uint8_t request, - uint16_t value, uint16_t index, uint8_t *retbuf); -static int - ufm_set_freq(struct ufm_softc *sc, caddr_t addr, int32_t fflags); +static struct usb2_fifo_methods ufm_fifo_methods = { + .f_ioctl = &ufm_ioctl, + .f_open = &ufm_open, + .basename[0] = "ufm", +}; -static int - ufm_get_freq(struct ufm_softc *sc, caddr_t addr, int32_t fflags); +static int ufm_do_req(struct ufm_softc *sc, uint8_t request, uint16_t value, uint16_t index, uint8_t *retbuf); +static int ufm_set_freq(struct ufm_softc *sc, void *addr); +static int ufm_get_freq(struct ufm_softc *sc, void *addr); +static int ufm_start(struct ufm_softc *sc, void *addr); +static int ufm_stop(struct ufm_softc *sc, void *addr); +static int ufm_get_stat(struct ufm_softc *sc, void *addr); -static int - ufm_start(struct ufm_softc *sc, caddr_t addr, int32_t fflags); - -static int - ufm_stop(struct ufm_softc *sc, caddr_t addr, int32_t fflags); - -static int - ufm_get_stat(struct ufm_softc *sc, caddr_t addr, int32_t fflags); - -static int -ufm_ioctl(struct usb_cdev *dev, u_long cmd, caddr_t addr, - int32_t fflags, struct thread *td); - static devclass_t ufm_devclass; static device_method_t ufm_methods[] = { @@ -127,35 +104,30 @@ .size = sizeof(struct ufm_softc), }; -MODULE_DEPEND(ufm, usb, 1, 1, 1); -DRIVER_MODULE(ufm, uhub, ufm_driver, ufm_devclass, usbd_driver_load, 0); +MODULE_DEPEND(ufm, usb2_core, 1, 1, 1); +DRIVER_MODULE(ufm, ushub, ufm_driver, ufm_devclass, NULL, 0); static int ufm_probe(device_t dev) { - struct usb_attach_arg *uaa = device_get_ivars(dev); + struct usb2_attach_arg *uaa = device_get_ivars(dev); - if (uaa->usb_mode != USB_MODE_HOST) { - return (UMATCH_NONE); + if (uaa->usb2_mode != USB_MODE_HOST) { + return (ENXIO); } - if (uaa->iface == NULL) { - return (UMATCH_NONE); + if ((uaa->info.idVendor == USB_VENDOR_CYPRESS) && + (uaa->info.idProduct == USB_PRODUCT_CYPRESS_FMRADIO)) { + return (0); } - if ((uaa->vendor == USB_VENDOR_CYPRESS) && - (uaa->product == USB_PRODUCT_CYPRESS_FMRADIO)) { - return (UMATCH_VENDOR_PRODUCT); - } - return (UMATCH_NONE); + return (ENXIO); } static int ufm_attach(device_t dev) { - struct usb_attach_arg *uaa = device_get_ivars(dev); + struct usb2_attach_arg *uaa = device_get_ivars(dev); struct ufm_softc *sc = device_get_softc(dev); - const char *p_buf[2]; - char buf[16]; - int32_t error; + int error; if (sc == NULL) { return (ENOMEM); @@ -168,18 +140,15 @@ mtx_init(&(sc->sc_mtx), "ufm lock", NULL, MTX_DEF | MTX_RECURSE); - usbd_set_device_desc(dev); + device_set_usb2_desc(dev); - snprintf(buf, sizeof(buf), "ufm%d", sc->sc_unit); + /* set interface permissions */ + usb2_set_iface_perm(uaa->device, uaa->info.bIfaceIndex, + UID_ROOT, GID_OPERATOR, 0644); - p_buf[0] = buf; - p_buf[1] = NULL; - - sc->sc_cdev.sc_open = &ufm_open; - sc->sc_cdev.sc_ioctl = &ufm_ioctl; - - error = usb_cdev_attach(&(sc->sc_cdev), sc, &(sc->sc_mtx), p_buf, - UID_ROOT, GID_OPERATOR, 0644, 0, 0, 0, 0); + error = usb2_fifo_attach(uaa->device, sc, &(sc->sc_mtx), + &ufm_fifo_methods, &(sc->sc_fifo), + device_get_unit(dev), 0 - 1, uaa->info.bIfaceIndex); if (error) { goto detach; } @@ -195,16 +164,15 @@ { struct ufm_softc *sc = device_get_softc(dev); - usb_cdev_detach(&(sc->sc_cdev)); + usb2_fifo_detach(&(sc->sc_fifo)); mtx_destroy(&(sc->sc_mtx)); return (0); } -static int32_t -ufm_open(struct usb_cdev *dev, int32_t fflags, - int32_t devtype, struct thread *td) +static int +ufm_open(struct usb2_fifo *dev, int fflags, struct thread *td) { if ((fflags & (FWRITE | FREAD)) != (FWRITE | FREAD)) { return (EACCES); @@ -213,12 +181,12 @@ } static int -ufm_do_req(struct ufm_softc *sc, int32_t fflags, uint8_t request, +ufm_do_req(struct ufm_softc *sc, uint8_t request, uint16_t value, uint16_t index, uint8_t *retbuf) { - int32_t error; + int error; - usb_device_request_t req; + struct usb2_device_request req; uint8_t buf[1]; req.bmRequestType = UT_READ_VENDOR_DEVICE; @@ -227,7 +195,7 @@ USETW(req.wIndex, index); USETW(req.wLength, 1); - error = usbd_do_request(sc->sc_udev, NULL, &req, buf); + error = usb2_do_request(sc->sc_udev, NULL, &req, buf); if (retbuf) { *retbuf = buf[0]; @@ -239,7 +207,7 @@ } static int -ufm_set_freq(struct ufm_softc *sc, caddr_t addr, int32_t fflags) +ufm_set_freq(struct ufm_softc *sc, void *addr) { int freq = *(int *)addr; @@ -257,12 +225,12 @@ freq = (freq + 10700001) / 12500; /* This appears to set the frequency */ - if (ufm_do_req(sc, fflags, UFM_CMD_SET_FREQ, + if (ufm_do_req(sc, UFM_CMD_SET_FREQ, freq >> 8, freq, NULL) != 0) { return (EIO); } /* Not sure what this does */ - if (ufm_do_req(sc, fflags, UFM_CMD0, + if (ufm_do_req(sc, UFM_CMD0, 0x96, 0xb7, NULL) != 0) { return (EIO); } @@ -270,7 +238,7 @@ } static int -ufm_get_freq(struct ufm_softc *sc, caddr_t addr, int32_t fflags) +ufm_get_freq(struct ufm_softc *sc, void *addr) { int *valp = (int *)addr; @@ -281,15 +249,15 @@ } static int -ufm_start(struct ufm_softc *sc, caddr_t addr, int32_t fflags) +ufm_start(struct ufm_softc *sc, void *addr) { uint8_t ret; - if (ufm_do_req(sc, fflags, UFM_CMD0, + if (ufm_do_req(sc, UFM_CMD0, 0x00, 0xc7, &ret)) { return (EIO); } - if (ufm_do_req(sc, fflags, UFM_CMD2, + if (ufm_do_req(sc, UFM_CMD2, 0x01, 0x00, &ret)) { return (EIO); } @@ -300,13 +268,13 @@ } static int -ufm_stop(struct ufm_softc *sc, caddr_t addr, int32_t fflags) +ufm_stop(struct ufm_softc *sc, void *addr) { - if (ufm_do_req(sc, fflags, UFM_CMD0, + if (ufm_do_req(sc, UFM_CMD0, 0x16, 0x1C, NULL)) { return (EIO); } - if (ufm_do_req(sc, fflags, UFM_CMD2, + if (ufm_do_req(sc, UFM_CMD2, 0x00, 0x00, NULL)) { return (EIO); } @@ -314,7 +282,7 @@ } static int -ufm_get_stat(struct ufm_softc *sc, caddr_t addr, int32_t fflags) +ufm_get_stat(struct ufm_softc *sc, void *addr) { uint8_t ret; @@ -323,9 +291,11 @@ * will be valid, so sleep that amount. */ - usbd_pause_mtx(NULL, 250); + mtx_lock(&(sc->sc_mtx)); + usb2_pause_mtx(&(sc->sc_mtx), USB_MS_HZ / 4); + mtx_unlock(&(sc->sc_mtx)); - if (ufm_do_req(sc, fflags, UFM_CMD0, + if (ufm_do_req(sc, UFM_CMD0, 0x00, 0x24, &ret)) { return (EIO); } @@ -335,33 +305,31 @@ } static int -ufm_ioctl(struct usb_cdev *dev, u_long cmd, caddr_t addr, - int32_t fflags, struct thread *td) +ufm_ioctl(struct usb2_fifo *fifo, u_long cmd, void *addr, + int fflags, struct thread *td) { - struct ufm_softc *sc = dev->sc_priv_ptr; + struct ufm_softc *sc = fifo->priv_sc0; int error = 0; - usb_cdev_unlock(dev, fflags); - switch (cmd) { case FM_SET_FREQ: - error = ufm_set_freq(sc, addr, fflags); + error = ufm_set_freq(sc, addr); break; case FM_GET_FREQ: - error = ufm_get_freq(sc, addr, fflags); + error = ufm_get_freq(sc, addr); break; case FM_START: - error = ufm_start(sc, addr, fflags); + error = ufm_start(sc, addr); break; case FM_STOP: - error = ufm_stop(sc, addr, fflags); + error = ufm_stop(sc, addr); break; case FM_GET_STAT: - error = ufm_get_stat(sc, addr, fflags); + error = ufm_get_stat(sc, addr); break; default: error = ENOTTY; break; } - return (usb_cdev_lock(dev, fflags, error)); + return (error); } ==== //depot/projects/usb/src/sys/modules/usb2/misc/Makefile#2 (text+ko) ==== @@ -1,0 +1,14 @@ +S= ${.CURDIR}/../../.. + +.PATH: $S/dev/usb2/misc + +KMOD= usb2_misc +SRCS= +SRCS+= bus_if.h usb2_if.h device_if.h vnode_if.h +SRCS+= opt_usb.h opt_bus.h opt_netgraph.h + +SRCS+= usb2_misc.c +SRCS+= ufm2.c +SRCS+= udbp2.c + +.include <bsd.kmod.mk>
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200807032036.m63KaPQp016655>