diff options
Diffstat (limited to 'sys/dev/usb2/serial/uvscom2.c')
-rw-r--r-- | sys/dev/usb2/serial/uvscom2.c | 58 |
1 files changed, 33 insertions, 25 deletions
diff --git a/sys/dev/usb2/serial/uvscom2.c b/sys/dev/usb2/serial/uvscom2.c index fc2fa47..30fd016 100644 --- a/sys/dev/usb2/serial/uvscom2.c +++ b/sys/dev/usb2/serial/uvscom2.c @@ -122,7 +122,15 @@ SYSCTL_INT(_hw_usb2_uvscom, OID_AUTO, debug, CTLFLAG_RW, #define UVSCOM_BULK_BUF_SIZE 1024 /* bytes */ -#define UVSCOM_N_TRANSFER 6 /* units */ +enum { + UVSCOM_BULK_DT_WR, + UVSCOM_BULK_DT_RD, + UVSCOM_BULK_CS_WR, + UVSCOM_BULK_CS_RD, + UVSCOM_INTR_DT_RD, + UVSCOM_INTR_CS_RD, + UVSCOM_N_TRANSFER = 6, +}; struct uvscom_softc { struct usb2_com_super_softc sc_super_ucom; @@ -176,7 +184,7 @@ static uint16_t uvscom_cfg_read_status(struct uvscom_softc *); static const struct usb2_config uvscom_config[UVSCOM_N_TRANSFER] = { - [0] = { + [UVSCOM_BULK_DT_WR] = { .type = UE_BULK, .endpoint = UE_ADDR_ANY, .direction = UE_DIR_OUT, @@ -185,7 +193,7 @@ static const struct usb2_config uvscom_config[UVSCOM_N_TRANSFER] = { .mh.callback = &uvscom_write_callback, }, - [1] = { + [UVSCOM_BULK_DT_RD] = { .type = UE_BULK, .endpoint = UE_ADDR_ANY, .direction = UE_DIR_IN, @@ -194,7 +202,7 @@ static const struct usb2_config uvscom_config[UVSCOM_N_TRANSFER] = { .mh.callback = &uvscom_read_callback, }, - [2] = { + [UVSCOM_BULK_CS_WR] = { .type = UE_CONTROL, .endpoint = 0x00, /* Control pipe */ .direction = UE_DIR_ANY, @@ -204,7 +212,7 @@ static const struct usb2_config uvscom_config[UVSCOM_N_TRANSFER] = { .mh.interval = 50, /* 50ms */ }, - [3] = { + [UVSCOM_BULK_CS_RD] = { .type = UE_CONTROL, .endpoint = 0x00, /* Control pipe */ .direction = UE_DIR_ANY, @@ -214,7 +222,7 @@ static const struct usb2_config uvscom_config[UVSCOM_N_TRANSFER] = { .mh.interval = 50, /* 50ms */ }, - [4] = { + [UVSCOM_INTR_DT_RD] = { .type = UE_INTERRUPT, .endpoint = UE_ADDR_ANY, .direction = UE_DIR_IN, @@ -223,7 +231,7 @@ static const struct usb2_config uvscom_config[UVSCOM_N_TRANSFER] = { .mh.callback = &uvscom_intr_callback, }, - [5] = { + [UVSCOM_INTR_CS_RD] = { .type = UE_CONTROL, .endpoint = 0x00, /* Control pipe */ .direction = UE_DIR_ANY, @@ -339,7 +347,7 @@ uvscom_attach(device_t dev) } /* start interrupt pipe */ mtx_lock(&Giant); - usb2_transfer_start(sc->sc_xfer[4]); + usb2_transfer_start(sc->sc_xfer[UVSCOM_INTR_DT_RD]); mtx_unlock(&Giant); return (0); @@ -358,8 +366,8 @@ uvscom_detach(device_t dev) /* stop interrupt pipe */ - if (sc->sc_xfer[4]) { - usb2_transfer_stop(sc->sc_xfer[4]); + if (sc->sc_xfer[UVSCOM_INTR_DT_RD]) { + usb2_transfer_stop(sc->sc_xfer[UVSCOM_INTR_DT_RD]); } usb2_com_detach(&sc->sc_super_ucom, &sc->sc_ucom, 1); @@ -378,7 +386,7 @@ uvscom_write_callback(struct usb2_xfer *xfer) case USB_ST_SETUP: case USB_ST_TRANSFERRED: if (sc->sc_flag & UVSCOM_FLAG_WRITE_STALL) { - usb2_transfer_start(sc->sc_xfer[2]); + usb2_transfer_start(sc->sc_xfer[UVSCOM_BULK_CS_WR]); return; } if (usb2_com_get_data(&sc->sc_ucom, xfer->frbuffers, 0, @@ -392,7 +400,7 @@ uvscom_write_callback(struct usb2_xfer *xfer) default: /* Error */ if (xfer->error != USB_ERR_CANCELLED) { sc->sc_flag |= UVSCOM_FLAG_WRITE_STALL; - usb2_transfer_start(sc->sc_xfer[2]); + usb2_transfer_start(sc->sc_xfer[UVSCOM_BULK_CS_WR]); } return; @@ -403,7 +411,7 @@ static void uvscom_write_clear_stall_callback(struct usb2_xfer *xfer) { struct uvscom_softc *sc = xfer->priv_sc; - struct usb2_xfer *xfer_other = sc->sc_xfer[0]; + struct usb2_xfer *xfer_other = sc->sc_xfer[UVSCOM_BULK_DT_WR]; if (usb2_clear_stall_callback(xfer, xfer_other)) { DPRINTF("stall cleared\n"); @@ -423,7 +431,7 @@ uvscom_read_callback(struct usb2_xfer *xfer) case USB_ST_SETUP: if (sc->sc_flag & UVSCOM_FLAG_READ_STALL) { - usb2_transfer_start(sc->sc_xfer[3]); + usb2_transfer_start(sc->sc_xfer[UVSCOM_BULK_CS_RD]); } else { xfer->frlengths[0] = xfer->max_data_length; usb2_start_hardware(xfer); @@ -433,7 +441,7 @@ uvscom_read_callback(struct usb2_xfer *xfer) default: /* Error */ if (xfer->error != USB_ERR_CANCELLED) { sc->sc_flag |= UVSCOM_FLAG_READ_STALL; - usb2_transfer_start(sc->sc_xfer[3]); + usb2_transfer_start(sc->sc_xfer[UVSCOM_BULK_CS_RD]); } return; @@ -444,7 +452,7 @@ static void uvscom_read_clear_stall_callback(struct usb2_xfer *xfer) { struct uvscom_softc *sc = xfer->priv_sc; - struct usb2_xfer *xfer_other = sc->sc_xfer[1]; + struct usb2_xfer *xfer_other = sc->sc_xfer[UVSCOM_BULK_DT_RD]; if (usb2_clear_stall_callback(xfer, xfer_other)) { DPRINTF("stall cleared\n"); @@ -492,7 +500,7 @@ uvscom_intr_callback(struct usb2_xfer *xfer) } case USB_ST_SETUP: if (sc->sc_flag & UVSCOM_FLAG_INTR_STALL) { - usb2_transfer_start(sc->sc_xfer[5]); + usb2_transfer_start(sc->sc_xfer[UVSCOM_INTR_CS_RD]); } else { xfer->frlengths[0] = xfer->max_data_length; usb2_start_hardware(xfer); @@ -502,7 +510,7 @@ uvscom_intr_callback(struct usb2_xfer *xfer) default: /* Error */ if (xfer->error != USB_ERR_CANCELLED) { sc->sc_flag |= UVSCOM_FLAG_INTR_STALL; - usb2_transfer_start(sc->sc_xfer[5]); + usb2_transfer_start(sc->sc_xfer[UVSCOM_INTR_CS_RD]); } return; @@ -513,7 +521,7 @@ static void uvscom_intr_clear_stall_callback(struct usb2_xfer *xfer) { struct uvscom_softc *sc = xfer->priv_sc; - struct usb2_xfer *xfer_other = sc->sc_xfer[4]; + struct usb2_xfer *xfer_other = sc->sc_xfer[UVSCOM_INTR_DT_RD]; if (usb2_clear_stall_callback(xfer, xfer_other)) { DPRINTF("stall cleared\n"); @@ -711,7 +719,7 @@ uvscom_start_read(struct usb2_com_softc *ucom) { struct uvscom_softc *sc = ucom->sc_parent; - usb2_transfer_start(sc->sc_xfer[1]); + usb2_transfer_start(sc->sc_xfer[UVSCOM_BULK_DT_RD]); } static void @@ -719,8 +727,8 @@ uvscom_stop_read(struct usb2_com_softc *ucom) { struct uvscom_softc *sc = ucom->sc_parent; - usb2_transfer_stop(sc->sc_xfer[3]); - usb2_transfer_stop(sc->sc_xfer[1]); + usb2_transfer_stop(sc->sc_xfer[UVSCOM_BULK_CS_RD]); + usb2_transfer_stop(sc->sc_xfer[UVSCOM_BULK_DT_RD]); } static void @@ -728,7 +736,7 @@ uvscom_start_write(struct usb2_com_softc *ucom) { struct uvscom_softc *sc = ucom->sc_parent; - usb2_transfer_start(sc->sc_xfer[0]); + usb2_transfer_start(sc->sc_xfer[UVSCOM_BULK_DT_WR]); } static void @@ -736,8 +744,8 @@ uvscom_stop_write(struct usb2_com_softc *ucom) { struct uvscom_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[UVSCOM_BULK_CS_WR]); + usb2_transfer_stop(sc->sc_xfer[UVSCOM_BULK_DT_WR]); } static void |