option.c revision ee53b0ca0153b4f944cb142b5e65c96a1860d765
1/* 2 USB Driver for GSM modems 3 4 Copyright (C) 2005 Matthias Urlichs <smurf@smurf.noris.de> 5 6 This driver is free software; you can redistribute it and/or modify 7 it under the terms of Version 2 of the GNU General Public License as 8 published by the Free Software Foundation. 9 10 Portions copied from the Keyspan driver by Hugh Blemings <hugh@blemings.org> 11 12 History: see the git log. 13 14 Work sponsored by: Sigos GmbH, Germany <info@sigos.de> 15 16 This driver exists because the "normal" serial driver doesn't work too well 17 with GSM modems. Issues: 18 - data loss -- one single Receive URB is not nearly enough 19 - nonstandard flow (Option devices) control 20 - controlling the baud rate doesn't make sense 21 22 This driver is named "option" because the most common device it's 23 used for is a PC-Card (with an internal OHCI-USB interface, behind 24 which the GSM interface sits), made by Option Inc. 25 26 Some of the "one port" devices actually exhibit multiple USB instances 27 on the USB bus. This is not a bug, these ports are used for different 28 device features. 29*/ 30 31#define DRIVER_VERSION "v0.7.2" 32#define DRIVER_AUTHOR "Matthias Urlichs <smurf@smurf.noris.de>" 33#define DRIVER_DESC "USB Driver for GSM modems" 34 35#include <linux/kernel.h> 36#include <linux/jiffies.h> 37#include <linux/errno.h> 38#include <linux/tty.h> 39#include <linux/tty_flip.h> 40#include <linux/module.h> 41#include <linux/bitops.h> 42#include <linux/usb.h> 43#include <linux/usb/serial.h> 44 45/* Function prototypes */ 46static int option_open(struct usb_serial_port *port, struct file *filp); 47static void option_close(struct usb_serial_port *port, struct file *filp); 48static int option_startup(struct usb_serial *serial); 49static void option_shutdown(struct usb_serial *serial); 50static void option_rx_throttle(struct usb_serial_port *port); 51static void option_rx_unthrottle(struct usb_serial_port *port); 52static int option_write_room(struct usb_serial_port *port); 53 54static void option_instat_callback(struct urb *urb); 55 56static int option_write(struct usb_serial_port *port, 57 const unsigned char *buf, int count); 58 59static int option_chars_in_buffer(struct usb_serial_port *port); 60static int option_ioctl(struct usb_serial_port *port, struct file *file, 61 unsigned int cmd, unsigned long arg); 62static void option_set_termios(struct usb_serial_port *port, 63 struct ktermios *old); 64static void option_break_ctl(struct usb_serial_port *port, int break_state); 65static int option_tiocmget(struct usb_serial_port *port, struct file *file); 66static int option_tiocmset(struct usb_serial_port *port, struct file *file, 67 unsigned int set, unsigned int clear); 68static int option_send_setup(struct usb_serial_port *port); 69 70/* Vendor and product IDs */ 71#define OPTION_VENDOR_ID 0x0AF0 72#define OPTION_PRODUCT_COLT 0x5000 73#define OPTION_PRODUCT_RICOLA 0x6000 74#define OPTION_PRODUCT_RICOLA_LIGHT 0x6100 75#define OPTION_PRODUCT_RICOLA_QUAD 0x6200 76#define OPTION_PRODUCT_RICOLA_QUAD_LIGHT 0x6300 77#define OPTION_PRODUCT_RICOLA_NDIS 0x6050 78#define OPTION_PRODUCT_RICOLA_NDIS_LIGHT 0x6150 79#define OPTION_PRODUCT_RICOLA_NDIS_QUAD 0x6250 80#define OPTION_PRODUCT_RICOLA_NDIS_QUAD_LIGHT 0x6350 81#define OPTION_PRODUCT_COBRA 0x6500 82#define OPTION_PRODUCT_COBRA_BUS 0x6501 83#define OPTION_PRODUCT_VIPER 0x6600 84#define OPTION_PRODUCT_VIPER_BUS 0x6601 85#define OPTION_PRODUCT_GT_MAX_READY 0x6701 86#define OPTION_PRODUCT_GT_MAX 0x6711 87#define OPTION_PRODUCT_FUJI_MODEM_LIGHT 0x6721 88#define OPTION_PRODUCT_FUJI_MODEM_GT 0x6741 89#define OPTION_PRODUCT_FUJI_MODEM_EX 0x6761 90#define OPTION_PRODUCT_FUJI_NETWORK_LIGHT 0x6731 91#define OPTION_PRODUCT_FUJI_NETWORK_GT 0x6751 92#define OPTION_PRODUCT_FUJI_NETWORK_EX 0x6771 93#define OPTION_PRODUCT_KOI_MODEM 0x6800 94#define OPTION_PRODUCT_KOI_NETWORK 0x6811 95#define OPTION_PRODUCT_SCORPION_MODEM 0x6901 96#define OPTION_PRODUCT_SCORPION_NETWORK 0x6911 97#define OPTION_PRODUCT_ETNA_MODEM 0x7001 98#define OPTION_PRODUCT_ETNA_NETWORK 0x7011 99#define OPTION_PRODUCT_ETNA_MODEM_LITE 0x7021 100#define OPTION_PRODUCT_ETNA_MODEM_GT 0x7041 101#define OPTION_PRODUCT_ETNA_MODEM_EX 0x7061 102#define OPTION_PRODUCT_ETNA_NETWORK_LITE 0x7031 103#define OPTION_PRODUCT_ETNA_NETWORK_GT 0x7051 104#define OPTION_PRODUCT_ETNA_NETWORK_EX 0x7071 105#define OPTION_PRODUCT_ETNA_KOI_MODEM 0x7100 106#define OPTION_PRODUCT_ETNA_KOI_NETWORK 0x7111 107 108#define HUAWEI_VENDOR_ID 0x12D1 109#define HUAWEI_PRODUCT_E600 0x1001 110#define HUAWEI_PRODUCT_E220 0x1003 111#define HUAWEI_PRODUCT_E220BIS 0x1004 112#define HUAWEI_PRODUCT_E1401 0x1401 113#define HUAWEI_PRODUCT_E1403 0x1403 114#define HUAWEI_PRODUCT_E1405 0x1405 115#define HUAWEI_PRODUCT_E1406 0x1406 116#define HUAWEI_PRODUCT_E1408 0x1408 117#define HUAWEI_PRODUCT_E1409 0x1409 118#define HUAWEI_PRODUCT_E1410 0x1410 119#define HUAWEI_PRODUCT_E1411 0x1411 120#define HUAWEI_PRODUCT_E1412 0x1412 121#define HUAWEI_PRODUCT_E1413 0x1413 122#define HUAWEI_PRODUCT_E1414 0x1414 123#define HUAWEI_PRODUCT_E1415 0x1415 124#define HUAWEI_PRODUCT_E1416 0x1416 125#define HUAWEI_PRODUCT_E1417 0x1417 126#define HUAWEI_PRODUCT_E1418 0x1418 127#define HUAWEI_PRODUCT_E1419 0x1419 128 129#define NOVATELWIRELESS_VENDOR_ID 0x1410 130 131/* MERLIN EVDO PRODUCTS */ 132#define NOVATELWIRELESS_PRODUCT_V640 0x1100 133#define NOVATELWIRELESS_PRODUCT_V620 0x1110 134#define NOVATELWIRELESS_PRODUCT_V740 0x1120 135#define NOVATELWIRELESS_PRODUCT_V720 0x1130 136 137/* MERLIN HSDPA/HSPA PRODUCTS */ 138#define NOVATELWIRELESS_PRODUCT_U730 0x1400 139#define NOVATELWIRELESS_PRODUCT_U740 0x1410 140#define NOVATELWIRELESS_PRODUCT_U870 0x1420 141#define NOVATELWIRELESS_PRODUCT_XU870 0x1430 142#define NOVATELWIRELESS_PRODUCT_X950D 0x1450 143 144/* EXPEDITE PRODUCTS */ 145#define NOVATELWIRELESS_PRODUCT_EV620 0x2100 146#define NOVATELWIRELESS_PRODUCT_ES720 0x2110 147#define NOVATELWIRELESS_PRODUCT_E725 0x2120 148#define NOVATELWIRELESS_PRODUCT_ES620 0x2130 149#define NOVATELWIRELESS_PRODUCT_EU730 0x2400 150#define NOVATELWIRELESS_PRODUCT_EU740 0x2410 151#define NOVATELWIRELESS_PRODUCT_EU870D 0x2420 152 153/* OVATION PRODUCTS */ 154#define NOVATELWIRELESS_PRODUCT_MC727 0x4100 155#define NOVATELWIRELESS_PRODUCT_MC950D 0x4400 156 157/* FUTURE NOVATEL PRODUCTS */ 158#define NOVATELWIRELESS_PRODUCT_EVDO_1 0x6000 159#define NOVATELWIRELESS_PRODUCT_HSPA_1 0x7000 160#define NOVATELWIRELESS_PRODUCT_EMBEDDED_1 0x8000 161#define NOVATELWIRELESS_PRODUCT_GLOBAL_1 0x9000 162#define NOVATELWIRELESS_PRODUCT_EVDO_2 0x6001 163#define NOVATELWIRELESS_PRODUCT_HSPA_2 0x7001 164#define NOVATELWIRELESS_PRODUCT_EMBEDDED_2 0x8001 165#define NOVATELWIRELESS_PRODUCT_GLOBAL_2 0x9001 166 167/* AMOI PRODUCTS */ 168#define AMOI_VENDOR_ID 0x1614 169#define AMOI_PRODUCT_H01 0x0800 170#define AMOI_PRODUCT_H01A 0x7002 171#define AMOI_PRODUCT_H02 0x0802 172 173#define DELL_VENDOR_ID 0x413C 174 175#define KYOCERA_VENDOR_ID 0x0c88 176#define KYOCERA_PRODUCT_KPC680 0x180a 177 178#define ANYDATA_VENDOR_ID 0x16d5 179#define ANYDATA_PRODUCT_ADU_E100A 0x6501 180#define ANYDATA_PRODUCT_ADU_500A 0x6502 181 182#define AXESSTEL_VENDOR_ID 0x1726 183#define AXESSTEL_PRODUCT_MV110H 0x1000 184 185#define ONDA_VENDOR_ID 0x19d2 186#define ONDA_PRODUCT_ET502HS 0x0002 187 188#define BANDRICH_VENDOR_ID 0x1A8D 189#define BANDRICH_PRODUCT_C100_1 0x1002 190#define BANDRICH_PRODUCT_C100_2 0x1003 191 192#define AMOI_VENDOR_ID 0x1614 193#define AMOI_PRODUCT_9508 0x0800 194 195#define QUALCOMM_VENDOR_ID 0x05C6 196 197#define MAXON_VENDOR_ID 0x16d8 198 199#define TELIT_VENDOR_ID 0x1bc7 200#define TELIT_PRODUCT_UC864E 0x1003 201 202static struct usb_device_id option_ids[] = { 203 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COLT) }, 204 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA) }, 205 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_LIGHT) }, 206 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_QUAD) }, 207 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_QUAD_LIGHT) }, 208 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_NDIS) }, 209 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_NDIS_LIGHT) }, 210 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_NDIS_QUAD) }, 211 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_RICOLA_NDIS_QUAD_LIGHT) }, 212 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COBRA) }, 213 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_COBRA_BUS) }, 214 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_VIPER) }, 215 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_VIPER_BUS) }, 216 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_GT_MAX_READY) }, 217 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_GT_MAX) }, 218 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUJI_MODEM_LIGHT) }, 219 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUJI_MODEM_GT) }, 220 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUJI_MODEM_EX) }, 221 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUJI_NETWORK_LIGHT) }, 222 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUJI_NETWORK_GT) }, 223 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_FUJI_NETWORK_EX) }, 224 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_KOI_MODEM) }, 225 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_KOI_NETWORK) }, 226 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_SCORPION_MODEM) }, 227 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_SCORPION_NETWORK) }, 228 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM) }, 229 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_NETWORK) }, 230 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_LITE) }, 231 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_GT) }, 232 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_MODEM_EX) }, 233 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_NETWORK_LITE) }, 234 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_NETWORK_GT) }, 235 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_NETWORK_EX) }, 236 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_MODEM) }, 237 { USB_DEVICE(OPTION_VENDOR_ID, OPTION_PRODUCT_ETNA_KOI_NETWORK) }, 238 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E600) }, 239 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220, 0xff, 0xff, 0xff) }, 240 { USB_DEVICE_AND_INTERFACE_INFO(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E220BIS, 0xff, 0xff, 0xff) }, 241 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1401) }, 242 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1403) }, 243 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1405) }, 244 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1406) }, 245 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1408) }, 246 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1409) }, 247 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1410) }, 248 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1411) }, 249 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1412) }, 250 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1413) }, 251 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1414) }, 252 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1415) }, 253 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1416) }, 254 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1417) }, 255 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1418) }, 256 { USB_DEVICE(HUAWEI_VENDOR_ID, HUAWEI_PRODUCT_E1419) }, 257 { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_9508) }, 258 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V640) }, /* Novatel Merlin V640/XV620 */ 259 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V620) }, /* Novatel Merlin V620/S620 */ 260 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V740) }, /* Novatel Merlin EX720/V740/X720 */ 261 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_V720) }, /* Novatel Merlin V720/S720/PC720 */ 262 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U730) }, /* Novatel U730/U740 (VF version) */ 263 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U740) }, /* Novatel U740 */ 264 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_U870) }, /* Novatel U870 */ 265 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_XU870) }, /* Novatel Merlin XU870 HSDPA/3G */ 266 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_X950D) }, /* Novatel X950D */ 267 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EV620) }, /* Novatel EV620/ES620 CDMA/EV-DO */ 268 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_ES720) }, /* Novatel ES620/ES720/U720/USB720 */ 269 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_E725) }, /* Novatel E725/E726 */ 270 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_ES620) }, /* Novatel Merlin ES620 SM Bus */ 271 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU730) }, /* Novatel EU730 and Vodafone EU740 */ 272 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU740) }, /* Novatel non-Vodafone EU740 */ 273 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EU870D) }, /* Novatel EU850D/EU860D/EU870D */ 274 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC950D) }, /* Novatel MC930D/MC950D */ 275 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_MC727) }, /* Novatel MC727/U727/USB727 */ 276 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_1) }, /* Novatel EVDO product */ 277 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_1) }, /* Novatel HSPA product */ 278 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EMBEDDED_1) }, /* Novatel Embedded product */ 279 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_GLOBAL_1) }, /* Novatel Global product */ 280 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EVDO_2) }, /* Novatel EVDO product */ 281 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_HSPA_2) }, /* Novatel HSPA product */ 282 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_EMBEDDED_2) }, /* Novatel Embedded product */ 283 { USB_DEVICE(NOVATELWIRELESS_VENDOR_ID, NOVATELWIRELESS_PRODUCT_GLOBAL_2) }, /* Novatel Global product */ 284 285 { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01) }, 286 { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H01A) }, 287 { USB_DEVICE(AMOI_VENDOR_ID, AMOI_PRODUCT_H02) }, 288 289 { USB_DEVICE(DELL_VENDOR_ID, 0x8114) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite EV620 CDMA/EV-DO */ 290 { USB_DEVICE(DELL_VENDOR_ID, 0x8115) }, /* Dell Wireless 5500 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */ 291 { USB_DEVICE(DELL_VENDOR_ID, 0x8116) }, /* Dell Wireless 5505 Mobile Broadband HSDPA Mini-Card == Novatel Expedite EU740 HSDPA/3G */ 292 { USB_DEVICE(DELL_VENDOR_ID, 0x8117) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO ExpressCard == Novatel Merlin XV620 CDMA/EV-DO */ 293 { USB_DEVICE(DELL_VENDOR_ID, 0x8118) }, /* Dell Wireless 5510 Mobile Broadband HSDPA ExpressCard == Novatel Merlin XU870 HSDPA/3G */ 294 { USB_DEVICE(DELL_VENDOR_ID, 0x8128) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite E720 CDMA/EV-DO */ 295 { USB_DEVICE(DELL_VENDOR_ID, 0x8129) }, /* Dell Wireless 5700 Mobile Broadband CDMA/EVDO Mini-Card == Novatel Expedite ET620 CDMA/EV-DO */ 296 { USB_DEVICE(DELL_VENDOR_ID, 0x8133) }, /* Dell Wireless 5720 == Novatel EV620 CDMA/EV-DO */ 297 { USB_DEVICE(DELL_VENDOR_ID, 0x8136) }, /* Dell Wireless HSDPA 5520 == Novatel Expedite EU860D */ 298 { USB_DEVICE(DELL_VENDOR_ID, 0x8137) }, /* Dell Wireless HSDPA 5520 */ 299 { USB_DEVICE(DELL_VENDOR_ID, 0x8138) }, /* Dell Wireless 5520 Voda I Mobile Broadband (3G HSDPA) Minicard */ 300 { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_E100A) }, 301 { USB_DEVICE(ANYDATA_VENDOR_ID, ANYDATA_PRODUCT_ADU_500A) }, 302 { USB_DEVICE(AXESSTEL_VENDOR_ID, AXESSTEL_PRODUCT_MV110H) }, 303 { USB_DEVICE(ONDA_VENDOR_ID, ONDA_PRODUCT_ET502HS) }, 304 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_1) }, 305 { USB_DEVICE(BANDRICH_VENDOR_ID, BANDRICH_PRODUCT_C100_2) }, 306 { USB_DEVICE(KYOCERA_VENDOR_ID, KYOCERA_PRODUCT_KPC680) }, 307 { USB_DEVICE(QUALCOMM_VENDOR_ID, 0x6613)}, /* Onda H600/ZTE MF330 */ 308 { USB_DEVICE(MAXON_VENDOR_ID, 0x6280) }, /* BP3-USB & BP3-EXT HSDPA */ 309 { USB_DEVICE(0x19d2, 0x0001) }, /* Telstra NextG CDMA */ 310 { USB_DEVICE(TELIT_VENDOR_ID, TELIT_PRODUCT_UC864E) }, 311 { } /* Terminating entry */ 312}; 313MODULE_DEVICE_TABLE(usb, option_ids); 314 315static struct usb_driver option_driver = { 316 .name = "option", 317 .probe = usb_serial_probe, 318 .disconnect = usb_serial_disconnect, 319 .id_table = option_ids, 320 .no_dynamic_id = 1, 321}; 322 323/* The card has three separate interfaces, which the serial driver 324 * recognizes separately, thus num_port=1. 325 */ 326 327static struct usb_serial_driver option_1port_device = { 328 .driver = { 329 .owner = THIS_MODULE, 330 .name = "option1", 331 }, 332 .description = "GSM modem (1-port)", 333 .usb_driver = &option_driver, 334 .id_table = option_ids, 335 .num_ports = 1, 336 .open = option_open, 337 .close = option_close, 338 .write = option_write, 339 .write_room = option_write_room, 340 .chars_in_buffer = option_chars_in_buffer, 341 .throttle = option_rx_throttle, 342 .unthrottle = option_rx_unthrottle, 343 .ioctl = option_ioctl, 344 .set_termios = option_set_termios, 345 .break_ctl = option_break_ctl, 346 .tiocmget = option_tiocmget, 347 .tiocmset = option_tiocmset, 348 .attach = option_startup, 349 .shutdown = option_shutdown, 350 .read_int_callback = option_instat_callback, 351}; 352 353#ifdef CONFIG_USB_DEBUG 354static int debug; 355#else 356#define debug 0 357#endif 358 359/* per port private data */ 360 361#define N_IN_URB 4 362#define N_OUT_URB 1 363#define IN_BUFLEN 4096 364#define OUT_BUFLEN 128 365 366struct option_port_private { 367 /* Input endpoints and buffer for this port */ 368 struct urb *in_urbs[N_IN_URB]; 369 u8 *in_buffer[N_IN_URB]; 370 /* Output endpoints and buffer for this port */ 371 struct urb *out_urbs[N_OUT_URB]; 372 u8 *out_buffer[N_OUT_URB]; 373 unsigned long out_busy; /* Bit vector of URBs in use */ 374 375 /* Settings for the port */ 376 int rts_state; /* Handshaking pins (outputs) */ 377 int dtr_state; 378 int cts_state; /* Handshaking pins (inputs) */ 379 int dsr_state; 380 int dcd_state; 381 int ri_state; 382 383 unsigned long tx_start_time[N_OUT_URB]; 384}; 385 386/* Functions used by new usb-serial code. */ 387static int __init option_init(void) 388{ 389 int retval; 390 retval = usb_serial_register(&option_1port_device); 391 if (retval) 392 goto failed_1port_device_register; 393 retval = usb_register(&option_driver); 394 if (retval) 395 goto failed_driver_register; 396 397 info(DRIVER_DESC ": " DRIVER_VERSION); 398 399 return 0; 400 401failed_driver_register: 402 usb_serial_deregister (&option_1port_device); 403failed_1port_device_register: 404 return retval; 405} 406 407static void __exit option_exit(void) 408{ 409 usb_deregister (&option_driver); 410 usb_serial_deregister (&option_1port_device); 411} 412 413module_init(option_init); 414module_exit(option_exit); 415 416static void option_rx_throttle(struct usb_serial_port *port) 417{ 418 dbg("%s", __func__); 419} 420 421static void option_rx_unthrottle(struct usb_serial_port *port) 422{ 423 dbg("%s", __func__); 424} 425 426static void option_break_ctl(struct usb_serial_port *port, int break_state) 427{ 428 /* Unfortunately, I don't know how to send a break */ 429 dbg("%s", __func__); 430} 431 432static void option_set_termios(struct usb_serial_port *port, 433 struct ktermios *old_termios) 434{ 435 dbg("%s", __func__); 436 /* Doesn't support option setting */ 437 tty_termios_copy_hw(port->tty->termios, old_termios); 438 option_send_setup(port); 439} 440 441static int option_tiocmget(struct usb_serial_port *port, struct file *file) 442{ 443 unsigned int value; 444 struct option_port_private *portdata; 445 446 portdata = usb_get_serial_port_data(port); 447 448 value = ((portdata->rts_state) ? TIOCM_RTS : 0) | 449 ((portdata->dtr_state) ? TIOCM_DTR : 0) | 450 ((portdata->cts_state) ? TIOCM_CTS : 0) | 451 ((portdata->dsr_state) ? TIOCM_DSR : 0) | 452 ((portdata->dcd_state) ? TIOCM_CAR : 0) | 453 ((portdata->ri_state) ? TIOCM_RNG : 0); 454 455 return value; 456} 457 458static int option_tiocmset(struct usb_serial_port *port, struct file *file, 459 unsigned int set, unsigned int clear) 460{ 461 struct option_port_private *portdata; 462 463 portdata = usb_get_serial_port_data(port); 464 465 /* FIXME: what locks portdata fields ? */ 466 if (set & TIOCM_RTS) 467 portdata->rts_state = 1; 468 if (set & TIOCM_DTR) 469 portdata->dtr_state = 1; 470 471 if (clear & TIOCM_RTS) 472 portdata->rts_state = 0; 473 if (clear & TIOCM_DTR) 474 portdata->dtr_state = 0; 475 return option_send_setup(port); 476} 477 478static int option_ioctl(struct usb_serial_port *port, struct file *file, 479 unsigned int cmd, unsigned long arg) 480{ 481 return -ENOIOCTLCMD; 482} 483 484/* Write */ 485static int option_write(struct usb_serial_port *port, 486 const unsigned char *buf, int count) 487{ 488 struct option_port_private *portdata; 489 int i; 490 int left, todo; 491 struct urb *this_urb = NULL; /* spurious */ 492 int err; 493 494 portdata = usb_get_serial_port_data(port); 495 496 dbg("%s: write (%d chars)", __func__, count); 497 498 i = 0; 499 left = count; 500 for (i=0; left > 0 && i < N_OUT_URB; i++) { 501 todo = left; 502 if (todo > OUT_BUFLEN) 503 todo = OUT_BUFLEN; 504 505 this_urb = portdata->out_urbs[i]; 506 if (test_and_set_bit(i, &portdata->out_busy)) { 507 if (time_before(jiffies, 508 portdata->tx_start_time[i] + 10 * HZ)) 509 continue; 510 usb_unlink_urb(this_urb); 511 continue; 512 } 513 if (this_urb->status != 0) 514 dbg("usb_write %p failed (err=%d)", 515 this_urb, this_urb->status); 516 517 dbg("%s: endpoint %d buf %d", __func__, 518 usb_pipeendpoint(this_urb->pipe), i); 519 520 /* send the data */ 521 memcpy (this_urb->transfer_buffer, buf, todo); 522 this_urb->transfer_buffer_length = todo; 523 524 this_urb->dev = port->serial->dev; 525 err = usb_submit_urb(this_urb, GFP_ATOMIC); 526 if (err) { 527 dbg("usb_submit_urb %p (write bulk) failed " 528 "(%d, has %d)", this_urb, 529 err, this_urb->status); 530 clear_bit(i, &portdata->out_busy); 531 continue; 532 } 533 portdata->tx_start_time[i] = jiffies; 534 buf += todo; 535 left -= todo; 536 } 537 538 count -= left; 539 dbg("%s: wrote (did %d)", __func__, count); 540 return count; 541} 542 543static void option_indat_callback(struct urb *urb) 544{ 545 int err; 546 int endpoint; 547 struct usb_serial_port *port; 548 struct tty_struct *tty; 549 unsigned char *data = urb->transfer_buffer; 550 int status = urb->status; 551 552 dbg("%s: %p", __func__, urb); 553 554 endpoint = usb_pipeendpoint(urb->pipe); 555 port = urb->context; 556 557 if (status) { 558 dbg("%s: nonzero status: %d on endpoint %02x.", 559 __func__, status, endpoint); 560 } else { 561 tty = port->tty; 562 if (urb->actual_length) { 563 tty_buffer_request_room(tty, urb->actual_length); 564 tty_insert_flip_string(tty, data, urb->actual_length); 565 tty_flip_buffer_push(tty); 566 } else { 567 dbg("%s: empty read urb received", __func__); 568 } 569 570 /* Resubmit urb so we continue receiving */ 571 if (port->open_count && status != -ESHUTDOWN) { 572 err = usb_submit_urb(urb, GFP_ATOMIC); 573 if (err) 574 printk(KERN_ERR "%s: resubmit read urb failed. " 575 "(%d)", __func__, err); 576 } 577 } 578 return; 579} 580 581static void option_outdat_callback(struct urb *urb) 582{ 583 struct usb_serial_port *port; 584 struct option_port_private *portdata; 585 int i; 586 587 dbg("%s", __func__); 588 589 port = urb->context; 590 591 usb_serial_port_softint(port); 592 593 portdata = usb_get_serial_port_data(port); 594 for (i = 0; i < N_OUT_URB; ++i) { 595 if (portdata->out_urbs[i] == urb) { 596 smp_mb__before_clear_bit(); 597 clear_bit(i, &portdata->out_busy); 598 break; 599 } 600 } 601} 602 603static void option_instat_callback(struct urb *urb) 604{ 605 int err; 606 int status = urb->status; 607 struct usb_serial_port *port = urb->context; 608 struct option_port_private *portdata = usb_get_serial_port_data(port); 609 struct usb_serial *serial = port->serial; 610 611 dbg("%s", __func__); 612 dbg("%s: urb %p port %p has data %p", __func__,urb,port,portdata); 613 614 if (status == 0) { 615 struct usb_ctrlrequest *req_pkt = 616 (struct usb_ctrlrequest *)urb->transfer_buffer; 617 618 if (!req_pkt) { 619 dbg("%s: NULL req_pkt\n", __func__); 620 return; 621 } 622 if ((req_pkt->bRequestType == 0xA1) && 623 (req_pkt->bRequest == 0x20)) { 624 int old_dcd_state; 625 unsigned char signals = *((unsigned char *) 626 urb->transfer_buffer + 627 sizeof(struct usb_ctrlrequest)); 628 629 dbg("%s: signal x%x", __func__, signals); 630 631 old_dcd_state = portdata->dcd_state; 632 portdata->cts_state = 1; 633 portdata->dcd_state = ((signals & 0x01) ? 1 : 0); 634 portdata->dsr_state = ((signals & 0x02) ? 1 : 0); 635 portdata->ri_state = ((signals & 0x08) ? 1 : 0); 636 637 if (port->tty && !C_CLOCAL(port->tty) && 638 old_dcd_state && !portdata->dcd_state) 639 tty_hangup(port->tty); 640 } else { 641 dbg("%s: type %x req %x", __func__, 642 req_pkt->bRequestType,req_pkt->bRequest); 643 } 644 } else 645 dbg("%s: error %d", __func__, status); 646 647 /* Resubmit urb so we continue receiving IRQ data */ 648 if (status != -ESHUTDOWN) { 649 urb->dev = serial->dev; 650 err = usb_submit_urb(urb, GFP_ATOMIC); 651 if (err) 652 dbg("%s: resubmit intr urb failed. (%d)", 653 __func__, err); 654 } 655} 656 657static int option_write_room(struct usb_serial_port *port) 658{ 659 struct option_port_private *portdata; 660 int i; 661 int data_len = 0; 662 struct urb *this_urb; 663 664 portdata = usb_get_serial_port_data(port); 665 666 667 for (i=0; i < N_OUT_URB; i++) { 668 this_urb = portdata->out_urbs[i]; 669 if (this_urb && !test_bit(i, &portdata->out_busy)) 670 data_len += OUT_BUFLEN; 671 } 672 673 dbg("%s: %d", __func__, data_len); 674 return data_len; 675} 676 677static int option_chars_in_buffer(struct usb_serial_port *port) 678{ 679 struct option_port_private *portdata; 680 int i; 681 int data_len = 0; 682 struct urb *this_urb; 683 684 portdata = usb_get_serial_port_data(port); 685 686 for (i=0; i < N_OUT_URB; i++) { 687 this_urb = portdata->out_urbs[i]; 688 /* FIXME: This locking is insufficient as this_urb may 689 go unused during the test */ 690 if (this_urb && test_bit(i, &portdata->out_busy)) 691 data_len += this_urb->transfer_buffer_length; 692 } 693 dbg("%s: %d", __func__, data_len); 694 return data_len; 695} 696 697static int option_open(struct usb_serial_port *port, struct file *filp) 698{ 699 struct option_port_private *portdata; 700 struct usb_serial *serial = port->serial; 701 int i, err; 702 struct urb *urb; 703 704 portdata = usb_get_serial_port_data(port); 705 706 dbg("%s", __func__); 707 708 /* Set some sane defaults */ 709 portdata->rts_state = 1; 710 portdata->dtr_state = 1; 711 712 /* Reset low level data toggle and start reading from endpoints */ 713 for (i = 0; i < N_IN_URB; i++) { 714 urb = portdata->in_urbs[i]; 715 if (! urb) 716 continue; 717 if (urb->dev != serial->dev) { 718 dbg("%s: dev %p != %p", __func__, 719 urb->dev, serial->dev); 720 continue; 721 } 722 723 /* 724 * make sure endpoint data toggle is synchronized with the 725 * device 726 */ 727 usb_clear_halt(urb->dev, urb->pipe); 728 729 err = usb_submit_urb(urb, GFP_KERNEL); 730 if (err) { 731 dbg("%s: submit urb %d failed (%d) %d", 732 __func__, i, err, 733 urb->transfer_buffer_length); 734 } 735 } 736 737 /* Reset low level data toggle on out endpoints */ 738 for (i = 0; i < N_OUT_URB; i++) { 739 urb = portdata->out_urbs[i]; 740 if (! urb) 741 continue; 742 urb->dev = serial->dev; 743 /* usb_settoggle(urb->dev, usb_pipeendpoint(urb->pipe), 744 usb_pipeout(urb->pipe), 0); */ 745 } 746 747 port->tty->low_latency = 1; 748 749 option_send_setup(port); 750 751 return (0); 752} 753 754static void option_close(struct usb_serial_port *port, struct file *filp) 755{ 756 int i; 757 struct usb_serial *serial = port->serial; 758 struct option_port_private *portdata; 759 760 dbg("%s", __func__); 761 portdata = usb_get_serial_port_data(port); 762 763 portdata->rts_state = 0; 764 portdata->dtr_state = 0; 765 766 if (serial->dev) { 767 mutex_lock(&serial->disc_mutex); 768 if (!serial->disconnected) 769 option_send_setup(port); 770 mutex_unlock(&serial->disc_mutex); 771 772 /* Stop reading/writing urbs */ 773 for (i = 0; i < N_IN_URB; i++) 774 usb_kill_urb(portdata->in_urbs[i]); 775 for (i = 0; i < N_OUT_URB; i++) 776 usb_kill_urb(portdata->out_urbs[i]); 777 } 778 port->tty = NULL; 779} 780 781/* Helper functions used by option_setup_urbs */ 782static struct urb *option_setup_urb(struct usb_serial *serial, int endpoint, 783 int dir, void *ctx, char *buf, int len, 784 void (*callback)(struct urb *)) 785{ 786 struct urb *urb; 787 788 if (endpoint == -1) 789 return NULL; /* endpoint not needed */ 790 791 urb = usb_alloc_urb(0, GFP_KERNEL); /* No ISO */ 792 if (urb == NULL) { 793 dbg("%s: alloc for endpoint %d failed.", __func__, endpoint); 794 return NULL; 795 } 796 797 /* Fill URB using supplied data. */ 798 usb_fill_bulk_urb(urb, serial->dev, 799 usb_sndbulkpipe(serial->dev, endpoint) | dir, 800 buf, len, callback, ctx); 801 802 return urb; 803} 804 805/* Setup urbs */ 806static void option_setup_urbs(struct usb_serial *serial) 807{ 808 int i,j; 809 struct usb_serial_port *port; 810 struct option_port_private *portdata; 811 812 dbg("%s", __func__); 813 814 for (i = 0; i < serial->num_ports; i++) { 815 port = serial->port[i]; 816 portdata = usb_get_serial_port_data(port); 817 818 /* Do indat endpoints first */ 819 for (j = 0; j < N_IN_URB; ++j) { 820 portdata->in_urbs[j] = option_setup_urb (serial, 821 port->bulk_in_endpointAddress, USB_DIR_IN, port, 822 portdata->in_buffer[j], IN_BUFLEN, option_indat_callback); 823 } 824 825 /* outdat endpoints */ 826 for (j = 0; j < N_OUT_URB; ++j) { 827 portdata->out_urbs[j] = option_setup_urb (serial, 828 port->bulk_out_endpointAddress, USB_DIR_OUT, port, 829 portdata->out_buffer[j], OUT_BUFLEN, option_outdat_callback); 830 } 831 } 832} 833 834 835/** send RTS/DTR state to the port. 836 * 837 * This is exactly the same as SET_CONTROL_LINE_STATE from the PSTN 838 * CDC. 839*/ 840static int option_send_setup(struct usb_serial_port *port) 841{ 842 struct usb_serial *serial = port->serial; 843 struct option_port_private *portdata; 844 int ifNum = serial->interface->cur_altsetting->desc.bInterfaceNumber; 845 dbg("%s", __func__); 846 847 portdata = usb_get_serial_port_data(port); 848 849 if (port->tty) { 850 int val = 0; 851 if (portdata->dtr_state) 852 val |= 0x01; 853 if (portdata->rts_state) 854 val |= 0x02; 855 856 return usb_control_msg(serial->dev, 857 usb_rcvctrlpipe(serial->dev, 0), 858 0x22,0x21,val,ifNum,NULL,0,USB_CTRL_SET_TIMEOUT); 859 } 860 861 return 0; 862} 863 864static int option_startup(struct usb_serial *serial) 865{ 866 int i, j, err; 867 struct usb_serial_port *port; 868 struct option_port_private *portdata; 869 u8 *buffer; 870 871 dbg("%s", __func__); 872 873 /* Now setup per port private data */ 874 for (i = 0; i < serial->num_ports; i++) { 875 port = serial->port[i]; 876 portdata = kzalloc(sizeof(*portdata), GFP_KERNEL); 877 if (!portdata) { 878 dbg("%s: kmalloc for option_port_private (%d) failed!.", 879 __func__, i); 880 return (1); 881 } 882 883 for (j = 0; j < N_IN_URB; j++) { 884 buffer = (u8 *)__get_free_page(GFP_KERNEL); 885 if (!buffer) 886 goto bail_out_error; 887 portdata->in_buffer[j] = buffer; 888 } 889 890 for (j = 0; j < N_OUT_URB; j++) { 891 buffer = kmalloc(OUT_BUFLEN, GFP_KERNEL); 892 if (!buffer) 893 goto bail_out_error2; 894 portdata->out_buffer[j] = buffer; 895 } 896 897 usb_set_serial_port_data(port, portdata); 898 899 if (! port->interrupt_in_urb) 900 continue; 901 err = usb_submit_urb(port->interrupt_in_urb, GFP_KERNEL); 902 if (err) 903 dbg("%s: submit irq_in urb failed %d", 904 __func__, err); 905 } 906 907 option_setup_urbs(serial); 908 909 return (0); 910 911bail_out_error2: 912 for (j = 0; j < N_OUT_URB; j++) 913 kfree(portdata->out_buffer[j]); 914bail_out_error: 915 for (j = 0; j < N_IN_URB; j++) 916 if (portdata->in_buffer[j]) 917 free_page((unsigned long)portdata->in_buffer[j]); 918 kfree(portdata); 919 return 1; 920} 921 922static void option_shutdown(struct usb_serial *serial) 923{ 924 int i, j; 925 struct usb_serial_port *port; 926 struct option_port_private *portdata; 927 928 dbg("%s", __func__); 929 930 /* Stop reading/writing urbs */ 931 for (i = 0; i < serial->num_ports; ++i) { 932 port = serial->port[i]; 933 portdata = usb_get_serial_port_data(port); 934 for (j = 0; j < N_IN_URB; j++) 935 usb_kill_urb(portdata->in_urbs[j]); 936 for (j = 0; j < N_OUT_URB; j++) 937 usb_kill_urb(portdata->out_urbs[j]); 938 } 939 940 /* Now free them */ 941 for (i = 0; i < serial->num_ports; ++i) { 942 port = serial->port[i]; 943 portdata = usb_get_serial_port_data(port); 944 945 for (j = 0; j < N_IN_URB; j++) { 946 if (portdata->in_urbs[j]) { 947 usb_free_urb(portdata->in_urbs[j]); 948 free_page((unsigned long)portdata->in_buffer[j]); 949 portdata->in_urbs[j] = NULL; 950 } 951 } 952 for (j = 0; j < N_OUT_URB; j++) { 953 if (portdata->out_urbs[j]) { 954 usb_free_urb(portdata->out_urbs[j]); 955 kfree(portdata->out_buffer[j]); 956 portdata->out_urbs[j] = NULL; 957 } 958 } 959 } 960 961 /* Now free per port private data */ 962 for (i = 0; i < serial->num_ports; i++) { 963 port = serial->port[i]; 964 kfree(usb_get_serial_port_data(port)); 965 } 966} 967 968MODULE_AUTHOR(DRIVER_AUTHOR); 969MODULE_DESCRIPTION(DRIVER_DESC); 970MODULE_VERSION(DRIVER_VERSION); 971MODULE_LICENSE("GPL"); 972 973#ifdef CONFIG_USB_DEBUG 974module_param(debug, bool, S_IRUGO | S_IWUSR); 975MODULE_PARM_DESC(debug, "Debug messages"); 976#endif 977 978