uslcom.c (194099) | uslcom.c (194228) |
---|---|
1/* $OpenBSD: uslcom.c,v 1.17 2007/11/24 10:52:12 jsg Exp $ */ 2 3#include <sys/cdefs.h> | 1/* $OpenBSD: uslcom.c,v 1.17 2007/11/24 10:52:12 jsg Exp $ */ 2 3#include <sys/cdefs.h> |
4__FBSDID("$FreeBSD: head/sys/dev/usb/serial/uslcom.c 194099 2009-06-13 04:56:45Z thompsa $"); | 4__FBSDID("$FreeBSD: head/sys/dev/usb/serial/uslcom.c 194228 2009-06-15 01:02:43Z thompsa $"); |
5 6/* 7 * Copyright (c) 2006 Jonathan Gray <jsg@openbsd.org> 8 * 9 * Permission to use, copy, modify, and distribute this software for any 10 * purpose with or without fee is hereby granted, provided that the above 11 * copyright notice and this permission notice appear in all copies. 12 * --- 126 unchanged lines hidden (view full) --- 139 .direction = UE_DIR_IN, 140 .bufsize = USLCOM_BULK_BUF_SIZE, 141 .flags = {.pipe_bof = 1,.short_xfer_ok = 1,}, 142 .callback = &uslcom_read_callback, 143 }, 144}; 145 146static struct ucom_callback uslcom_callback = { | 5 6/* 7 * Copyright (c) 2006 Jonathan Gray <jsg@openbsd.org> 8 * 9 * Permission to use, copy, modify, and distribute this software for any 10 * purpose with or without fee is hereby granted, provided that the above 11 * copyright notice and this permission notice appear in all copies. 12 * --- 126 unchanged lines hidden (view full) --- 139 .direction = UE_DIR_IN, 140 .bufsize = USLCOM_BULK_BUF_SIZE, 141 .flags = {.pipe_bof = 1,.short_xfer_ok = 1,}, 142 .callback = &uslcom_read_callback, 143 }, 144}; 145 146static struct ucom_callback uslcom_callback = { |
147 .usb2_com_cfg_open = &uslcom_open, 148 .usb2_com_cfg_close = &uslcom_close, 149 .usb2_com_cfg_get_status = &uslcom_get_status, 150 .usb2_com_cfg_set_dtr = &uslcom_set_dtr, 151 .usb2_com_cfg_set_rts = &uslcom_set_rts, 152 .usb2_com_cfg_set_break = &uslcom_set_break, 153 .usb2_com_cfg_param = &uslcom_param, 154 .usb2_com_pre_param = &uslcom_pre_param, 155 .usb2_com_start_read = &uslcom_start_read, 156 .usb2_com_stop_read = &uslcom_stop_read, 157 .usb2_com_start_write = &uslcom_start_write, 158 .usb2_com_stop_write = &uslcom_stop_write, | 147 .ucom_cfg_open = &uslcom_open, 148 .ucom_cfg_close = &uslcom_close, 149 .ucom_cfg_get_status = &uslcom_get_status, 150 .ucom_cfg_set_dtr = &uslcom_set_dtr, 151 .ucom_cfg_set_rts = &uslcom_set_rts, 152 .ucom_cfg_set_break = &uslcom_set_break, 153 .ucom_cfg_param = &uslcom_param, 154 .ucom_pre_param = &uslcom_pre_param, 155 .ucom_start_read = &uslcom_start_read, 156 .ucom_stop_read = &uslcom_stop_read, 157 .ucom_start_write = &uslcom_start_write, 158 .ucom_stop_write = &uslcom_stop_write, |
159}; 160 161static const struct usb_device_id uslcom_devs[] = { 162 { USB_VPI(USB_VENDOR_BALTECH, USB_PRODUCT_BALTECH_CARDREADER, 0) }, 163 { USB_VPI(USB_VENDOR_DYNASTREAM, USB_PRODUCT_DYNASTREAM_ANTDEVBOARD, 0) }, 164 { USB_VPI(USB_VENDOR_JABLOTRON, USB_PRODUCT_JABLOTRON_PC60B, 0) }, 165 { USB_VPI(USB_VENDOR_SILABS, USB_PRODUCT_SILABS_ARGUSISP, 0) }, 166 { USB_VPI(USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CRUMB128, 0) }, --- 43 unchanged lines hidden (view full) --- 210 return (ENXIO); 211 } 212 if (uaa->info.bConfigIndex != USLCOM_CONFIG_INDEX) { 213 return (ENXIO); 214 } 215 if (uaa->info.bIfaceIndex != USLCOM_IFACE_INDEX) { 216 return (ENXIO); 217 } | 159}; 160 161static const struct usb_device_id uslcom_devs[] = { 162 { USB_VPI(USB_VENDOR_BALTECH, USB_PRODUCT_BALTECH_CARDREADER, 0) }, 163 { USB_VPI(USB_VENDOR_DYNASTREAM, USB_PRODUCT_DYNASTREAM_ANTDEVBOARD, 0) }, 164 { USB_VPI(USB_VENDOR_JABLOTRON, USB_PRODUCT_JABLOTRON_PC60B, 0) }, 165 { USB_VPI(USB_VENDOR_SILABS, USB_PRODUCT_SILABS_ARGUSISP, 0) }, 166 { USB_VPI(USB_VENDOR_SILABS, USB_PRODUCT_SILABS_CRUMB128, 0) }, --- 43 unchanged lines hidden (view full) --- 210 return (ENXIO); 211 } 212 if (uaa->info.bConfigIndex != USLCOM_CONFIG_INDEX) { 213 return (ENXIO); 214 } 215 if (uaa->info.bIfaceIndex != USLCOM_IFACE_INDEX) { 216 return (ENXIO); 217 } |
218 return (usb2_lookup_id_by_uaa(uslcom_devs, sizeof(uslcom_devs), uaa)); | 218 return (usbd_lookup_id_by_uaa(uslcom_devs, sizeof(uslcom_devs), uaa)); |
219} 220 221static int 222uslcom_attach(device_t dev) 223{ 224 struct usb_attach_arg *uaa = device_get_ivars(dev); 225 struct uslcom_softc *sc = device_get_softc(dev); 226 int error; 227 228 DPRINTFN(11, "\n"); 229 | 219} 220 221static int 222uslcom_attach(device_t dev) 223{ 224 struct usb_attach_arg *uaa = device_get_ivars(dev); 225 struct uslcom_softc *sc = device_get_softc(dev); 226 int error; 227 228 DPRINTFN(11, "\n"); 229 |
230 device_set_usb2_desc(dev); | 230 device_set_usb_desc(dev); |
231 mtx_init(&sc->sc_mtx, "uslcom", NULL, MTX_DEF); 232 233 sc->sc_udev = uaa->device; 234 | 231 mtx_init(&sc->sc_mtx, "uslcom", NULL, MTX_DEF); 232 233 sc->sc_udev = uaa->device; 234 |
235 error = usb2_transfer_setup(uaa->device, | 235 error = usbd_transfer_setup(uaa->device, |
236 &uaa->info.bIfaceIndex, sc->sc_xfer, uslcom_config, 237 USLCOM_N_TRANSFER, sc, &sc->sc_mtx); 238 if (error) { 239 DPRINTF("one or more missing USB endpoints, " | 236 &uaa->info.bIfaceIndex, sc->sc_xfer, uslcom_config, 237 USLCOM_N_TRANSFER, sc, &sc->sc_mtx); 238 if (error) { 239 DPRINTF("one or more missing USB endpoints, " |
240 "error=%s\n", usb2_errstr(error)); | 240 "error=%s\n", usbd_errstr(error)); |
241 goto detach; 242 } 243 /* clear stall at first run */ 244 mtx_lock(&sc->sc_mtx); | 241 goto detach; 242 } 243 /* clear stall at first run */ 244 mtx_lock(&sc->sc_mtx); |
245 usb2_transfer_set_stall(sc->sc_xfer[USLCOM_BULK_DT_WR]); 246 usb2_transfer_set_stall(sc->sc_xfer[USLCOM_BULK_DT_RD]); | 245 usbd_transfer_set_stall(sc->sc_xfer[USLCOM_BULK_DT_WR]); 246 usbd_transfer_set_stall(sc->sc_xfer[USLCOM_BULK_DT_RD]); |
247 mtx_unlock(&sc->sc_mtx); 248 | 247 mtx_unlock(&sc->sc_mtx); 248 |
249 error = usb2_com_attach(&sc->sc_super_ucom, &sc->sc_ucom, 1, sc, | 249 error = ucom_attach(&sc->sc_super_ucom, &sc->sc_ucom, 1, sc, |
250 &uslcom_callback, &sc->sc_mtx); 251 if (error) { 252 goto detach; 253 } 254 return (0); 255 256detach: 257 uslcom_detach(dev); 258 return (ENXIO); 259} 260 261static int 262uslcom_detach(device_t dev) 263{ 264 struct uslcom_softc *sc = device_get_softc(dev); 265 266 DPRINTF("sc=%p\n", sc); 267 | 250 &uslcom_callback, &sc->sc_mtx); 251 if (error) { 252 goto detach; 253 } 254 return (0); 255 256detach: 257 uslcom_detach(dev); 258 return (ENXIO); 259} 260 261static int 262uslcom_detach(device_t dev) 263{ 264 struct uslcom_softc *sc = device_get_softc(dev); 265 266 DPRINTF("sc=%p\n", sc); 267 |
268 usb2_com_detach(&sc->sc_super_ucom, &sc->sc_ucom, 1); 269 usb2_transfer_unsetup(sc->sc_xfer, USLCOM_N_TRANSFER); | 268 ucom_detach(&sc->sc_super_ucom, &sc->sc_ucom, 1); 269 usbd_transfer_unsetup(sc->sc_xfer, USLCOM_N_TRANSFER); |
270 mtx_destroy(&sc->sc_mtx); 271 272 return (0); 273} 274 275static void 276uslcom_open(struct ucom_softc *ucom) 277{ 278 struct uslcom_softc *sc = ucom->sc_parent; 279 struct usb_device_request req; 280 281 req.bmRequestType = USLCOM_WRITE; 282 req.bRequest = USLCOM_UART; 283 USETW(req.wValue, USLCOM_UART_ENABLE); 284 USETW(req.wIndex, USLCOM_PORT_NO); 285 USETW(req.wLength, 0); 286 | 270 mtx_destroy(&sc->sc_mtx); 271 272 return (0); 273} 274 275static void 276uslcom_open(struct ucom_softc *ucom) 277{ 278 struct uslcom_softc *sc = ucom->sc_parent; 279 struct usb_device_request req; 280 281 req.bmRequestType = USLCOM_WRITE; 282 req.bRequest = USLCOM_UART; 283 USETW(req.wValue, USLCOM_UART_ENABLE); 284 USETW(req.wIndex, USLCOM_PORT_NO); 285 USETW(req.wLength, 0); 286 |
287 if (usb2_com_cfg_do_request(sc->sc_udev, &sc->sc_ucom, | 287 if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom, |
288 &req, NULL, 0, 1000)) { 289 DPRINTF("UART enable failed (ignored)\n"); 290 } 291} 292 293static void 294uslcom_close(struct ucom_softc *ucom) 295{ 296 struct uslcom_softc *sc = ucom->sc_parent; 297 struct usb_device_request req; 298 299 req.bmRequestType = USLCOM_WRITE; 300 req.bRequest = USLCOM_UART; 301 USETW(req.wValue, USLCOM_UART_DISABLE); 302 USETW(req.wIndex, USLCOM_PORT_NO); 303 USETW(req.wLength, 0); 304 | 288 &req, NULL, 0, 1000)) { 289 DPRINTF("UART enable failed (ignored)\n"); 290 } 291} 292 293static void 294uslcom_close(struct ucom_softc *ucom) 295{ 296 struct uslcom_softc *sc = ucom->sc_parent; 297 struct usb_device_request req; 298 299 req.bmRequestType = USLCOM_WRITE; 300 req.bRequest = USLCOM_UART; 301 USETW(req.wValue, USLCOM_UART_DISABLE); 302 USETW(req.wIndex, USLCOM_PORT_NO); 303 USETW(req.wLength, 0); 304 |
305 if (usb2_com_cfg_do_request(sc->sc_udev, &sc->sc_ucom, | 305 if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom, |
306 &req, NULL, 0, 1000)) { 307 DPRINTF("UART disable failed (ignored)\n"); 308 } 309} 310 311static void 312uslcom_set_dtr(struct ucom_softc *ucom, uint8_t onoff) 313{ --- 7 unchanged lines hidden (view full) --- 321 ctl |= USLCOM_CTRL_DTR_SET; 322 323 req.bmRequestType = USLCOM_WRITE; 324 req.bRequest = USLCOM_CTRL; 325 USETW(req.wValue, ctl); 326 USETW(req.wIndex, USLCOM_PORT_NO); 327 USETW(req.wLength, 0); 328 | 306 &req, NULL, 0, 1000)) { 307 DPRINTF("UART disable failed (ignored)\n"); 308 } 309} 310 311static void 312uslcom_set_dtr(struct ucom_softc *ucom, uint8_t onoff) 313{ --- 7 unchanged lines hidden (view full) --- 321 ctl |= USLCOM_CTRL_DTR_SET; 322 323 req.bmRequestType = USLCOM_WRITE; 324 req.bRequest = USLCOM_CTRL; 325 USETW(req.wValue, ctl); 326 USETW(req.wIndex, USLCOM_PORT_NO); 327 USETW(req.wLength, 0); 328 |
329 if (usb2_com_cfg_do_request(sc->sc_udev, &sc->sc_ucom, | 329 if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom, |
330 &req, NULL, 0, 1000)) { 331 DPRINTF("Setting DTR failed (ignored)\n"); 332 } 333} 334 335static void 336uslcom_set_rts(struct ucom_softc *ucom, uint8_t onoff) 337{ --- 7 unchanged lines hidden (view full) --- 345 ctl |= USLCOM_CTRL_RTS_SET; 346 347 req.bmRequestType = USLCOM_WRITE; 348 req.bRequest = USLCOM_CTRL; 349 USETW(req.wValue, ctl); 350 USETW(req.wIndex, USLCOM_PORT_NO); 351 USETW(req.wLength, 0); 352 | 330 &req, NULL, 0, 1000)) { 331 DPRINTF("Setting DTR failed (ignored)\n"); 332 } 333} 334 335static void 336uslcom_set_rts(struct ucom_softc *ucom, uint8_t onoff) 337{ --- 7 unchanged lines hidden (view full) --- 345 ctl |= USLCOM_CTRL_RTS_SET; 346 347 req.bmRequestType = USLCOM_WRITE; 348 req.bRequest = USLCOM_CTRL; 349 USETW(req.wValue, ctl); 350 USETW(req.wIndex, USLCOM_PORT_NO); 351 USETW(req.wLength, 0); 352 |
353 if (usb2_com_cfg_do_request(sc->sc_udev, &sc->sc_ucom, | 353 if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom, |
354 &req, NULL, 0, 1000)) { 355 DPRINTF("Setting DTR failed (ignored)\n"); 356 } 357} 358 359static int 360uslcom_pre_param(struct ucom_softc *ucom, struct termios *t) 361{ --- 12 unchanged lines hidden (view full) --- 374 DPRINTF("\n"); 375 376 req.bmRequestType = USLCOM_WRITE; 377 req.bRequest = USLCOM_BAUD_RATE; 378 USETW(req.wValue, USLCOM_BAUD_REF / t->c_ospeed); 379 USETW(req.wIndex, USLCOM_PORT_NO); 380 USETW(req.wLength, 0); 381 | 354 &req, NULL, 0, 1000)) { 355 DPRINTF("Setting DTR failed (ignored)\n"); 356 } 357} 358 359static int 360uslcom_pre_param(struct ucom_softc *ucom, struct termios *t) 361{ --- 12 unchanged lines hidden (view full) --- 374 DPRINTF("\n"); 375 376 req.bmRequestType = USLCOM_WRITE; 377 req.bRequest = USLCOM_BAUD_RATE; 378 USETW(req.wValue, USLCOM_BAUD_REF / t->c_ospeed); 379 USETW(req.wIndex, USLCOM_PORT_NO); 380 USETW(req.wLength, 0); 381 |
382 if (usb2_com_cfg_do_request(sc->sc_udev, &sc->sc_ucom, | 382 if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom, |
383 &req, NULL, 0, 1000)) { 384 DPRINTF("Set baudrate failed (ignored)\n"); 385 } 386 387 if (t->c_cflag & CSTOPB) 388 data = USLCOM_STOP_BITS_2; 389 else 390 data = USLCOM_STOP_BITS_1; --- 20 unchanged lines hidden (view full) --- 411 } 412 413 req.bmRequestType = USLCOM_WRITE; 414 req.bRequest = USLCOM_DATA; 415 USETW(req.wValue, data); 416 USETW(req.wIndex, USLCOM_PORT_NO); 417 USETW(req.wLength, 0); 418 | 383 &req, NULL, 0, 1000)) { 384 DPRINTF("Set baudrate failed (ignored)\n"); 385 } 386 387 if (t->c_cflag & CSTOPB) 388 data = USLCOM_STOP_BITS_2; 389 else 390 data = USLCOM_STOP_BITS_1; --- 20 unchanged lines hidden (view full) --- 411 } 412 413 req.bmRequestType = USLCOM_WRITE; 414 req.bRequest = USLCOM_DATA; 415 USETW(req.wValue, data); 416 USETW(req.wIndex, USLCOM_PORT_NO); 417 USETW(req.wLength, 0); 418 |
419 if (usb2_com_cfg_do_request(sc->sc_udev, &sc->sc_ucom, | 419 if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom, |
420 &req, NULL, 0, 1000)) { 421 DPRINTF("Set format failed (ignored)\n"); 422 } 423 return; 424} 425 426static void 427uslcom_get_status(struct ucom_softc *ucom, uint8_t *lsr, uint8_t *msr) --- 14 unchanged lines hidden (view full) --- 442 uint16_t brk = onoff ? USLCOM_BREAK_ON : USLCOM_BREAK_OFF; 443 444 req.bmRequestType = USLCOM_WRITE; 445 req.bRequest = USLCOM_BREAK; 446 USETW(req.wValue, brk); 447 USETW(req.wIndex, USLCOM_PORT_NO); 448 USETW(req.wLength, 0); 449 | 420 &req, NULL, 0, 1000)) { 421 DPRINTF("Set format failed (ignored)\n"); 422 } 423 return; 424} 425 426static void 427uslcom_get_status(struct ucom_softc *ucom, uint8_t *lsr, uint8_t *msr) --- 14 unchanged lines hidden (view full) --- 442 uint16_t brk = onoff ? USLCOM_BREAK_ON : USLCOM_BREAK_OFF; 443 444 req.bmRequestType = USLCOM_WRITE; 445 req.bRequest = USLCOM_BREAK; 446 USETW(req.wValue, brk); 447 USETW(req.wIndex, USLCOM_PORT_NO); 448 USETW(req.wLength, 0); 449 |
450 if (usb2_com_cfg_do_request(sc->sc_udev, &sc->sc_ucom, | 450 if (ucom_cfg_do_request(sc->sc_udev, &sc->sc_ucom, |
451 &req, NULL, 0, 1000)) { 452 DPRINTF("Set BREAK failed (ignored)\n"); 453 } 454} 455 456static void 457uslcom_write_callback(struct usb_xfer *xfer) 458{ 459 struct uslcom_softc *sc = xfer->priv_sc; 460 uint32_t actlen; 461 462 switch (USB_GET_STATE(xfer)) { 463 case USB_ST_SETUP: 464 case USB_ST_TRANSFERRED: 465tr_setup: | 451 &req, NULL, 0, 1000)) { 452 DPRINTF("Set BREAK failed (ignored)\n"); 453 } 454} 455 456static void 457uslcom_write_callback(struct usb_xfer *xfer) 458{ 459 struct uslcom_softc *sc = xfer->priv_sc; 460 uint32_t actlen; 461 462 switch (USB_GET_STATE(xfer)) { 463 case USB_ST_SETUP: 464 case USB_ST_TRANSFERRED: 465tr_setup: |
466 if (usb2_com_get_data(&sc->sc_ucom, xfer->frbuffers, 0, | 466 if (ucom_get_data(&sc->sc_ucom, xfer->frbuffers, 0, |
467 USLCOM_BULK_BUF_SIZE, &actlen)) { 468 469 DPRINTF("actlen = %d\n", actlen); 470 471 xfer->frlengths[0] = actlen; | 467 USLCOM_BULK_BUF_SIZE, &actlen)) { 468 469 DPRINTF("actlen = %d\n", actlen); 470 471 xfer->frlengths[0] = actlen; |
472 usb2_start_hardware(xfer); | 472 usbd_transfer_submit(xfer); |
473 } 474 return; 475 476 default: /* Error */ 477 if (xfer->error != USB_ERR_CANCELLED) { 478 /* try to clear stall first */ 479 xfer->flags.stall_pipe = 1; 480 goto tr_setup; --- 4 unchanged lines hidden (view full) --- 485 486static void 487uslcom_read_callback(struct usb_xfer *xfer) 488{ 489 struct uslcom_softc *sc = xfer->priv_sc; 490 491 switch (USB_GET_STATE(xfer)) { 492 case USB_ST_TRANSFERRED: | 473 } 474 return; 475 476 default: /* Error */ 477 if (xfer->error != USB_ERR_CANCELLED) { 478 /* try to clear stall first */ 479 xfer->flags.stall_pipe = 1; 480 goto tr_setup; --- 4 unchanged lines hidden (view full) --- 485 486static void 487uslcom_read_callback(struct usb_xfer *xfer) 488{ 489 struct uslcom_softc *sc = xfer->priv_sc; 490 491 switch (USB_GET_STATE(xfer)) { 492 case USB_ST_TRANSFERRED: |
493 usb2_com_put_data(&sc->sc_ucom, xfer->frbuffers, 0, xfer->actlen); | 493 ucom_put_data(&sc->sc_ucom, xfer->frbuffers, 0, xfer->actlen); |
494 495 case USB_ST_SETUP: 496tr_setup: 497 xfer->frlengths[0] = xfer->max_data_length; | 494 495 case USB_ST_SETUP: 496tr_setup: 497 xfer->frlengths[0] = xfer->max_data_length; |
498 usb2_start_hardware(xfer); | 498 usbd_transfer_submit(xfer); |
499 return; 500 501 default: /* Error */ 502 if (xfer->error != USB_ERR_CANCELLED) { 503 /* try to clear stall first */ 504 xfer->flags.stall_pipe = 1; 505 goto tr_setup; 506 } 507 return; 508 } 509} 510 511static void 512uslcom_start_read(struct ucom_softc *ucom) 513{ 514 struct uslcom_softc *sc = ucom->sc_parent; 515 516 /* start read endpoint */ | 499 return; 500 501 default: /* Error */ 502 if (xfer->error != USB_ERR_CANCELLED) { 503 /* try to clear stall first */ 504 xfer->flags.stall_pipe = 1; 505 goto tr_setup; 506 } 507 return; 508 } 509} 510 511static void 512uslcom_start_read(struct ucom_softc *ucom) 513{ 514 struct uslcom_softc *sc = ucom->sc_parent; 515 516 /* start read endpoint */ |
517 usb2_transfer_start(sc->sc_xfer[USLCOM_BULK_DT_RD]); | 517 usbd_transfer_start(sc->sc_xfer[USLCOM_BULK_DT_RD]); |
518} 519 520static void 521uslcom_stop_read(struct ucom_softc *ucom) 522{ 523 struct uslcom_softc *sc = ucom->sc_parent; 524 525 /* stop read endpoint */ | 518} 519 520static void 521uslcom_stop_read(struct ucom_softc *ucom) 522{ 523 struct uslcom_softc *sc = ucom->sc_parent; 524 525 /* stop read endpoint */ |
526 usb2_transfer_stop(sc->sc_xfer[USLCOM_BULK_DT_RD]); | 526 usbd_transfer_stop(sc->sc_xfer[USLCOM_BULK_DT_RD]); |
527} 528 529static void 530uslcom_start_write(struct ucom_softc *ucom) 531{ 532 struct uslcom_softc *sc = ucom->sc_parent; 533 | 527} 528 529static void 530uslcom_start_write(struct ucom_softc *ucom) 531{ 532 struct uslcom_softc *sc = ucom->sc_parent; 533 |
534 usb2_transfer_start(sc->sc_xfer[USLCOM_BULK_DT_WR]); | 534 usbd_transfer_start(sc->sc_xfer[USLCOM_BULK_DT_WR]); |
535} 536 537static void 538uslcom_stop_write(struct ucom_softc *ucom) 539{ 540 struct uslcom_softc *sc = ucom->sc_parent; 541 | 535} 536 537static void 538uslcom_stop_write(struct ucom_softc *ucom) 539{ 540 struct uslcom_softc *sc = ucom->sc_parent; 541 |
542 usb2_transfer_stop(sc->sc_xfer[USLCOM_BULK_DT_WR]); | 542 usbd_transfer_stop(sc->sc_xfer[USLCOM_BULK_DT_WR]); |
543} | 543} |