ufoma.c (233774) | ufoma.c (239180) |
---|---|
1/* $NetBSD: umodem.c,v 1.45 2002/09/23 05:51:23 simonb Exp $ */ 2 3#include <sys/cdefs.h> | 1/* $NetBSD: umodem.c,v 1.45 2002/09/23 05:51:23 simonb Exp $ */ 2 3#include <sys/cdefs.h> |
4__FBSDID("$FreeBSD: head/sys/dev/usb/serial/ufoma.c 233774 2012-04-02 10:50:42Z hselasky $"); | 4__FBSDID("$FreeBSD: head/sys/dev/usb/serial/ufoma.c 239180 2012-08-10 15:29:41Z hselasky $"); |
5#define UFOMA_HANDSFREE 6/*- 7 * Copyright (c) 2005, Takanori Watanabe 8 * Copyright (c) 2003, M. Warner Losh <imp@FreeBSD.org>. 9 * All rights reserved. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions --- 185 unchanged lines hidden (view full) --- 198 uint8_t sc_name[16]; 199}; 200 201/* prototypes */ 202 203static device_probe_t ufoma_probe; 204static device_attach_t ufoma_attach; 205static device_detach_t ufoma_detach; | 5#define UFOMA_HANDSFREE 6/*- 7 * Copyright (c) 2005, Takanori Watanabe 8 * Copyright (c) 2003, M. Warner Losh <imp@FreeBSD.org>. 9 * All rights reserved. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions --- 185 unchanged lines hidden (view full) --- 198 uint8_t sc_name[16]; 199}; 200 201/* prototypes */ 202 203static device_probe_t ufoma_probe; 204static device_attach_t ufoma_attach; 205static device_detach_t ufoma_detach; |
206static device_free_softc_t ufoma_free_softc; |
|
206 207static usb_callback_t ufoma_ctrl_read_callback; 208static usb_callback_t ufoma_ctrl_write_callback; 209static usb_callback_t ufoma_intr_callback; 210static usb_callback_t ufoma_bulk_write_callback; 211static usb_callback_t ufoma_bulk_read_callback; 212 213static void *ufoma_get_intconf(struct usb_config_descriptor *, 214 struct usb_interface_descriptor *, uint8_t, uint8_t); 215static void ufoma_cfg_link_state(struct ufoma_softc *); 216static void ufoma_cfg_activate_state(struct ufoma_softc *, uint16_t); | 207 208static usb_callback_t ufoma_ctrl_read_callback; 209static usb_callback_t ufoma_ctrl_write_callback; 210static usb_callback_t ufoma_intr_callback; 211static usb_callback_t ufoma_bulk_write_callback; 212static usb_callback_t ufoma_bulk_read_callback; 213 214static void *ufoma_get_intconf(struct usb_config_descriptor *, 215 struct usb_interface_descriptor *, uint8_t, uint8_t); 216static void ufoma_cfg_link_state(struct ufoma_softc *); 217static void ufoma_cfg_activate_state(struct ufoma_softc *, uint16_t); |
218static void ufoma_free(struct ucom_softc *); |
|
217static void ufoma_cfg_open(struct ucom_softc *); 218static void ufoma_cfg_close(struct ucom_softc *); 219static void ufoma_cfg_set_break(struct ucom_softc *, uint8_t); 220static void ufoma_cfg_get_status(struct ucom_softc *, uint8_t *, 221 uint8_t *); 222static void ufoma_cfg_set_dtr(struct ucom_softc *, uint8_t); 223static void ufoma_cfg_set_rts(struct ucom_softc *, uint8_t); 224static int ufoma_pre_param(struct ucom_softc *, struct termios *); --- 74 unchanged lines hidden (view full) --- 299 .ucom_cfg_open = &ufoma_cfg_open, 300 .ucom_cfg_close = &ufoma_cfg_close, 301 .ucom_pre_param = &ufoma_pre_param, 302 .ucom_start_read = &ufoma_start_read, 303 .ucom_stop_read = &ufoma_stop_read, 304 .ucom_start_write = &ufoma_start_write, 305 .ucom_stop_write = &ufoma_stop_write, 306 .ucom_poll = &ufoma_poll, | 219static void ufoma_cfg_open(struct ucom_softc *); 220static void ufoma_cfg_close(struct ucom_softc *); 221static void ufoma_cfg_set_break(struct ucom_softc *, uint8_t); 222static void ufoma_cfg_get_status(struct ucom_softc *, uint8_t *, 223 uint8_t *); 224static void ufoma_cfg_set_dtr(struct ucom_softc *, uint8_t); 225static void ufoma_cfg_set_rts(struct ucom_softc *, uint8_t); 226static int ufoma_pre_param(struct ucom_softc *, struct termios *); --- 74 unchanged lines hidden (view full) --- 301 .ucom_cfg_open = &ufoma_cfg_open, 302 .ucom_cfg_close = &ufoma_cfg_close, 303 .ucom_pre_param = &ufoma_pre_param, 304 .ucom_start_read = &ufoma_start_read, 305 .ucom_stop_read = &ufoma_stop_read, 306 .ucom_start_write = &ufoma_start_write, 307 .ucom_stop_write = &ufoma_stop_write, 308 .ucom_poll = &ufoma_poll, |
309 .ucom_free = &ufoma_free, |
|
307}; 308 309static device_method_t ufoma_methods[] = { 310 /* Device methods */ 311 DEVMETHOD(device_probe, ufoma_probe), 312 DEVMETHOD(device_attach, ufoma_attach), 313 DEVMETHOD(device_detach, ufoma_detach), | 310}; 311 312static device_method_t ufoma_methods[] = { 313 /* Device methods */ 314 DEVMETHOD(device_probe, ufoma_probe), 315 DEVMETHOD(device_attach, ufoma_attach), 316 DEVMETHOD(device_detach, ufoma_detach), |
314 {0, 0} | 317 DEVMETHOD(device_free_softc, ufoma_free_softc), 318 DEVMETHOD_END |
315}; 316 317static devclass_t ufoma_devclass; 318 319static driver_t ufoma_driver = { 320 .name = "ufoma", 321 .methods = ufoma_methods, 322 .size = sizeof(struct ufoma_softc), --- 57 unchanged lines hidden (view full) --- 380 uint8_t elements; 381 int32_t error; 382 383 sc->sc_udev = uaa->device; 384 sc->sc_dev = dev; 385 sc->sc_unit = device_get_unit(dev); 386 387 mtx_init(&sc->sc_mtx, "ufoma", NULL, MTX_DEF); | 319}; 320 321static devclass_t ufoma_devclass; 322 323static driver_t ufoma_driver = { 324 .name = "ufoma", 325 .methods = ufoma_methods, 326 .size = sizeof(struct ufoma_softc), --- 57 unchanged lines hidden (view full) --- 384 uint8_t elements; 385 int32_t error; 386 387 sc->sc_udev = uaa->device; 388 sc->sc_dev = dev; 389 sc->sc_unit = device_get_unit(dev); 390 391 mtx_init(&sc->sc_mtx, "ufoma", NULL, MTX_DEF); |
392 ucom_ref(&sc->sc_super_ucom); |
|
388 cv_init(&sc->sc_cv, "CWAIT"); 389 390 device_set_usb_desc(dev); 391 392 snprintf(sc->sc_name, sizeof(sc->sc_name), 393 "%s", device_get_nameunit(dev)); 394 395 DPRINTF("\n"); --- 94 unchanged lines hidden (view full) --- 490 491 ucom_detach(&sc->sc_super_ucom, &sc->sc_ucom); 492 usbd_transfer_unsetup(sc->sc_ctrl_xfer, UFOMA_CTRL_ENDPT_MAX); 493 usbd_transfer_unsetup(sc->sc_bulk_xfer, UFOMA_BULK_ENDPT_MAX); 494 495 if (sc->sc_modetable) { 496 free(sc->sc_modetable, M_USBDEV); 497 } | 393 cv_init(&sc->sc_cv, "CWAIT"); 394 395 device_set_usb_desc(dev); 396 397 snprintf(sc->sc_name, sizeof(sc->sc_name), 398 "%s", device_get_nameunit(dev)); 399 400 DPRINTF("\n"); --- 94 unchanged lines hidden (view full) --- 495 496 ucom_detach(&sc->sc_super_ucom, &sc->sc_ucom); 497 usbd_transfer_unsetup(sc->sc_ctrl_xfer, UFOMA_CTRL_ENDPT_MAX); 498 usbd_transfer_unsetup(sc->sc_bulk_xfer, UFOMA_BULK_ENDPT_MAX); 499 500 if (sc->sc_modetable) { 501 free(sc->sc_modetable, M_USBDEV); 502 } |
498 mtx_destroy(&sc->sc_mtx); | |
499 cv_destroy(&sc->sc_cv); 500 501 return (0); 502} 503 | 503 cv_destroy(&sc->sc_cv); 504 505 return (0); 506} 507 |
508UCOM_UNLOAD_DRAIN(ufoma); 509 510static void 511ufoma_free_softc(device_t dev, void *arg) 512{ 513 struct ufoma_softc *sc = arg; 514 515 if (ucom_unref(&sc->sc_super_ucom)) { 516 if (mtx_initialized(&sc->sc_mtx)) 517 mtx_destroy(&sc->sc_mtx); 518 device_free_softc(dev, sc); 519 } 520} 521 522static void 523ufoma_free(struct ucom_softc *ucom) 524{ 525 ufoma_free_softc(NULL, ucom->sc_parent); 526} 527 |
|
504static void * 505ufoma_get_intconf(struct usb_config_descriptor *cd, struct usb_interface_descriptor *id, 506 uint8_t type, uint8_t subtype) 507{ 508 struct usb_descriptor *desc = (void *)id; 509 510 while ((desc = usb_desc_foreach(cd, desc))) { 511 --- 749 unchanged lines hidden --- | 528static void * 529ufoma_get_intconf(struct usb_config_descriptor *cd, struct usb_interface_descriptor *id, 530 uint8_t type, uint8_t subtype) 531{ 532 struct usb_descriptor *desc = (void *)id; 533 534 while ((desc = usb_desc_foreach(cd, desc))) { 535 --- 749 unchanged lines hidden --- |