34 #include <linux/kernel.h>
35 #include <linux/errno.h>
37 #include <linux/slab.h>
38 #include <linux/tty.h>
39 #include <linux/serial.h>
42 #include <linux/module.h>
47 #include <asm/byteorder.h>
48 #include <asm/unaligned.h>
49 #include <linux/list.h>
54 #define DRIVER_AUTHOR "Armin Fuerst, Pavel Machek, Johannes Erdfelt, Vojtech Pavlik, David Kubicek, Johan Hovold"
55 #define DRIVER_DESC "USB Abstract Control Model driver for USB modems and ISDN adapters"
57 static struct usb_driver acm_driver;
71 static struct acm *acm_get_by_index(
unsigned index)
76 acm = acm_table[
index];
83 tty_port_get(&acm->
port);
94 static int acm_alloc_minor(
struct acm *acm)
100 if (!acm_table[minor]) {
101 acm_table[
minor] = acm;
111 static void acm_release_minor(
struct acm *acm)
122 static int acm_ctrl_msg(
struct acm *acm,
int request,
int value,
127 acm->
control->altsetting[0].desc.bInterfaceNumber,
130 "%s - rq 0x%02x, val %#x, len %#x, result %d\n",
131 __func__, request, value, len, retval);
132 return retval < 0 ? retval : 0;
138 #define acm_set_control(acm, control) \
139 acm_ctrl_msg(acm, USB_CDC_REQ_SET_CONTROL_LINE_STATE, control, NULL, 0)
140 #define acm_set_line(acm, line) \
141 acm_ctrl_msg(acm, USB_CDC_REQ_SET_LINE_CODING, 0, line, sizeof *(line))
142 #define acm_send_break(acm, ms) \
143 acm_ctrl_msg(acm, USB_CDC_REQ_SEND_BREAK, ms, NULL, 0)
150 static int acm_wb_alloc(
struct acm *acm)
169 static int acm_wb_is_avail(
struct acm *acm)
176 for (i = 0; i <
ACM_NW; i++)
178 spin_unlock_irqrestore(&acm->
write_lock, flags);
185 static void acm_write_done(
struct acm *acm,
struct acm_wb *
wb)
189 usb_autopm_put_interface_async(acm->
control);
198 static int acm_start_wb(
struct acm *acm,
struct acm_wb *
wb)
204 wb->
urb->transfer_buffer = wb->
buf;
205 wb->
urb->transfer_dma = wb->
dmah;
206 wb->
urb->transfer_buffer_length = wb->
len;
212 "%s - usb_submit_urb(write bulk) failed: %d\n",
214 acm_write_done(acm, wb);
219 static int acm_write_start(
struct acm *acm,
int wbn)
228 spin_unlock_irqrestore(&acm->
write_lock, flags);
232 dev_vdbg(&acm->
data->dev,
"%s - susp_count %d\n", __func__,
234 usb_autopm_get_interface_async(acm->
control);
239 usb_autopm_put_interface_async(acm->
control);
240 spin_unlock_irqrestore(&acm->
write_lock, flags);
243 usb_mark_last_busy(acm->
dev);
245 rc = acm_start_wb(acm, wb);
246 spin_unlock_irqrestore(&acm->
write_lock, flags);
258 struct acm *acm = usb_get_intfdata(intf);
264 static ssize_t show_country_codes
268 struct acm *acm = usb_get_intfdata(intf);
276 static ssize_t show_country_rel_date
280 struct acm *acm = usb_get_intfdata(intf);
291 static void acm_ctrl_irq(
struct urb *
urb)
293 struct acm *acm = urb->context;
310 "%s - urb shutting down with status: %d\n",
315 "%s - nonzero urb status received: %d\n",
320 usb_mark_last_busy(acm->
dev);
322 data = (
unsigned char *)(dr + 1);
331 newctrl = get_unaligned_le16(data);
337 "%s - calling hangup\n", __func__);
346 "%s - input control lines: dcd%c dsr%c break%c "
347 "ring%c framing%c parity%c overrun%c\n",
360 "%s - unknown notification %d received: index %d "
361 "len %d data0 %d data1 %d\n",
364 dr->
wLength, data[0], data[1]);
374 static int acm_submit_read_urb(
struct acm *acm,
int index,
gfp_t mem_flags)
381 dev_vdbg(&acm->
data->dev,
"%s - urb %d\n", __func__, index);
387 "%s - usb_submit_urb failed: %d\n",
397 static int acm_submit_read_urbs(
struct acm *acm,
gfp_t mem_flags)
403 res = acm_submit_read_urb(acm, i, mem_flags);
411 static void acm_process_read_urb(
struct acm *acm,
struct urb *urb)
415 if (!urb->actual_length)
422 tty_insert_flip_string(tty, urb->transfer_buffer, urb->actual_length);
428 static void acm_read_bulk_callback(
struct urb *urb)
434 dev_vdbg(&acm->
data->dev,
"%s - urb %d, len %d\n", __func__,
435 rb->
index, urb->actual_length);
439 dev_dbg(&acm->
data->dev,
"%s - disconnected\n", __func__);
442 usb_mark_last_busy(acm->
dev);
445 dev_dbg(&acm->
data->dev,
"%s - non-zero urb status: %d\n",
446 __func__, urb->status);
449 acm_process_read_urb(acm, urb);
455 spin_unlock_irqrestore(&acm->
read_lock, flags);
458 spin_unlock_irqrestore(&acm->
read_lock, flags);
463 static void acm_write_bulk(
struct urb *urb)
465 struct acm_wb *wb = urb->context;
469 if (urb->status || (urb->actual_length != urb->transfer_buffer_length))
470 dev_vdbg(&acm->
data->dev,
"%s - len %d/%d, status %d\n",
473 urb->transfer_buffer_length,
477 acm_write_done(acm, wb);
478 spin_unlock_irqrestore(&acm->
write_lock, flags);
507 acm = acm_get_by_index(tty->
index);
513 goto error_init_termios;
524 static int acm_tty_open(
struct tty_struct *tty,
struct file *filp)
544 retval = usb_autopm_get_interface(acm->
control);
546 goto error_get_interface;
553 acm->
control->needs_remote_wakeup = 1;
558 "%s - usb_submit_urb(ctrl irq) failed\n", __func__);
559 goto error_submit_urb;
565 goto error_set_control;
567 usb_autopm_put_interface(acm->
control);
578 goto error_submit_read_urbs;
584 error_submit_read_urbs:
590 usb_autopm_put_interface(acm->
control);
597 static void acm_port_destruct(
struct tty_port *port)
604 acm_release_minor(acm);
610 static void acm_port_shutdown(
struct tty_port *port)
619 usb_autopm_get_interface(acm->
control);
622 for (i = 0; i <
ACM_NW; i++)
626 acm->
control->needs_remote_wakeup = 0;
627 usb_autopm_put_interface(acm->
control);
632 static void acm_tty_cleanup(
struct tty_struct *tty)
639 static void acm_tty_hangup(
struct tty_struct *tty)
646 static void acm_tty_close(
struct tty_struct *tty,
struct file *filp)
653 static int acm_tty_write(
struct tty_struct *tty,
654 const unsigned char *buf,
int count)
665 dev_vdbg(&acm->
data->dev,
"%s - count %d\n", __func__, count);
668 wbn = acm_wb_alloc(acm);
670 spin_unlock_irqrestore(&acm->
write_lock, flags);
676 dev_vdbg(&acm->
data->dev,
"%s - write %d\n", __func__, count);
679 spin_unlock_irqrestore(&acm->
write_lock, flags);
681 stat = acm_write_start(acm, wbn);
687 static int acm_tty_write_room(
struct tty_struct *tty)
694 return acm_wb_is_avail(acm) ? acm->
writesize : 0;
697 static int acm_tty_chars_in_buffer(
struct tty_struct *tty)
709 return (ACM_NW - acm_wb_is_avail(acm)) * acm->
writesize;
712 static void acm_tty_throttle(
struct tty_struct *tty)
721 static void acm_tty_unthrottle(
struct tty_struct *tty)
724 unsigned int was_throttled;
748 static int acm_tty_tiocmget(
struct tty_struct *tty)
760 static int acm_tty_tiocmset(
struct tty_struct *tty,
761 unsigned int set,
unsigned int clear)
764 unsigned int newctrl;
772 newctrl = (newctrl & ~clear) |
set;
790 tmp.close_delay = acm->
port.close_delay / 10;
793 acm->
port.closing_wait / 10;
801 static int set_serial_info(
struct acm *acm,
811 close_delay = new_serial.close_delay * 10;
818 if ((close_delay != acm->
port.close_delay) ||
819 (closing_wait != acm->
port.closing_wait))
832 static int acm_tty_ioctl(
struct tty_struct *tty,
833 unsigned int cmd,
unsigned long arg)
840 rv = get_serial_info(acm, (
struct serial_struct __user *) arg);
843 rv = set_serial_info(acm, (
struct serial_struct __user *) arg);
850 static const __u32 acm_tty_speed[] = {
851 0, 50, 75, 110, 134, 150, 200, 300, 600,
852 1200, 1800, 2400, 4800, 9600, 19200, 38400,
853 57600, 115200, 230400, 460800, 500000, 576000,
854 921600, 1000000, 1152000, 1500000, 2000000,
855 2500000, 3000000, 3500000, 4000000
858 static void acm_tty_set_termios(
struct tty_struct *tty,
873 newline.bDataBits = 5;
876 newline.bDataBits = 6;
879 newline.bDataBits = 7;
883 newline.bDataBits = 8;
889 if (!newline.dwDTERate) {
890 newline.dwDTERate = acm->
line.dwDTERate;
898 if (
memcmp(&acm->
line, &newline,
sizeof newline)) {
903 newline.bCharFormat, newline.bParityType,
910 .shutdown = acm_port_shutdown,
911 .activate = acm_port_activate,
912 .destruct = acm_port_destruct,
920 static void acm_write_buffers_free(
struct acm *acm)
924 struct usb_device *usb_dev = interface_to_usbdev(acm->
control);
926 for (wb = &acm->
wb[0], i = 0; i < ACM_NW; i++, wb++)
930 static void acm_read_buffers_free(
struct acm *acm)
932 struct usb_device *usb_dev = interface_to_usbdev(acm->
control);
941 static int acm_write_buffers_alloc(
struct acm *acm)
946 for (wb = &acm->
wb[0], i = 0; i < ACM_NW; i++, wb++) {
967 unsigned char *
buffer = intf->altsetting->extra;
968 int buflen = intf->altsetting->extralen;
974 struct usb_device *usb_dev = interface_to_usbdev(intf);
979 u8 ac_management_function = 0;
980 u8 call_management_function = 0;
981 int call_interface_num = -1;
982 int data_interface_num = -1;
983 unsigned long quirks;
989 quirks = (
unsigned long)id->driver_info;
996 goto skip_normal_probe;
1001 dev_err(&intf->dev,
"Weird descriptor references\n");
1006 if (intf->cur_altsetting->endpoint &&
1007 intf->cur_altsetting->endpoint->extralen &&
1008 intf->cur_altsetting->endpoint->extra) {
1010 "Seeking extra descriptors on endpoint\n");
1011 buflen = intf->cur_altsetting->endpoint->extralen;
1012 buffer = intf->cur_altsetting->endpoint->extra;
1015 "Zero length descriptor references\n");
1020 while (buflen > 0) {
1022 dev_err(&intf->dev,
"skipping garbage\n");
1026 switch (buffer[2]) {
1029 dev_err(&intf->dev,
"More than one "
1030 "union descriptor, skipping ...\n");
1041 ac_management_function = buffer[3];
1044 call_management_function = buffer[3];
1045 call_interface_num = buffer[4];
1046 if ((quirks &
NOT_A_MODEM) == 0 && (call_management_function & 3) != 3)
1047 dev_err(&intf->dev,
"This device cannot do calls on its own. It is not a modem.\n");
1053 dev_dbg(&intf->dev,
"Ignoring descriptor: "
1054 "type %02x, length %d\n",
1055 buffer[2], buffer[0]);
1059 buflen -= buffer[0];
1060 buffer += buffer[0];
1063 if (!union_header) {
1064 if (call_interface_num > 0) {
1065 dev_dbg(&intf->dev,
"No union descriptor, using call management descriptor\n");
1070 data_interface =
usb_ifnum_to_if(usb_dev, (data_interface_num = call_interface_num));
1071 control_interface =
intf;
1073 if (intf->cur_altsetting->desc.bNumEndpoints != 3) {
1074 dev_dbg(&intf->dev,
"No union descriptor, giving up\n");
1077 dev_warn(&intf->dev,
"No union descriptor, testing for castrated device\n");
1078 combined_interfaces = 1;
1079 control_interface = data_interface =
intf;
1080 goto look_for_collapsed_interface;
1086 if (!control_interface || !data_interface) {
1087 dev_dbg(&intf->dev,
"no interfaces\n");
1092 if (data_interface_num != call_interface_num)
1093 dev_dbg(&intf->dev,
"Separate call control interface. That is not fully supported.\n");
1095 if (control_interface == data_interface) {
1097 dev_warn(&intf->dev,
"Control and data interfaces are not separated!\n");
1098 combined_interfaces = 1;
1101 if (data_interface->cur_altsetting->desc.bNumEndpoints != 3) {
1102 dev_err(&intf->dev,
"This needs exactly 3 endpoints\n");
1105 look_for_collapsed_interface:
1106 for (i = 0; i < 3; i++) {
1108 ep = &data_interface->cur_altsetting->endpoint[
i].desc;
1110 if (usb_endpoint_is_int_in(ep))
1112 else if (usb_endpoint_is_bulk_out(ep))
1114 else if (usb_endpoint_is_bulk_in(ep))
1119 if (!epctrl || !epread || !epwrite)
1122 goto made_compressed_probe;
1128 if (data_interface->cur_altsetting->desc.bInterfaceClass
1130 if (control_interface->cur_altsetting->desc.bInterfaceClass
1134 "Your device has switched interfaces.\n");
1135 t = control_interface;
1136 control_interface = data_interface;
1144 if (!combined_interfaces && intf != control_interface)
1147 if (!combined_interfaces && usb_interface_claimed(data_interface)) {
1149 dev_dbg(&intf->dev,
"The data interface isn't available\n");
1154 if (data_interface->cur_altsetting->desc.bNumEndpoints < 2 ||
1155 control_interface->cur_altsetting->desc.bNumEndpoints == 0)
1158 epctrl = &control_interface->cur_altsetting->endpoint[0].desc;
1159 epread = &data_interface->cur_altsetting->endpoint[0].desc;
1160 epwrite = &data_interface->cur_altsetting->endpoint[1].desc;
1164 if (!usb_endpoint_dir_in(epread)) {
1168 "The data interface has switched endpoints\n");
1173 made_compressed_probe:
1174 dev_dbg(&intf->dev,
"interfaces are valid\n");
1176 acm = kzalloc(
sizeof(
struct acm),
GFP_KERNEL);
1178 dev_err(&intf->dev,
"out of memory (acm kzalloc)\n");
1182 minor = acm_alloc_minor(acm);
1183 if (minor == ACM_TTY_MINORS) {
1184 dev_err(&intf->dev,
"no more free acm devices\n");
1189 ctrlsize = usb_endpoint_maxp(epctrl);
1190 readsize = usb_endpoint_maxp(epread) *
1193 acm->
writesize = usb_endpoint_maxp(epwrite) * 20;
1194 acm->
control = control_interface;
1195 acm->
data = data_interface;
1198 acm->
ctrl_caps = ac_management_function;
1209 acm->
is_int_ep = usb_endpoint_xfer_int(epread);
1213 acm->
port.ops = &acm_port_ops;
1217 dev_err(&intf->dev,
"out of memory (ctrl buffer alloc)\n");
1222 if (acm_write_buffers_alloc(acm) < 0) {
1223 dev_err(&intf->dev,
"out of memory (write buffer alloc)\n");
1229 dev_err(&intf->dev,
"out of memory (ctrlurb kmalloc)\n");
1232 for (i = 0; i < num_rx_buf; i++) {
1239 dev_err(&intf->dev,
"out of memory "
1240 "(read bufs usb_alloc_coherent)\n");
1249 "out of memory (read urbs usb_alloc_urb)\n");
1252 urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1253 urb->transfer_dma = rb->
dma;
1255 usb_fill_int_urb(urb, acm->
dev,
1259 acm_read_bulk_callback, rb,
1262 usb_fill_bulk_urb(urb, acm->
dev,
1266 acm_read_bulk_callback, rb);
1272 for (i = 0; i <
ACM_NW; i++) {
1278 "out of memory (write urbs usb_alloc_urb)\n");
1282 if (usb_endpoint_xfer_int(epwrite))
1283 usb_fill_int_urb(snd->
urb, usb_dev,
1287 usb_fill_bulk_urb(snd->
urb, usb_dev,
1290 snd->
urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1294 usb_set_intfdata(intf, acm);
1303 goto skip_countries;
1314 goto skip_countries;
1318 &dev_attr_iCountryCodeRelDate);
1324 goto skip_countries;
1329 usb_fill_int_urb(acm->
ctrlurb, usb_dev,
1334 acm->
ctrlurb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1337 dev_info(&intf->dev,
"ttyACM%d: USB ACM device\n", minor);
1342 acm->
line.bDataBits = 8;
1346 usb_set_intfdata(data_interface, acm);
1350 &control_interface->dev);
1354 for (i = 0; i <
ACM_NW; i++)
1357 for (i = 0; i < num_rx_buf; i++)
1359 acm_read_buffers_free(acm);
1362 acm_write_buffers_free(acm);
1366 acm_release_minor(acm);
1372 static void stop_data_traffic(
struct acm *acm)
1379 for (i = 0; i <
ACM_NW; i++)
1389 struct acm *acm = usb_get_intfdata(intf);
1390 struct usb_device *usb_dev = interface_to_usbdev(intf);
1394 dev_dbg(&intf->dev,
"%s\n", __func__);
1404 &dev_attr_wCountryCodes);
1406 &dev_attr_iCountryCodeRelDate);
1419 stop_data_traffic(acm);
1422 for (i = 0; i <
ACM_NW; i++)
1426 acm_write_buffers_free(acm);
1428 acm_read_buffers_free(acm);
1440 struct acm *acm = usb_get_intfdata(intf);
1463 stop_data_traffic(acm);
1470 struct acm *acm = usb_get_intfdata(intf);
1491 acm_start_wb(acm, wb);
1503 rv = acm_submit_read_urbs(acm,
GFP_NOIO);
1512 struct acm *acm = usb_get_intfdata(intf);
1523 return acm_resume(intf);
1528 #define NOKIA_PCSUITE_ACM_INFO(x) \
1529 USB_DEVICE_AND_INTERFACE_INFO(0x0421, x, \
1530 USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1531 USB_CDC_ACM_PROTO_VENDOR)
1533 #define SAMSUNG_PCSUITE_ACM_INFO(x) \
1534 USB_DEVICE_AND_INTERFACE_INFO(0x04e7, x, \
1535 USB_CLASS_COMM, USB_CDC_SUBCLASS_ACM, \
1536 USB_CDC_ACM_PROTO_VENDOR)
1544 { USB_DEVICE(0x0870, 0x0001),
1547 { USB_DEVICE(0x0e8d, 0x0003),
1550 { USB_DEVICE(0x0e8d, 0x3329),
1553 { USB_DEVICE(0x0482, 0x0203),
1556 { USB_DEVICE(0x079b, 0x000f),
1559 { USB_DEVICE(0x0ace, 0x1602),
1562 { USB_DEVICE(0x0ace, 0x1608),
1565 { USB_DEVICE(0x0ace, 0x1611),
1568 { USB_DEVICE(0x22b8, 0x7000),
1571 { USB_DEVICE(0x0803, 0x3095),
1574 { USB_DEVICE(0x0572, 0x1321),
1577 { USB_DEVICE(0x0572, 0x1324),
1580 { USB_DEVICE(0x0572, 0x1328),
1583 { USB_DEVICE(0x22b8, 0x6425),
1586 { USB_DEVICE(0x22b8, 0x2d91) },
1587 { USB_DEVICE(0x22b8, 0x2d92) },
1588 { USB_DEVICE(0x22b8, 0x2d93) },
1589 { USB_DEVICE(0x22b8, 0x2d95) },
1590 { USB_DEVICE(0x22b8, 0x2d96) },
1591 { USB_DEVICE(0x22b8, 0x2d97) },
1592 { USB_DEVICE(0x22b8, 0x2d99) },
1593 { USB_DEVICE(0x22b8, 0x2d9a) },
1595 { USB_DEVICE(0x0572, 0x1329),
1602 { USB_DEVICE(0x0572, 0x1340),
1605 { USB_DEVICE(0x1bbb, 0x0003),
1608 { USB_DEVICE(0x1576, 0x03b1),
1677 { USB_DEVICE(0x03eb, 0x0030), },
1682 { USB_DEVICE(0x0694, 0xff00),
1687 { USB_DEVICE(0x04d8, 0x000b),
1714 static struct usb_driver acm_driver = {
1717 .disconnect = acm_disconnect,
1719 .suspend = acm_suspend,
1720 .resume = acm_resume,
1721 .reset_resume = acm_reset_resume,
1723 .id_table = acm_ids,
1725 .supports_autosuspend = 1,
1727 .disable_hub_initiated_lpm = 1,
1735 .install = acm_tty_install,
1736 .open = acm_tty_open,
1737 .close = acm_tty_close,
1738 .cleanup = acm_tty_cleanup,
1739 .hangup = acm_tty_hangup,
1740 .write = acm_tty_write,
1741 .write_room = acm_tty_write_room,
1742 .ioctl = acm_tty_ioctl,
1743 .throttle = acm_tty_throttle,
1744 .unthrottle = acm_tty_unthrottle,
1745 .chars_in_buffer = acm_tty_chars_in_buffer,
1746 .break_ctl = acm_tty_break_ctl,
1747 .set_termios = acm_tty_set_termios,
1748 .tiocmget = acm_tty_tiocmget,
1749 .tiocmset = acm_tty_tiocmset,
1756 static int __init acm_init(
void)
1759 acm_tty_driver = alloc_tty_driver(ACM_TTY_MINORS);
1760 if (!acm_tty_driver)
1763 acm_tty_driver->
name =
"ttyACM",
1780 retval = usb_register(&acm_driver);
1792 static void __exit acm_exit(
void)