1 /****************************************************************************** 2 * usbatm.c - Generic USB xDSL driver core 3 * 4 * Copyright (C) 2001, Alcatel 5 * Copyright (C) 2003, Duncan Sands, SolNegro, Josep Comas 6 * Copyright (C) 2004, David Woodhouse, Roman Kagan 7 * 8 * This program is free software; you can redistribute it and/or modify it 9 * under the terms of the GNU General Public License as published by the Free 10 * Software Foundation; either version 2 of the License, or (at your option) 11 * any later version. 12 * 13 * This program is distributed in the hope that it will be useful, but WITHOUT 14 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 15 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 16 * more details. 17 * 18 * You should have received a copy of the GNU General Public License along with 19 * this program; if not, write to the Free Software Foundation, Inc., 59 20 * Temple Place - Suite 330, Boston, MA 02111-1307, USA. 21 * 22 ******************************************************************************/ 23 24 /* 25 * Written by Johan Verrept, Duncan Sands (duncan.sands@free.fr) and David Woodhouse 26 * 27 * 1.7+: - See the check-in logs 28 * 29 * 1.6: - No longer opens a connection if the firmware is not loaded 30 * - Added support for the speedtouch 330 31 * - Removed the limit on the number of devices 32 * - Module now autoloads on device plugin 33 * - Merged relevant parts of sarlib 34 * - Replaced the kernel thread with a tasklet 35 * - New packet transmission code 36 * - Changed proc file contents 37 * - Fixed all known SMP races 38 * - Many fixes and cleanups 39 * - Various fixes by Oliver Neukum (oliver@neukum.name) 40 * 41 * 1.5A: - Version for inclusion in 2.5 series kernel 42 * - Modifications by Richard Purdie (rpurdie@rpsys.net) 43 * - made compatible with kernel 2.5.6 onwards by changing 44 * usbatm_usb_send_data_context->urb to a pointer and adding code 45 * to alloc and free it 46 * - remove_wait_queue() added to usbatm_atm_processqueue_thread() 47 * 48 * 1.5: - fixed memory leak when atmsar_decode_aal5 returned NULL. 49 * (reported by stephen.robinson@zen.co.uk) 50 * 51 * 1.4: - changed the spin_lock() under interrupt to spin_lock_irqsave() 52 * - unlink all active send urbs of a vcc that is being closed. 53 * 54 * 1.3.1: - added the version number 55 * 56 * 1.3: - Added multiple send urb support 57 * - fixed memory leak and vcc->tx_inuse starvation bug 58 * when not enough memory left in vcc. 59 * 60 * 1.2: - Fixed race condition in usbatm_usb_send_data() 61 * 1.1: - Turned off packet debugging 62 * 63 */ 64 65 #include "usbatm.h" 66 67 #include <linux/uaccess.h> 68 #include <linux/crc32.h> 69 #include <linux/errno.h> 70 #include <linux/init.h> 71 #include <linux/interrupt.h> 72 #include <linux/kernel.h> 73 #include <linux/module.h> 74 #include <linux/moduleparam.h> 75 #include <linux/netdevice.h> 76 #include <linux/proc_fs.h> 77 #include <linux/sched/signal.h> 78 #include <linux/signal.h> 79 #include <linux/slab.h> 80 #include <linux/stat.h> 81 #include <linux/timer.h> 82 #include <linux/wait.h> 83 #include <linux/kthread.h> 84 #include <linux/ratelimit.h> 85 86 #ifdef VERBOSE_DEBUG 87 static int usbatm_print_packet(struct usbatm_data *instance, const unsigned char *data, int len); 88 #define PACKETDEBUG(arg...) usbatm_print_packet(arg) 89 #define vdbg(arg...) dev_dbg(arg) 90 #else 91 #define PACKETDEBUG(arg...) 92 #define vdbg(arg...) 93 #endif 94 95 #define DRIVER_AUTHOR "Johan Verrept, Duncan Sands <duncan.sands@free.fr>" 96 #define DRIVER_VERSION "1.10" 97 #define DRIVER_DESC "Generic USB ATM/DSL I/O, version " DRIVER_VERSION 98 99 static const char usbatm_driver_name[] = "usbatm"; 100 101 #define UDSL_MAX_RCV_URBS 16 102 #define UDSL_MAX_SND_URBS 16 103 #define UDSL_MAX_BUF_SIZE 65536 104 #define UDSL_DEFAULT_RCV_URBS 4 105 #define UDSL_DEFAULT_SND_URBS 4 106 #define UDSL_DEFAULT_RCV_BUF_SIZE 3392 /* 64 * ATM_CELL_SIZE */ 107 #define UDSL_DEFAULT_SND_BUF_SIZE 3392 /* 64 * ATM_CELL_SIZE */ 108 109 #define ATM_CELL_HEADER (ATM_CELL_SIZE - ATM_CELL_PAYLOAD) 110 111 #define THROTTLE_MSECS 100 /* delay to recover processing after urb submission fails */ 112 113 static unsigned int num_rcv_urbs = UDSL_DEFAULT_RCV_URBS; 114 static unsigned int num_snd_urbs = UDSL_DEFAULT_SND_URBS; 115 static unsigned int rcv_buf_bytes = UDSL_DEFAULT_RCV_BUF_SIZE; 116 static unsigned int snd_buf_bytes = UDSL_DEFAULT_SND_BUF_SIZE; 117 118 module_param(num_rcv_urbs, uint, S_IRUGO); 119 MODULE_PARM_DESC(num_rcv_urbs, 120 "Number of urbs used for reception (range: 0-" 121 __MODULE_STRING(UDSL_MAX_RCV_URBS) ", default: " 122 __MODULE_STRING(UDSL_DEFAULT_RCV_URBS) ")"); 123 124 module_param(num_snd_urbs, uint, S_IRUGO); 125 MODULE_PARM_DESC(num_snd_urbs, 126 "Number of urbs used for transmission (range: 0-" 127 __MODULE_STRING(UDSL_MAX_SND_URBS) ", default: " 128 __MODULE_STRING(UDSL_DEFAULT_SND_URBS) ")"); 129 130 module_param(rcv_buf_bytes, uint, S_IRUGO); 131 MODULE_PARM_DESC(rcv_buf_bytes, 132 "Size of the buffers used for reception, in bytes (range: 1-" 133 __MODULE_STRING(UDSL_MAX_BUF_SIZE) ", default: " 134 __MODULE_STRING(UDSL_DEFAULT_RCV_BUF_SIZE) ")"); 135 136 module_param(snd_buf_bytes, uint, S_IRUGO); 137 MODULE_PARM_DESC(snd_buf_bytes, 138 "Size of the buffers used for transmission, in bytes (range: 1-" 139 __MODULE_STRING(UDSL_MAX_BUF_SIZE) ", default: " 140 __MODULE_STRING(UDSL_DEFAULT_SND_BUF_SIZE) ")"); 141 142 143 /* receive */ 144 145 struct usbatm_vcc_data { 146 /* vpi/vci lookup */ 147 struct list_head list; 148 short vpi; 149 int vci; 150 struct atm_vcc *vcc; 151 152 /* raw cell reassembly */ 153 struct sk_buff *sarb; 154 }; 155 156 157 /* send */ 158 159 struct usbatm_control { 160 struct atm_skb_data atm; 161 u32 len; 162 u32 crc; 163 }; 164 165 #define UDSL_SKB(x) ((struct usbatm_control *)(x)->cb) 166 167 168 /* ATM */ 169 170 static void usbatm_atm_dev_close(struct atm_dev *atm_dev); 171 static int usbatm_atm_open(struct atm_vcc *vcc); 172 static void usbatm_atm_close(struct atm_vcc *vcc); 173 static int usbatm_atm_ioctl(struct atm_dev *atm_dev, unsigned int cmd, void __user *arg); 174 static int usbatm_atm_send(struct atm_vcc *vcc, struct sk_buff *skb); 175 static int usbatm_atm_proc_read(struct atm_dev *atm_dev, loff_t *pos, char *page); 176 177 static struct atmdev_ops usbatm_atm_devops = { 178 .dev_close = usbatm_atm_dev_close, 179 .open = usbatm_atm_open, 180 .close = usbatm_atm_close, 181 .ioctl = usbatm_atm_ioctl, 182 .send = usbatm_atm_send, 183 .proc_read = usbatm_atm_proc_read, 184 .owner = THIS_MODULE, 185 }; 186 187 188 /*********** 189 ** misc ** 190 ***********/ 191 192 static inline unsigned int usbatm_pdu_length(unsigned int length) 193 { 194 length += ATM_CELL_PAYLOAD - 1 + ATM_AAL5_TRAILER; 195 return length - length % ATM_CELL_PAYLOAD; 196 } 197 198 static inline void usbatm_pop(struct atm_vcc *vcc, struct sk_buff *skb) 199 { 200 if (vcc->pop) 201 vcc->pop(vcc, skb); 202 else 203 dev_kfree_skb_any(skb); 204 } 205 206 207 /*********** 208 ** urbs ** 209 ************/ 210 211 static struct urb *usbatm_pop_urb(struct usbatm_channel *channel) 212 { 213 struct urb *urb; 214 215 spin_lock_irq(&channel->lock); 216 if (list_empty(&channel->list)) { 217 spin_unlock_irq(&channel->lock); 218 return NULL; 219 } 220 221 urb = list_entry(channel->list.next, struct urb, urb_list); 222 list_del(&urb->urb_list); 223 spin_unlock_irq(&channel->lock); 224 225 return urb; 226 } 227 228 static int usbatm_submit_urb(struct urb *urb) 229 { 230 struct usbatm_channel *channel = urb->context; 231 int ret; 232 233 /* vdbg("%s: submitting urb 0x%p, size %u", 234 __func__, urb, urb->transfer_buffer_length); */ 235 236 ret = usb_submit_urb(urb, GFP_ATOMIC); 237 if (ret) { 238 if (printk_ratelimit()) 239 atm_warn(channel->usbatm, "%s: urb 0x%p submission failed (%d)!\n", 240 __func__, urb, ret); 241 242 /* consider all errors transient and return the buffer back to the queue */ 243 urb->status = -EAGAIN; 244 spin_lock_irq(&channel->lock); 245 246 /* must add to the front when sending; doesn't matter when receiving */ 247 list_add(&urb->urb_list, &channel->list); 248 249 spin_unlock_irq(&channel->lock); 250 251 /* make sure the channel doesn't stall */ 252 mod_timer(&channel->delay, jiffies + msecs_to_jiffies(THROTTLE_MSECS)); 253 } 254 255 return ret; 256 } 257 258 static void usbatm_complete(struct urb *urb) 259 { 260 struct usbatm_channel *channel = urb->context; 261 unsigned long flags; 262 int status = urb->status; 263 264 /* vdbg("%s: urb 0x%p, status %d, actual_length %d", 265 __func__, urb, status, urb->actual_length); */ 266 267 /* usually in_interrupt(), but not always */ 268 spin_lock_irqsave(&channel->lock, flags); 269 270 /* must add to the back when receiving; doesn't matter when sending */ 271 list_add_tail(&urb->urb_list, &channel->list); 272 273 spin_unlock_irqrestore(&channel->lock, flags); 274 275 if (unlikely(status) && 276 (!(channel->usbatm->flags & UDSL_IGNORE_EILSEQ) || 277 status != -EILSEQ)) { 278 if (status == -ESHUTDOWN) 279 return; 280 281 if (printk_ratelimit()) 282 atm_warn(channel->usbatm, "%s: urb 0x%p failed (%d)!\n", 283 __func__, urb, status); 284 /* throttle processing in case of an error */ 285 mod_timer(&channel->delay, jiffies + msecs_to_jiffies(THROTTLE_MSECS)); 286 } else 287 tasklet_schedule(&channel->tasklet); 288 } 289 290 291 /************* 292 ** decode ** 293 *************/ 294 295 static inline struct usbatm_vcc_data *usbatm_find_vcc(struct usbatm_data *instance, 296 short vpi, int vci) 297 { 298 struct usbatm_vcc_data *vcc_data; 299 300 list_for_each_entry(vcc_data, &instance->vcc_list, list) 301 if ((vcc_data->vci == vci) && (vcc_data->vpi == vpi)) 302 return vcc_data; 303 return NULL; 304 } 305 306 static void usbatm_extract_one_cell(struct usbatm_data *instance, unsigned char *source) 307 { 308 struct atm_vcc *vcc; 309 struct sk_buff *sarb; 310 short vpi = ((source[0] & 0x0f) << 4) | (source[1] >> 4); 311 int vci = ((source[1] & 0x0f) << 12) | (source[2] << 4) | (source[3] >> 4); 312 u8 pti = ((source[3] & 0xe) >> 1); 313 314 if ((vci != instance->cached_vci) || (vpi != instance->cached_vpi)) { 315 instance->cached_vpi = vpi; 316 instance->cached_vci = vci; 317 318 instance->cached_vcc = usbatm_find_vcc(instance, vpi, vci); 319 320 if (!instance->cached_vcc) 321 atm_rldbg(instance, "%s: unknown vpi/vci (%hd/%d)!\n", __func__, vpi, vci); 322 } 323 324 if (!instance->cached_vcc) 325 return; 326 327 vcc = instance->cached_vcc->vcc; 328 329 /* OAM F5 end-to-end */ 330 if (pti == ATM_PTI_E2EF5) { 331 if (printk_ratelimit()) 332 atm_warn(instance, "%s: OAM not supported (vpi %d, vci %d)!\n", 333 __func__, vpi, vci); 334 atomic_inc(&vcc->stats->rx_err); 335 return; 336 } 337 338 sarb = instance->cached_vcc->sarb; 339 340 if (sarb->tail + ATM_CELL_PAYLOAD > sarb->end) { 341 atm_rldbg(instance, "%s: buffer overrun (sarb->len %u, vcc: 0x%p)!\n", 342 __func__, sarb->len, vcc); 343 /* discard cells already received */ 344 skb_trim(sarb, 0); 345 } 346 347 memcpy(skb_tail_pointer(sarb), source + ATM_CELL_HEADER, ATM_CELL_PAYLOAD); 348 __skb_put(sarb, ATM_CELL_PAYLOAD); 349 350 if (pti & 1) { 351 struct sk_buff *skb; 352 unsigned int length; 353 unsigned int pdu_length; 354 355 length = (source[ATM_CELL_SIZE - 6] << 8) + source[ATM_CELL_SIZE - 5]; 356 357 /* guard against overflow */ 358 if (length > ATM_MAX_AAL5_PDU) { 359 atm_rldbg(instance, "%s: bogus length %u (vcc: 0x%p)!\n", 360 __func__, length, vcc); 361 atomic_inc(&vcc->stats->rx_err); 362 goto out; 363 } 364 365 pdu_length = usbatm_pdu_length(length); 366 367 if (sarb->len < pdu_length) { 368 atm_rldbg(instance, "%s: bogus pdu_length %u (sarb->len: %u, vcc: 0x%p)!\n", 369 __func__, pdu_length, sarb->len, vcc); 370 atomic_inc(&vcc->stats->rx_err); 371 goto out; 372 } 373 374 if (crc32_be(~0, skb_tail_pointer(sarb) - pdu_length, pdu_length) != 0xc704dd7b) { 375 atm_rldbg(instance, "%s: packet failed crc check (vcc: 0x%p)!\n", 376 __func__, vcc); 377 atomic_inc(&vcc->stats->rx_err); 378 goto out; 379 } 380 381 vdbg(&instance->usb_intf->dev, 382 "%s: got packet (length: %u, pdu_length: %u, vcc: 0x%p)", 383 __func__, length, pdu_length, vcc); 384 385 skb = dev_alloc_skb(length); 386 if (!skb) { 387 if (printk_ratelimit()) 388 atm_err(instance, "%s: no memory for skb (length: %u)!\n", 389 __func__, length); 390 atomic_inc(&vcc->stats->rx_drop); 391 goto out; 392 } 393 394 vdbg(&instance->usb_intf->dev, 395 "%s: allocated new sk_buff (skb: 0x%p, skb->truesize: %u)", 396 __func__, skb, skb->truesize); 397 398 if (!atm_charge(vcc, skb->truesize)) { 399 atm_rldbg(instance, "%s: failed atm_charge (skb->truesize: %u)!\n", 400 __func__, skb->truesize); 401 dev_kfree_skb_any(skb); 402 goto out; /* atm_charge increments rx_drop */ 403 } 404 405 skb_copy_to_linear_data(skb, 406 skb_tail_pointer(sarb) - pdu_length, 407 length); 408 __skb_put(skb, length); 409 410 vdbg(&instance->usb_intf->dev, 411 "%s: sending skb 0x%p, skb->len %u, skb->truesize %u", 412 __func__, skb, skb->len, skb->truesize); 413 414 PACKETDEBUG(instance, skb->data, skb->len); 415 416 vcc->push(vcc, skb); 417 418 atomic_inc(&vcc->stats->rx); 419 out: 420 skb_trim(sarb, 0); 421 } 422 } 423 424 static void usbatm_extract_cells(struct usbatm_data *instance, 425 unsigned char *source, unsigned int avail_data) 426 { 427 unsigned int stride = instance->rx_channel.stride; 428 unsigned int buf_usage = instance->buf_usage; 429 430 /* extract cells from incoming data, taking into account that 431 * the length of avail data may not be a multiple of stride */ 432 433 if (buf_usage > 0) { 434 /* we have a partially received atm cell */ 435 unsigned char *cell_buf = instance->cell_buf; 436 unsigned int space_left = stride - buf_usage; 437 438 if (avail_data >= space_left) { 439 /* add new data and process cell */ 440 memcpy(cell_buf + buf_usage, source, space_left); 441 source += space_left; 442 avail_data -= space_left; 443 usbatm_extract_one_cell(instance, cell_buf); 444 instance->buf_usage = 0; 445 } else { 446 /* not enough data to fill the cell */ 447 memcpy(cell_buf + buf_usage, source, avail_data); 448 instance->buf_usage = buf_usage + avail_data; 449 return; 450 } 451 } 452 453 for (; avail_data >= stride; avail_data -= stride, source += stride) 454 usbatm_extract_one_cell(instance, source); 455 456 if (avail_data > 0) { 457 /* length was not a multiple of stride - 458 * save remaining data for next call */ 459 memcpy(instance->cell_buf, source, avail_data); 460 instance->buf_usage = avail_data; 461 } 462 } 463 464 465 /************* 466 ** encode ** 467 *************/ 468 469 static unsigned int usbatm_write_cells(struct usbatm_data *instance, 470 struct sk_buff *skb, 471 u8 *target, unsigned int avail_space) 472 { 473 struct usbatm_control *ctrl = UDSL_SKB(skb); 474 struct atm_vcc *vcc = ctrl->atm.vcc; 475 unsigned int bytes_written; 476 unsigned int stride = instance->tx_channel.stride; 477 478 for (bytes_written = 0; bytes_written < avail_space && ctrl->len; 479 bytes_written += stride, target += stride) { 480 unsigned int data_len = min_t(unsigned int, skb->len, ATM_CELL_PAYLOAD); 481 unsigned int left = ATM_CELL_PAYLOAD - data_len; 482 u8 *ptr = target; 483 484 ptr[0] = vcc->vpi >> 4; 485 ptr[1] = (vcc->vpi << 4) | (vcc->vci >> 12); 486 ptr[2] = vcc->vci >> 4; 487 ptr[3] = vcc->vci << 4; 488 ptr[4] = 0xec; 489 ptr += ATM_CELL_HEADER; 490 491 skb_copy_from_linear_data(skb, ptr, data_len); 492 ptr += data_len; 493 __skb_pull(skb, data_len); 494 495 if (!left) 496 continue; 497 498 memset(ptr, 0, left); 499 500 if (left >= ATM_AAL5_TRAILER) { /* trailer will go in this cell */ 501 u8 *trailer = target + ATM_CELL_SIZE - ATM_AAL5_TRAILER; 502 /* trailer[0] = 0; UU = 0 */ 503 /* trailer[1] = 0; CPI = 0 */ 504 trailer[2] = ctrl->len >> 8; 505 trailer[3] = ctrl->len; 506 507 ctrl->crc = ~crc32_be(ctrl->crc, ptr, left - 4); 508 509 trailer[4] = ctrl->crc >> 24; 510 trailer[5] = ctrl->crc >> 16; 511 trailer[6] = ctrl->crc >> 8; 512 trailer[7] = ctrl->crc; 513 514 target[3] |= 0x2; /* adjust PTI */ 515 516 ctrl->len = 0; /* tag this skb finished */ 517 } else 518 ctrl->crc = crc32_be(ctrl->crc, ptr, left); 519 } 520 521 return bytes_written; 522 } 523 524 525 /************** 526 ** receive ** 527 **************/ 528 529 static void usbatm_rx_process(unsigned long data) 530 { 531 struct usbatm_data *instance = (struct usbatm_data *)data; 532 struct urb *urb; 533 534 while ((urb = usbatm_pop_urb(&instance->rx_channel))) { 535 vdbg(&instance->usb_intf->dev, 536 "%s: processing urb 0x%p", __func__, urb); 537 538 if (usb_pipeisoc(urb->pipe)) { 539 unsigned char *merge_start = NULL; 540 unsigned int merge_length = 0; 541 const unsigned int packet_size = instance->rx_channel.packet_size; 542 int i; 543 544 for (i = 0; i < urb->number_of_packets; i++) { 545 if (!urb->iso_frame_desc[i].status) { 546 unsigned int actual_length = urb->iso_frame_desc[i].actual_length; 547 548 if (!merge_length) 549 merge_start = (unsigned char *)urb->transfer_buffer + urb->iso_frame_desc[i].offset; 550 merge_length += actual_length; 551 if (merge_length && (actual_length < packet_size)) { 552 usbatm_extract_cells(instance, merge_start, merge_length); 553 merge_length = 0; 554 } 555 } else { 556 atm_rldbg(instance, "%s: status %d in frame %d!\n", __func__, urb->status, i); 557 if (merge_length) 558 usbatm_extract_cells(instance, merge_start, merge_length); 559 merge_length = 0; 560 instance->buf_usage = 0; 561 } 562 } 563 564 if (merge_length) 565 usbatm_extract_cells(instance, merge_start, merge_length); 566 } else 567 if (!urb->status) 568 usbatm_extract_cells(instance, urb->transfer_buffer, urb->actual_length); 569 else 570 instance->buf_usage = 0; 571 572 if (usbatm_submit_urb(urb)) 573 return; 574 } 575 } 576 577 578 /*********** 579 ** send ** 580 ***********/ 581 582 static void usbatm_tx_process(unsigned long data) 583 { 584 struct usbatm_data *instance = (struct usbatm_data *)data; 585 struct sk_buff *skb = instance->current_skb; 586 struct urb *urb = NULL; 587 const unsigned int buf_size = instance->tx_channel.buf_size; 588 unsigned int bytes_written = 0; 589 u8 *buffer = NULL; 590 591 if (!skb) 592 skb = skb_dequeue(&instance->sndqueue); 593 594 while (skb) { 595 if (!urb) { 596 urb = usbatm_pop_urb(&instance->tx_channel); 597 if (!urb) 598 break; /* no more senders */ 599 buffer = urb->transfer_buffer; 600 bytes_written = (urb->status == -EAGAIN) ? 601 urb->transfer_buffer_length : 0; 602 } 603 604 bytes_written += usbatm_write_cells(instance, skb, 605 buffer + bytes_written, 606 buf_size - bytes_written); 607 608 vdbg(&instance->usb_intf->dev, 609 "%s: wrote %u bytes from skb 0x%p to urb 0x%p", 610 __func__, bytes_written, skb, urb); 611 612 if (!UDSL_SKB(skb)->len) { 613 struct atm_vcc *vcc = UDSL_SKB(skb)->atm.vcc; 614 615 usbatm_pop(vcc, skb); 616 atomic_inc(&vcc->stats->tx); 617 618 skb = skb_dequeue(&instance->sndqueue); 619 } 620 621 if (bytes_written == buf_size || (!skb && bytes_written)) { 622 urb->transfer_buffer_length = bytes_written; 623 624 if (usbatm_submit_urb(urb)) 625 break; 626 urb = NULL; 627 } 628 } 629 630 instance->current_skb = skb; 631 } 632 633 static void usbatm_cancel_send(struct usbatm_data *instance, 634 struct atm_vcc *vcc) 635 { 636 struct sk_buff *skb, *n; 637 638 spin_lock_irq(&instance->sndqueue.lock); 639 skb_queue_walk_safe(&instance->sndqueue, skb, n) { 640 if (UDSL_SKB(skb)->atm.vcc == vcc) { 641 atm_dbg(instance, "%s: popping skb 0x%p\n", __func__, skb); 642 __skb_unlink(skb, &instance->sndqueue); 643 usbatm_pop(vcc, skb); 644 } 645 } 646 spin_unlock_irq(&instance->sndqueue.lock); 647 648 tasklet_disable(&instance->tx_channel.tasklet); 649 if ((skb = instance->current_skb) && (UDSL_SKB(skb)->atm.vcc == vcc)) { 650 atm_dbg(instance, "%s: popping current skb (0x%p)\n", __func__, skb); 651 instance->current_skb = NULL; 652 usbatm_pop(vcc, skb); 653 } 654 tasklet_enable(&instance->tx_channel.tasklet); 655 } 656 657 static int usbatm_atm_send(struct atm_vcc *vcc, struct sk_buff *skb) 658 { 659 struct usbatm_data *instance = vcc->dev->dev_data; 660 struct usbatm_control *ctrl = UDSL_SKB(skb); 661 int err; 662 663 /* racy disconnection check - fine */ 664 if (!instance || instance->disconnected) { 665 #ifdef VERBOSE_DEBUG 666 printk_ratelimited(KERN_DEBUG "%s: %s!\n", __func__, instance ? "disconnected" : "NULL instance"); 667 #endif 668 err = -ENODEV; 669 goto fail; 670 } 671 672 if (vcc->qos.aal != ATM_AAL5) { 673 atm_rldbg(instance, "%s: unsupported ATM type %d!\n", __func__, vcc->qos.aal); 674 err = -EINVAL; 675 goto fail; 676 } 677 678 if (skb->len > ATM_MAX_AAL5_PDU) { 679 atm_rldbg(instance, "%s: packet too long (%d vs %d)!\n", 680 __func__, skb->len, ATM_MAX_AAL5_PDU); 681 err = -EINVAL; 682 goto fail; 683 } 684 685 PACKETDEBUG(instance, skb->data, skb->len); 686 687 /* initialize the control block */ 688 ctrl->atm.vcc = vcc; 689 ctrl->len = skb->len; 690 ctrl->crc = crc32_be(~0, skb->data, skb->len); 691 692 skb_queue_tail(&instance->sndqueue, skb); 693 tasklet_schedule(&instance->tx_channel.tasklet); 694 695 return 0; 696 697 fail: 698 usbatm_pop(vcc, skb); 699 return err; 700 } 701 702 703 /******************** 704 ** bean counting ** 705 ********************/ 706 707 static void usbatm_destroy_instance(struct kref *kref) 708 { 709 struct usbatm_data *instance = container_of(kref, struct usbatm_data, refcount); 710 711 tasklet_kill(&instance->rx_channel.tasklet); 712 tasklet_kill(&instance->tx_channel.tasklet); 713 usb_put_dev(instance->usb_dev); 714 kfree(instance); 715 } 716 717 static void usbatm_get_instance(struct usbatm_data *instance) 718 { 719 kref_get(&instance->refcount); 720 } 721 722 static void usbatm_put_instance(struct usbatm_data *instance) 723 { 724 kref_put(&instance->refcount, usbatm_destroy_instance); 725 } 726 727 728 /********** 729 ** ATM ** 730 **********/ 731 732 static void usbatm_atm_dev_close(struct atm_dev *atm_dev) 733 { 734 struct usbatm_data *instance = atm_dev->dev_data; 735 736 if (!instance) 737 return; 738 739 atm_dev->dev_data = NULL; /* catch bugs */ 740 usbatm_put_instance(instance); /* taken in usbatm_atm_init */ 741 } 742 743 static int usbatm_atm_proc_read(struct atm_dev *atm_dev, loff_t *pos, char *page) 744 { 745 struct usbatm_data *instance = atm_dev->dev_data; 746 int left = *pos; 747 748 if (!instance) 749 return -ENODEV; 750 751 if (!left--) 752 return sprintf(page, "%s\n", instance->description); 753 754 if (!left--) 755 return sprintf(page, "MAC: %pM\n", atm_dev->esi); 756 757 if (!left--) 758 return sprintf(page, 759 "AAL5: tx %d ( %d err ), rx %d ( %d err, %d drop )\n", 760 atomic_read(&atm_dev->stats.aal5.tx), 761 atomic_read(&atm_dev->stats.aal5.tx_err), 762 atomic_read(&atm_dev->stats.aal5.rx), 763 atomic_read(&atm_dev->stats.aal5.rx_err), 764 atomic_read(&atm_dev->stats.aal5.rx_drop)); 765 766 if (!left--) { 767 if (instance->disconnected) 768 return sprintf(page, "Disconnected\n"); 769 else 770 switch (atm_dev->signal) { 771 case ATM_PHY_SIG_FOUND: 772 return sprintf(page, "Line up\n"); 773 case ATM_PHY_SIG_LOST: 774 return sprintf(page, "Line down\n"); 775 default: 776 return sprintf(page, "Line state unknown\n"); 777 } 778 } 779 780 return 0; 781 } 782 783 static int usbatm_atm_open(struct atm_vcc *vcc) 784 { 785 struct usbatm_data *instance = vcc->dev->dev_data; 786 struct usbatm_vcc_data *new = NULL; 787 int ret; 788 int vci = vcc->vci; 789 short vpi = vcc->vpi; 790 791 if (!instance) 792 return -ENODEV; 793 794 /* only support AAL5 */ 795 if ((vcc->qos.aal != ATM_AAL5)) { 796 atm_warn(instance, "%s: unsupported ATM type %d!\n", __func__, vcc->qos.aal); 797 return -EINVAL; 798 } 799 800 /* sanity checks */ 801 if ((vcc->qos.rxtp.max_sdu < 0) || (vcc->qos.rxtp.max_sdu > ATM_MAX_AAL5_PDU)) { 802 atm_dbg(instance, "%s: max_sdu %d out of range!\n", __func__, vcc->qos.rxtp.max_sdu); 803 return -EINVAL; 804 } 805 806 mutex_lock(&instance->serialize); /* vs self, usbatm_atm_close, usbatm_usb_disconnect */ 807 808 if (instance->disconnected) { 809 atm_dbg(instance, "%s: disconnected!\n", __func__); 810 ret = -ENODEV; 811 goto fail; 812 } 813 814 if (usbatm_find_vcc(instance, vpi, vci)) { 815 atm_dbg(instance, "%s: %hd/%d already in use!\n", __func__, vpi, vci); 816 ret = -EADDRINUSE; 817 goto fail; 818 } 819 820 new = kzalloc(sizeof(struct usbatm_vcc_data), GFP_KERNEL); 821 if (!new) { 822 ret = -ENOMEM; 823 goto fail; 824 } 825 826 new->vcc = vcc; 827 new->vpi = vpi; 828 new->vci = vci; 829 830 new->sarb = alloc_skb(usbatm_pdu_length(vcc->qos.rxtp.max_sdu), GFP_KERNEL); 831 if (!new->sarb) { 832 atm_err(instance, "%s: no memory for SAR buffer!\n", __func__); 833 ret = -ENOMEM; 834 goto fail; 835 } 836 837 vcc->dev_data = new; 838 839 tasklet_disable(&instance->rx_channel.tasklet); 840 instance->cached_vcc = new; 841 instance->cached_vpi = vpi; 842 instance->cached_vci = vci; 843 list_add(&new->list, &instance->vcc_list); 844 tasklet_enable(&instance->rx_channel.tasklet); 845 846 set_bit(ATM_VF_ADDR, &vcc->flags); 847 set_bit(ATM_VF_PARTIAL, &vcc->flags); 848 set_bit(ATM_VF_READY, &vcc->flags); 849 850 mutex_unlock(&instance->serialize); 851 852 atm_dbg(instance, "%s: allocated vcc data 0x%p\n", __func__, new); 853 854 return 0; 855 856 fail: 857 kfree(new); 858 mutex_unlock(&instance->serialize); 859 return ret; 860 } 861 862 static void usbatm_atm_close(struct atm_vcc *vcc) 863 { 864 struct usbatm_data *instance = vcc->dev->dev_data; 865 struct usbatm_vcc_data *vcc_data = vcc->dev_data; 866 867 if (!instance || !vcc_data) 868 return; 869 870 usbatm_cancel_send(instance, vcc); 871 872 mutex_lock(&instance->serialize); /* vs self, usbatm_atm_open, usbatm_usb_disconnect */ 873 874 tasklet_disable(&instance->rx_channel.tasklet); 875 if (instance->cached_vcc == vcc_data) { 876 instance->cached_vcc = NULL; 877 instance->cached_vpi = ATM_VPI_UNSPEC; 878 instance->cached_vci = ATM_VCI_UNSPEC; 879 } 880 list_del(&vcc_data->list); 881 tasklet_enable(&instance->rx_channel.tasklet); 882 883 kfree_skb(vcc_data->sarb); 884 vcc_data->sarb = NULL; 885 886 kfree(vcc_data); 887 vcc->dev_data = NULL; 888 889 vcc->vpi = ATM_VPI_UNSPEC; 890 vcc->vci = ATM_VCI_UNSPEC; 891 clear_bit(ATM_VF_READY, &vcc->flags); 892 clear_bit(ATM_VF_PARTIAL, &vcc->flags); 893 clear_bit(ATM_VF_ADDR, &vcc->flags); 894 895 mutex_unlock(&instance->serialize); 896 } 897 898 static int usbatm_atm_ioctl(struct atm_dev *atm_dev, unsigned int cmd, 899 void __user *arg) 900 { 901 struct usbatm_data *instance = atm_dev->dev_data; 902 903 if (!instance || instance->disconnected) 904 return -ENODEV; 905 906 switch (cmd) { 907 case ATM_QUERYLOOP: 908 return put_user(ATM_LM_NONE, (int __user *)arg) ? -EFAULT : 0; 909 default: 910 return -ENOIOCTLCMD; 911 } 912 } 913 914 static int usbatm_atm_init(struct usbatm_data *instance) 915 { 916 struct atm_dev *atm_dev; 917 int ret, i; 918 919 /* ATM init. The ATM initialization scheme suffers from an intrinsic race 920 * condition: callbacks we register can be executed at once, before we have 921 * initialized the struct atm_dev. To protect against this, all callbacks 922 * abort if atm_dev->dev_data is NULL. */ 923 atm_dev = atm_dev_register(instance->driver_name, 924 &instance->usb_intf->dev, &usbatm_atm_devops, 925 -1, NULL); 926 if (!atm_dev) { 927 usb_err(instance, "%s: failed to register ATM device!\n", __func__); 928 return -1; 929 } 930 931 instance->atm_dev = atm_dev; 932 933 atm_dev->ci_range.vpi_bits = ATM_CI_MAX; 934 atm_dev->ci_range.vci_bits = ATM_CI_MAX; 935 atm_dev->signal = ATM_PHY_SIG_UNKNOWN; 936 937 /* temp init ATM device, set to 128kbit */ 938 atm_dev->link_rate = 128 * 1000 / 424; 939 940 if (instance->driver->atm_start && ((ret = instance->driver->atm_start(instance, atm_dev)) < 0)) { 941 atm_err(instance, "%s: atm_start failed: %d!\n", __func__, ret); 942 goto fail; 943 } 944 945 usbatm_get_instance(instance); /* dropped in usbatm_atm_dev_close */ 946 947 /* ready for ATM callbacks */ 948 mb(); 949 atm_dev->dev_data = instance; 950 951 /* submit all rx URBs */ 952 for (i = 0; i < num_rcv_urbs; i++) 953 usbatm_submit_urb(instance->urbs[i]); 954 955 return 0; 956 957 fail: 958 instance->atm_dev = NULL; 959 atm_dev_deregister(atm_dev); /* usbatm_atm_dev_close will eventually be called */ 960 return ret; 961 } 962 963 964 /********** 965 ** USB ** 966 **********/ 967 968 static int usbatm_do_heavy_init(void *arg) 969 { 970 struct usbatm_data *instance = arg; 971 int ret; 972 973 allow_signal(SIGTERM); 974 complete(&instance->thread_started); 975 976 ret = instance->driver->heavy_init(instance, instance->usb_intf); 977 978 if (!ret) 979 ret = usbatm_atm_init(instance); 980 981 mutex_lock(&instance->serialize); 982 instance->thread = NULL; 983 mutex_unlock(&instance->serialize); 984 985 complete_and_exit(&instance->thread_exited, ret); 986 } 987 988 static int usbatm_heavy_init(struct usbatm_data *instance) 989 { 990 struct task_struct *t; 991 992 t = kthread_create(usbatm_do_heavy_init, instance, "%s", 993 instance->driver->driver_name); 994 if (IS_ERR(t)) { 995 usb_err(instance, "%s: failed to create kernel_thread (%ld)!\n", 996 __func__, PTR_ERR(t)); 997 return PTR_ERR(t); 998 } 999 1000 instance->thread = t; 1001 wake_up_process(t); 1002 wait_for_completion(&instance->thread_started); 1003 1004 return 0; 1005 } 1006 1007 static void usbatm_tasklet_schedule(unsigned long data) 1008 { 1009 tasklet_schedule((struct tasklet_struct *) data); 1010 } 1011 1012 static void usbatm_init_channel(struct usbatm_channel *channel) 1013 { 1014 spin_lock_init(&channel->lock); 1015 INIT_LIST_HEAD(&channel->list); 1016 channel->delay.function = usbatm_tasklet_schedule; 1017 channel->delay.data = (unsigned long) &channel->tasklet; 1018 init_timer(&channel->delay); 1019 } 1020 1021 int usbatm_usb_probe(struct usb_interface *intf, const struct usb_device_id *id, 1022 struct usbatm_driver *driver) 1023 { 1024 struct device *dev = &intf->dev; 1025 struct usb_device *usb_dev = interface_to_usbdev(intf); 1026 struct usbatm_data *instance; 1027 char *buf; 1028 int error = -ENOMEM; 1029 int i, length; 1030 unsigned int maxpacket, num_packets; 1031 1032 /* instance init */ 1033 instance = kzalloc(sizeof(*instance) + sizeof(struct urb *) * (num_rcv_urbs + num_snd_urbs), GFP_KERNEL); 1034 if (!instance) 1035 return -ENOMEM; 1036 1037 /* public fields */ 1038 1039 instance->driver = driver; 1040 strlcpy(instance->driver_name, driver->driver_name, 1041 sizeof(instance->driver_name)); 1042 1043 instance->usb_dev = usb_dev; 1044 instance->usb_intf = intf; 1045 1046 buf = instance->description; 1047 length = sizeof(instance->description); 1048 1049 if ((i = usb_string(usb_dev, usb_dev->descriptor.iProduct, buf, length)) < 0) 1050 goto bind; 1051 1052 buf += i; 1053 length -= i; 1054 1055 i = scnprintf(buf, length, " ("); 1056 buf += i; 1057 length -= i; 1058 1059 if (length <= 0 || (i = usb_make_path(usb_dev, buf, length)) < 0) 1060 goto bind; 1061 1062 buf += i; 1063 length -= i; 1064 1065 snprintf(buf, length, ")"); 1066 1067 bind: 1068 if (driver->bind && (error = driver->bind(instance, intf, id)) < 0) { 1069 dev_err(dev, "%s: bind failed: %d!\n", __func__, error); 1070 goto fail_free; 1071 } 1072 1073 /* private fields */ 1074 1075 kref_init(&instance->refcount); /* dropped in usbatm_usb_disconnect */ 1076 mutex_init(&instance->serialize); 1077 1078 instance->thread = NULL; 1079 init_completion(&instance->thread_started); 1080 init_completion(&instance->thread_exited); 1081 1082 INIT_LIST_HEAD(&instance->vcc_list); 1083 skb_queue_head_init(&instance->sndqueue); 1084 1085 usbatm_init_channel(&instance->rx_channel); 1086 usbatm_init_channel(&instance->tx_channel); 1087 tasklet_init(&instance->rx_channel.tasklet, usbatm_rx_process, (unsigned long)instance); 1088 tasklet_init(&instance->tx_channel.tasklet, usbatm_tx_process, (unsigned long)instance); 1089 instance->rx_channel.stride = ATM_CELL_SIZE + driver->rx_padding; 1090 instance->tx_channel.stride = ATM_CELL_SIZE + driver->tx_padding; 1091 instance->rx_channel.usbatm = instance->tx_channel.usbatm = instance; 1092 1093 if ((instance->flags & UDSL_USE_ISOC) && driver->isoc_in) 1094 instance->rx_channel.endpoint = usb_rcvisocpipe(usb_dev, driver->isoc_in); 1095 else 1096 instance->rx_channel.endpoint = usb_rcvbulkpipe(usb_dev, driver->bulk_in); 1097 1098 instance->tx_channel.endpoint = usb_sndbulkpipe(usb_dev, driver->bulk_out); 1099 1100 /* tx buffer size must be a positive multiple of the stride */ 1101 instance->tx_channel.buf_size = max(instance->tx_channel.stride, 1102 snd_buf_bytes - (snd_buf_bytes % instance->tx_channel.stride)); 1103 1104 /* rx buffer size must be a positive multiple of the endpoint maxpacket */ 1105 maxpacket = usb_maxpacket(usb_dev, instance->rx_channel.endpoint, 0); 1106 1107 if ((maxpacket < 1) || (maxpacket > UDSL_MAX_BUF_SIZE)) { 1108 dev_err(dev, "%s: invalid endpoint %02x!\n", __func__, 1109 usb_pipeendpoint(instance->rx_channel.endpoint)); 1110 error = -EINVAL; 1111 goto fail_unbind; 1112 } 1113 1114 num_packets = max(1U, (rcv_buf_bytes + maxpacket / 2) / maxpacket); /* round */ 1115 1116 if (num_packets * maxpacket > UDSL_MAX_BUF_SIZE) 1117 num_packets--; 1118 1119 instance->rx_channel.buf_size = num_packets * maxpacket; 1120 instance->rx_channel.packet_size = maxpacket; 1121 1122 for (i = 0; i < 2; i++) { 1123 struct usbatm_channel *channel = i ? 1124 &instance->tx_channel : &instance->rx_channel; 1125 1126 dev_dbg(dev, "%s: using %d byte buffer for %s channel 0x%p\n", 1127 __func__, channel->buf_size, i ? "tx" : "rx", channel); 1128 } 1129 1130 /* initialize urbs */ 1131 1132 for (i = 0; i < num_rcv_urbs + num_snd_urbs; i++) { 1133 u8 *buffer; 1134 struct usbatm_channel *channel = i < num_rcv_urbs ? 1135 &instance->rx_channel : &instance->tx_channel; 1136 struct urb *urb; 1137 unsigned int iso_packets = usb_pipeisoc(channel->endpoint) ? channel->buf_size / channel->packet_size : 0; 1138 1139 urb = usb_alloc_urb(iso_packets, GFP_KERNEL); 1140 if (!urb) { 1141 error = -ENOMEM; 1142 goto fail_unbind; 1143 } 1144 1145 instance->urbs[i] = urb; 1146 1147 /* zero the tx padding to avoid leaking information */ 1148 buffer = kzalloc(channel->buf_size, GFP_KERNEL); 1149 if (!buffer) { 1150 error = -ENOMEM; 1151 goto fail_unbind; 1152 } 1153 1154 usb_fill_bulk_urb(urb, instance->usb_dev, channel->endpoint, 1155 buffer, channel->buf_size, usbatm_complete, channel); 1156 if (iso_packets) { 1157 int j; 1158 urb->interval = 1; 1159 urb->transfer_flags = URB_ISO_ASAP; 1160 urb->number_of_packets = iso_packets; 1161 for (j = 0; j < iso_packets; j++) { 1162 urb->iso_frame_desc[j].offset = channel->packet_size * j; 1163 urb->iso_frame_desc[j].length = channel->packet_size; 1164 } 1165 } 1166 1167 /* put all tx URBs on the list of spares */ 1168 if (i >= num_rcv_urbs) 1169 list_add_tail(&urb->urb_list, &channel->list); 1170 1171 vdbg(&intf->dev, "%s: alloced buffer 0x%p buf size %u urb 0x%p", 1172 __func__, urb->transfer_buffer, urb->transfer_buffer_length, urb); 1173 } 1174 1175 instance->cached_vpi = ATM_VPI_UNSPEC; 1176 instance->cached_vci = ATM_VCI_UNSPEC; 1177 instance->cell_buf = kmalloc(instance->rx_channel.stride, GFP_KERNEL); 1178 1179 if (!instance->cell_buf) { 1180 error = -ENOMEM; 1181 goto fail_unbind; 1182 } 1183 1184 if (!(instance->flags & UDSL_SKIP_HEAVY_INIT) && driver->heavy_init) { 1185 error = usbatm_heavy_init(instance); 1186 } else { 1187 complete(&instance->thread_exited); /* pretend that heavy_init was run */ 1188 error = usbatm_atm_init(instance); 1189 } 1190 1191 if (error < 0) 1192 goto fail_unbind; 1193 1194 usb_get_dev(usb_dev); 1195 usb_set_intfdata(intf, instance); 1196 1197 return 0; 1198 1199 fail_unbind: 1200 if (instance->driver->unbind) 1201 instance->driver->unbind(instance, intf); 1202 fail_free: 1203 kfree(instance->cell_buf); 1204 1205 for (i = 0; i < num_rcv_urbs + num_snd_urbs; i++) { 1206 if (instance->urbs[i]) 1207 kfree(instance->urbs[i]->transfer_buffer); 1208 usb_free_urb(instance->urbs[i]); 1209 } 1210 1211 kfree(instance); 1212 1213 return error; 1214 } 1215 EXPORT_SYMBOL_GPL(usbatm_usb_probe); 1216 1217 void usbatm_usb_disconnect(struct usb_interface *intf) 1218 { 1219 struct device *dev = &intf->dev; 1220 struct usbatm_data *instance = usb_get_intfdata(intf); 1221 struct usbatm_vcc_data *vcc_data; 1222 int i; 1223 1224 if (!instance) { 1225 dev_dbg(dev, "%s: NULL instance!\n", __func__); 1226 return; 1227 } 1228 1229 usb_set_intfdata(intf, NULL); 1230 1231 mutex_lock(&instance->serialize); 1232 instance->disconnected = 1; 1233 if (instance->thread != NULL) 1234 send_sig(SIGTERM, instance->thread, 1); 1235 mutex_unlock(&instance->serialize); 1236 1237 wait_for_completion(&instance->thread_exited); 1238 1239 mutex_lock(&instance->serialize); 1240 list_for_each_entry(vcc_data, &instance->vcc_list, list) 1241 vcc_release_async(vcc_data->vcc, -EPIPE); 1242 mutex_unlock(&instance->serialize); 1243 1244 tasklet_disable(&instance->rx_channel.tasklet); 1245 tasklet_disable(&instance->tx_channel.tasklet); 1246 1247 for (i = 0; i < num_rcv_urbs + num_snd_urbs; i++) 1248 usb_kill_urb(instance->urbs[i]); 1249 1250 del_timer_sync(&instance->rx_channel.delay); 1251 del_timer_sync(&instance->tx_channel.delay); 1252 1253 /* turn usbatm_[rt]x_process into something close to a no-op */ 1254 /* no need to take the spinlock */ 1255 INIT_LIST_HEAD(&instance->rx_channel.list); 1256 INIT_LIST_HEAD(&instance->tx_channel.list); 1257 1258 tasklet_enable(&instance->rx_channel.tasklet); 1259 tasklet_enable(&instance->tx_channel.tasklet); 1260 1261 if (instance->atm_dev && instance->driver->atm_stop) 1262 instance->driver->atm_stop(instance, instance->atm_dev); 1263 1264 if (instance->driver->unbind) 1265 instance->driver->unbind(instance, intf); 1266 1267 instance->driver_data = NULL; 1268 1269 for (i = 0; i < num_rcv_urbs + num_snd_urbs; i++) { 1270 kfree(instance->urbs[i]->transfer_buffer); 1271 usb_free_urb(instance->urbs[i]); 1272 } 1273 1274 kfree(instance->cell_buf); 1275 1276 /* ATM finalize */ 1277 if (instance->atm_dev) { 1278 atm_dev_deregister(instance->atm_dev); 1279 instance->atm_dev = NULL; 1280 } 1281 1282 usbatm_put_instance(instance); /* taken in usbatm_usb_probe */ 1283 } 1284 EXPORT_SYMBOL_GPL(usbatm_usb_disconnect); 1285 1286 1287 /*********** 1288 ** init ** 1289 ***********/ 1290 1291 static int __init usbatm_usb_init(void) 1292 { 1293 if (sizeof(struct usbatm_control) > FIELD_SIZEOF(struct sk_buff, cb)) { 1294 printk(KERN_ERR "%s unusable with this kernel!\n", usbatm_driver_name); 1295 return -EIO; 1296 } 1297 1298 if ((num_rcv_urbs > UDSL_MAX_RCV_URBS) 1299 || (num_snd_urbs > UDSL_MAX_SND_URBS) 1300 || (rcv_buf_bytes < 1) 1301 || (rcv_buf_bytes > UDSL_MAX_BUF_SIZE) 1302 || (snd_buf_bytes < 1) 1303 || (snd_buf_bytes > UDSL_MAX_BUF_SIZE)) 1304 return -EINVAL; 1305 1306 return 0; 1307 } 1308 module_init(usbatm_usb_init); 1309 1310 static void __exit usbatm_usb_exit(void) 1311 { 1312 } 1313 module_exit(usbatm_usb_exit); 1314 1315 MODULE_AUTHOR(DRIVER_AUTHOR); 1316 MODULE_DESCRIPTION(DRIVER_DESC); 1317 MODULE_LICENSE("GPL"); 1318 MODULE_VERSION(DRIVER_VERSION); 1319 1320 /************ 1321 ** debug ** 1322 ************/ 1323 1324 #ifdef VERBOSE_DEBUG 1325 static int usbatm_print_packet(struct usbatm_data *instance, 1326 const unsigned char *data, int len) 1327 { 1328 unsigned char buffer[256]; 1329 int i = 0, j = 0; 1330 1331 for (i = 0; i < len;) { 1332 buffer[0] = '\0'; 1333 sprintf(buffer, "%.3d :", i); 1334 for (j = 0; (j < 16) && (i < len); j++, i++) 1335 sprintf(buffer, "%s %2.2x", buffer, data[i]); 1336 dev_dbg(&instance->usb_intf->dev, "%s", buffer); 1337 } 1338 return i; 1339 } 1340 #endif 1341