uvscom.c (239180) | uvscom.c (239299) |
---|---|
1/* $NetBSD: usb/uvscom.c,v 1.1 2002/03/19 15:08:42 augustss Exp $ */ 2 3#include <sys/cdefs.h> | 1/* $NetBSD: usb/uvscom.c,v 1.1 2002/03/19 15:08:42 augustss Exp $ */ 2 3#include <sys/cdefs.h> |
4__FBSDID("$FreeBSD: head/sys/dev/usb/serial/uvscom.c 239180 2012-08-10 15:29:41Z hselasky $"); | 4__FBSDID("$FreeBSD: head/sys/dev/usb/serial/uvscom.c 239299 2012-08-15 15:42:57Z hselasky $"); |
5 6/*- 7 * Copyright (c) 2001-2003, 2005 Shunsuke Akiyama <akiyama@jp.FreeBSD.org>. 8 * All rights reserved. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: --- 145 unchanged lines hidden (view full) --- 158 uint8_t sc_unit_status; /* unit status */ 159}; 160 161/* prototypes */ 162 163static device_probe_t uvscom_probe; 164static device_attach_t uvscom_attach; 165static device_detach_t uvscom_detach; | 5 6/*- 7 * Copyright (c) 2001-2003, 2005 Shunsuke Akiyama <akiyama@jp.FreeBSD.org>. 8 * All rights reserved. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: --- 145 unchanged lines hidden (view full) --- 158 uint8_t sc_unit_status; /* unit status */ 159}; 160 161/* prototypes */ 162 163static device_probe_t uvscom_probe; 164static device_attach_t uvscom_attach; 165static device_detach_t uvscom_detach; |
166static device_free_softc_t uvscom_free_softc; | 166static void uvscom_free_softc(struct uvscom_softc *); |
167 168static usb_callback_t uvscom_write_callback; 169static usb_callback_t uvscom_read_callback; 170static usb_callback_t uvscom_intr_callback; 171 172static void uvscom_free(struct ucom_softc *); 173static void uvscom_cfg_set_dtr(struct ucom_softc *, uint8_t); 174static void uvscom_cfg_set_rts(struct ucom_softc *, uint8_t); --- 73 unchanged lines hidden (view full) --- 248 /* SUNTAC Slipper U */ 249 {USB_VPI(USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_VS10U, 0)}, 250}; 251 252static device_method_t uvscom_methods[] = { 253 DEVMETHOD(device_probe, uvscom_probe), 254 DEVMETHOD(device_attach, uvscom_attach), 255 DEVMETHOD(device_detach, uvscom_detach), | 167 168static usb_callback_t uvscom_write_callback; 169static usb_callback_t uvscom_read_callback; 170static usb_callback_t uvscom_intr_callback; 171 172static void uvscom_free(struct ucom_softc *); 173static void uvscom_cfg_set_dtr(struct ucom_softc *, uint8_t); 174static void uvscom_cfg_set_rts(struct ucom_softc *, uint8_t); --- 73 unchanged lines hidden (view full) --- 248 /* SUNTAC Slipper U */ 249 {USB_VPI(USB_VENDOR_SUNTAC, USB_PRODUCT_SUNTAC_VS10U, 0)}, 250}; 251 252static device_method_t uvscom_methods[] = { 253 DEVMETHOD(device_probe, uvscom_probe), 254 DEVMETHOD(device_attach, uvscom_attach), 255 DEVMETHOD(device_detach, uvscom_detach), |
256 DEVMETHOD(device_free_softc, uvscom_free_softc), | |
257 DEVMETHOD_END 258}; 259 260static devclass_t uvscom_devclass; 261 262static driver_t uvscom_driver = { 263 .name = "uvscom", 264 .methods = uvscom_methods, --- 84 unchanged lines hidden (view full) --- 349 /* stop interrupt pipe */ 350 351 if (sc->sc_xfer[UVSCOM_INTR_DT_RD]) 352 usbd_transfer_stop(sc->sc_xfer[UVSCOM_INTR_DT_RD]); 353 354 ucom_detach(&sc->sc_super_ucom, &sc->sc_ucom); 355 usbd_transfer_unsetup(sc->sc_xfer, UVSCOM_N_TRANSFER); 356 | 256 DEVMETHOD_END 257}; 258 259static devclass_t uvscom_devclass; 260 261static driver_t uvscom_driver = { 262 .name = "uvscom", 263 .methods = uvscom_methods, --- 84 unchanged lines hidden (view full) --- 348 /* stop interrupt pipe */ 349 350 if (sc->sc_xfer[UVSCOM_INTR_DT_RD]) 351 usbd_transfer_stop(sc->sc_xfer[UVSCOM_INTR_DT_RD]); 352 353 ucom_detach(&sc->sc_super_ucom, &sc->sc_ucom); 354 usbd_transfer_unsetup(sc->sc_xfer, UVSCOM_N_TRANSFER); 355 |
356 device_claim_softc(dev); 357 358 uvscom_free_softc(sc); 359 |
|
357 return (0); 358} 359 360UCOM_UNLOAD_DRAIN(uvscom); 361 362static void | 360 return (0); 361} 362 363UCOM_UNLOAD_DRAIN(uvscom); 364 365static void |
363uvscom_free_softc(device_t dev, void *arg) | 366uvscom_free_softc(struct uvscom_softc *sc) |
364{ | 367{ |
365 struct uvscom_softc *sc = arg; 366 | |
367 if (ucom_unref(&sc->sc_super_ucom)) { | 368 if (ucom_unref(&sc->sc_super_ucom)) { |
368 if (mtx_initialized(&sc->sc_mtx)) 369 mtx_destroy(&sc->sc_mtx); 370 device_free_softc(dev, sc); | 369 mtx_destroy(&sc->sc_mtx); 370 device_free_softc(sc); |
371 } 372} 373 374static void 375uvscom_free(struct ucom_softc *ucom) 376{ | 371 } 372} 373 374static void 375uvscom_free(struct ucom_softc *ucom) 376{ |
377 uvscom_free_softc(NULL, ucom->sc_parent); | 377 uvscom_free_softc(ucom->sc_parent); |
378} 379 380static void 381uvscom_write_callback(struct usb_xfer *xfer, usb_error_t error) 382{ 383 struct uvscom_softc *sc = usbd_xfer_softc(xfer); 384 struct usb_page_cache *pc; 385 uint32_t actlen; --- 385 unchanged lines hidden --- | 378} 379 380static void 381uvscom_write_callback(struct usb_xfer *xfer, usb_error_t error) 382{ 383 struct uvscom_softc *sc = usbd_xfer_softc(xfer); 384 struct usb_page_cache *pc; 385 uint32_t actlen; --- 385 unchanged lines hidden --- |