summaryrefslogtreecommitdiffstats
path: root/sys/dev/usb2/serial/umct2.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/usb2/serial/umct2.c')
-rw-r--r--sys/dev/usb2/serial/umct2.c80
1 files changed, 44 insertions, 36 deletions
diff --git a/sys/dev/usb2/serial/umct2.c b/sys/dev/usb2/serial/umct2.c
index ad0b800..23aea40 100644
--- a/sys/dev/usb2/serial/umct2.c
+++ b/sys/dev/usb2/serial/umct2.c
@@ -80,14 +80,22 @@ __FBSDID("$FreeBSD$");
#define UMCT_IFACE_INDEX 0
#define UMCT_CONFIG_INDEX 1
-#define UMCT_ENDPT_MAX 6 /* units */
+enum {
+ UMCT_BULK_DT_WR,
+ UMCT_BULK_DT_RD,
+ UMCT_BULK_CS_WR,
+ UMCT_BULK_CS_RD,
+ UMCT_INTR_DT_RD,
+ UMCT_INTR_CS_RD,
+ UMCT_N_TRANSFER = 6,
+};
struct umct_softc {
struct usb2_com_super_softc sc_super_ucom;
struct usb2_com_softc sc_ucom;
struct usb2_device *sc_udev;
- struct usb2_xfer *sc_xfer[UMCT_ENDPT_MAX];
+ struct usb2_xfer *sc_xfer[UMCT_N_TRANSFER];
uint32_t sc_unit;
@@ -134,9 +142,9 @@ static void umct_stop_read(struct usb2_com_softc *);
static void umct_start_write(struct usb2_com_softc *);
static void umct_stop_write(struct usb2_com_softc *);
-static const struct usb2_config umct_config[UMCT_ENDPT_MAX] = {
+static const struct usb2_config umct_config[UMCT_N_TRANSFER] = {
- [0] = {
+ [UMCT_BULK_DT_WR] = {
.type = UE_BULK,
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_OUT,
@@ -145,7 +153,7 @@ static const struct usb2_config umct_config[UMCT_ENDPT_MAX] = {
.mh.callback = &umct_write_callback,
},
- [1] = {
+ [UMCT_BULK_DT_RD] = {
.type = UE_INTERRUPT,
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_IN,
@@ -155,7 +163,7 @@ static const struct usb2_config umct_config[UMCT_ENDPT_MAX] = {
.ep_index = 0, /* first interrupt endpoint */
},
- [2] = {
+ [UMCT_BULK_CS_WR] = {
.type = UE_CONTROL,
.endpoint = 0x00, /* Control pipe */
.direction = UE_DIR_ANY,
@@ -166,7 +174,7 @@ static const struct usb2_config umct_config[UMCT_ENDPT_MAX] = {
.mh.interval = 50, /* 50ms */
},
- [3] = {
+ [UMCT_BULK_CS_RD] = {
.type = UE_CONTROL,
.endpoint = 0x00, /* Control pipe */
.direction = UE_DIR_ANY,
@@ -177,7 +185,7 @@ static const struct usb2_config umct_config[UMCT_ENDPT_MAX] = {
.mh.interval = 50, /* 50ms */
},
- [4] = {
+ [UMCT_INTR_DT_RD] = {
.type = UE_INTERRUPT,
.endpoint = UE_ADDR_ANY,
.direction = UE_DIR_IN,
@@ -187,7 +195,7 @@ static const struct usb2_config umct_config[UMCT_ENDPT_MAX] = {
.ep_index = 1, /* second interrupt endpoint */
},
- [5] = {
+ [UMCT_INTR_CS_RD] = {
.type = UE_CONTROL,
.endpoint = 0x00, /* Control pipe */
.direction = UE_DIR_ANY,
@@ -280,7 +288,7 @@ umct_attach(device_t dev)
iface_index = UMCT_IFACE_INDEX;
error = usb2_transfer_setup(uaa->device, &iface_index,
- sc->sc_xfer, umct_config, UMCT_ENDPT_MAX, sc, &Giant);
+ sc->sc_xfer, umct_config, UMCT_N_TRANSFER, sc, &Giant);
if (error) {
device_printf(dev, "allocating USB "
@@ -292,20 +300,20 @@ umct_attach(device_t dev)
* The only way to differentiate it from the real interrupt
* endpoint is to look at the wMaxPacketSize field.
*/
- maxp = UGETW(sc->sc_xfer[1]->pipe->edesc->wMaxPacketSize);
+ maxp = UGETW(sc->sc_xfer[UMCT_BULK_DT_RD]->pipe->edesc->wMaxPacketSize);
if (maxp == 0x2) {
/* guessed wrong - switch around endpoints */
- struct usb2_xfer *temp = sc->sc_xfer[4];
+ struct usb2_xfer *temp = sc->sc_xfer[UMCT_INTR_DT_RD];
- sc->sc_xfer[4] = sc->sc_xfer[1];
- sc->sc_xfer[1] = temp;
+ sc->sc_xfer[UMCT_INTR_DT_RD] = sc->sc_xfer[UMCT_BULK_DT_RD];
+ sc->sc_xfer[UMCT_BULK_DT_RD] = temp;
- sc->sc_xfer[1]->callback = &umct_read_callback;
- sc->sc_xfer[4]->callback = &umct_intr_callback;
+ sc->sc_xfer[UMCT_BULK_DT_RD]->callback = &umct_read_callback;
+ sc->sc_xfer[UMCT_INTR_DT_RD]->callback = &umct_intr_callback;
}
- sc->sc_obufsize = sc->sc_xfer[0]->max_data_length;
+ sc->sc_obufsize = sc->sc_xfer[UMCT_BULK_DT_WR]->max_data_length;
if (uaa->info.idProduct == USB_PRODUCT_MCT_SITECOM_USB232) {
if (sc->sc_obufsize > 16) {
@@ -331,7 +339,7 @@ umct_detach(device_t dev)
usb2_com_detach(&sc->sc_super_ucom, &sc->sc_ucom, 1);
- usb2_transfer_unsetup(sc->sc_xfer, UMCT_ENDPT_MAX);
+ usb2_transfer_unsetup(sc->sc_xfer, UMCT_N_TRANSFER);
return (0);
}
@@ -373,7 +381,7 @@ static void
umct_intr_clear_stall_callback(struct usb2_xfer *xfer)
{
struct umct_softc *sc = xfer->priv_sc;
- struct usb2_xfer *xfer_other = sc->sc_xfer[4];
+ struct usb2_xfer *xfer_other = sc->sc_xfer[UMCT_INTR_DT_RD];
if (usb2_clear_stall_callback(xfer, xfer_other)) {
DPRINTF("stall cleared\n");
@@ -404,7 +412,7 @@ umct_intr_callback(struct usb2_xfer *xfer)
case USB_ST_SETUP:
tr_setup:
if (sc->sc_flags & UMCT_FLAG_INTR_STALL) {
- usb2_transfer_start(sc->sc_xfer[5]);
+ usb2_transfer_start(sc->sc_xfer[UMCT_INTR_CS_RD]);
} else {
xfer->frlengths[0] = xfer->max_data_length;
usb2_start_hardware(xfer);
@@ -415,7 +423,7 @@ tr_setup:
if (xfer->error != USB_ERR_CANCELLED) {
/* start clear stall */
sc->sc_flags |= UMCT_FLAG_INTR_STALL;
- usb2_transfer_start(sc->sc_xfer[5]);
+ usb2_transfer_start(sc->sc_xfer[UMCT_INTR_CS_RD]);
}
return;
@@ -553,10 +561,10 @@ umct_start_read(struct usb2_com_softc *ucom)
struct umct_softc *sc = ucom->sc_parent;
/* start interrupt endpoint */
- usb2_transfer_start(sc->sc_xfer[4]);
+ usb2_transfer_start(sc->sc_xfer[UMCT_INTR_DT_RD]);
/* start read endpoint */
- usb2_transfer_start(sc->sc_xfer[1]);
+ usb2_transfer_start(sc->sc_xfer[UMCT_BULK_DT_RD]);
}
static void
@@ -565,12 +573,12 @@ umct_stop_read(struct usb2_com_softc *ucom)
struct umct_softc *sc = ucom->sc_parent;
/* stop interrupt endpoint */
- usb2_transfer_stop(sc->sc_xfer[5]);
- usb2_transfer_stop(sc->sc_xfer[4]);
+ usb2_transfer_stop(sc->sc_xfer[UMCT_INTR_CS_RD]);
+ usb2_transfer_stop(sc->sc_xfer[UMCT_INTR_DT_RD]);
/* stop read endpoint */
- usb2_transfer_stop(sc->sc_xfer[3]);
- usb2_transfer_stop(sc->sc_xfer[1]);
+ usb2_transfer_stop(sc->sc_xfer[UMCT_BULK_CS_RD]);
+ usb2_transfer_stop(sc->sc_xfer[UMCT_BULK_DT_RD]);
}
static void
@@ -578,7 +586,7 @@ umct_start_write(struct usb2_com_softc *ucom)
{
struct umct_softc *sc = ucom->sc_parent;
- usb2_transfer_start(sc->sc_xfer[0]);
+ usb2_transfer_start(sc->sc_xfer[UMCT_BULK_DT_WR]);
}
static void
@@ -586,8 +594,8 @@ umct_stop_write(struct usb2_com_softc *ucom)
{
struct umct_softc *sc = ucom->sc_parent;
- usb2_transfer_stop(sc->sc_xfer[2]);
- usb2_transfer_stop(sc->sc_xfer[0]);
+ usb2_transfer_stop(sc->sc_xfer[UMCT_BULK_CS_WR]);
+ usb2_transfer_stop(sc->sc_xfer[UMCT_BULK_DT_WR]);
}
static void
@@ -600,7 +608,7 @@ umct_write_callback(struct usb2_xfer *xfer)
case USB_ST_SETUP:
case USB_ST_TRANSFERRED:
if (sc->sc_flags & UMCT_FLAG_WRITE_STALL) {
- usb2_transfer_start(sc->sc_xfer[2]);
+ usb2_transfer_start(sc->sc_xfer[UMCT_BULK_CS_WR]);
return;
}
if (usb2_com_get_data(&sc->sc_ucom, xfer->frbuffers, 0,
@@ -614,7 +622,7 @@ umct_write_callback(struct usb2_xfer *xfer)
default: /* Error */
if (xfer->error != USB_ERR_CANCELLED) {
sc->sc_flags |= UMCT_FLAG_WRITE_STALL;
- usb2_transfer_start(sc->sc_xfer[2]);
+ usb2_transfer_start(sc->sc_xfer[UMCT_BULK_CS_WR]);
}
return;
@@ -625,7 +633,7 @@ static void
umct_write_clear_stall_callback(struct usb2_xfer *xfer)
{
struct umct_softc *sc = xfer->priv_sc;
- struct usb2_xfer *xfer_other = sc->sc_xfer[0];
+ struct usb2_xfer *xfer_other = sc->sc_xfer[UMCT_BULK_DT_WR];
if (usb2_clear_stall_callback(xfer, xfer_other)) {
DPRINTF("stall cleared\n");
@@ -646,7 +654,7 @@ umct_read_callback(struct usb2_xfer *xfer)
case USB_ST_SETUP:
if (sc->sc_flags & UMCT_FLAG_READ_STALL) {
- usb2_transfer_start(sc->sc_xfer[3]);
+ usb2_transfer_start(sc->sc_xfer[UMCT_BULK_CS_RD]);
} else {
xfer->frlengths[0] = xfer->max_data_length;
usb2_start_hardware(xfer);
@@ -656,7 +664,7 @@ umct_read_callback(struct usb2_xfer *xfer)
default: /* Error */
if (xfer->error != USB_ERR_CANCELLED) {
sc->sc_flags |= UMCT_FLAG_READ_STALL;
- usb2_transfer_start(sc->sc_xfer[3]);
+ usb2_transfer_start(sc->sc_xfer[UMCT_BULK_CS_RD]);
}
return;
@@ -667,7 +675,7 @@ static void
umct_read_clear_stall_callback(struct usb2_xfer *xfer)
{
struct umct_softc *sc = xfer->priv_sc;
- struct usb2_xfer *xfer_other = sc->sc_xfer[1];
+ struct usb2_xfer *xfer_other = sc->sc_xfer[UMCT_BULK_DT_RD];
if (usb2_clear_stall_callback(xfer, xfer_other)) {
DPRINTF("stall cleared\n");
OpenPOWER on IntegriCloud