PERFORCE change 144569 for review
Hans Petter Selasky
hselasky at FreeBSD.org
Thu Jul 3 20:36:26 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=144569
Change 144569 by hselasky at 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>
More information about the p4-projects
mailing list