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 <asm/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.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 atm_err(instance, "%s: no memory for vcc_data!\n", __func__); 823 ret = -ENOMEM; 824 goto fail; 825 } 826 827 new->vcc = vcc; 828 new->vpi = vpi; 829 new->vci = vci; 830 831 new->sarb = alloc_skb(usbatm_pdu_length(vcc->qos.rxtp.max_sdu), GFP_KERNEL); 832 if (!new->sarb) { 833 atm_err(instance, "%s: no memory for SAR buffer!\n", __func__); 834 ret = -ENOMEM; 835 goto fail; 836 } 837 838 vcc->dev_data = new; 839 840 tasklet_disable(&instance->rx_channel.tasklet); 841 instance->cached_vcc = new; 842 instance->cached_vpi = vpi; 843 instance->cached_vci = vci; 844 list_add(&new->list, &instance->vcc_list); 845 tasklet_enable(&instance->rx_channel.tasklet); 846 847 set_bit(ATM_VF_ADDR, &vcc->flags); 848 set_bit(ATM_VF_PARTIAL, &vcc->flags); 849 set_bit(ATM_VF_READY, &vcc->flags); 850 851 mutex_unlock(&instance->serialize); 852 853 atm_dbg(instance, "%s: allocated vcc data 0x%p\n", __func__, new); 854 855 return 0; 856 857 fail: 858 kfree(new); 859 mutex_unlock(&instance->serialize); 860 return ret; 861 } 862 863 static void usbatm_atm_close(struct atm_vcc *vcc) 864 { 865 struct usbatm_data *instance = vcc->dev->dev_data; 866 struct usbatm_vcc_data *vcc_data = vcc->dev_data; 867 868 if (!instance || !vcc_data) 869 return; 870 871 usbatm_cancel_send(instance, vcc); 872 873 mutex_lock(&instance->serialize); /* vs self, usbatm_atm_open, usbatm_usb_disconnect */ 874 875 tasklet_disable(&instance->rx_channel.tasklet); 876 if (instance->cached_vcc == vcc_data) { 877 instance->cached_vcc = NULL; 878 instance->cached_vpi = ATM_VPI_UNSPEC; 879 instance->cached_vci = ATM_VCI_UNSPEC; 880 } 881 list_del(&vcc_data->list); 882 tasklet_enable(&instance->rx_channel.tasklet); 883 884 kfree_skb(vcc_data->sarb); 885 vcc_data->sarb = NULL; 886 887 kfree(vcc_data); 888 vcc->dev_data = NULL; 889 890 vcc->vpi = ATM_VPI_UNSPEC; 891 vcc->vci = ATM_VCI_UNSPEC; 892 clear_bit(ATM_VF_READY, &vcc->flags); 893 clear_bit(ATM_VF_PARTIAL, &vcc->flags); 894 clear_bit(ATM_VF_ADDR, &vcc->flags); 895 896 mutex_unlock(&instance->serialize); 897 } 898 899 static int usbatm_atm_ioctl(struct atm_dev *atm_dev, unsigned int cmd, 900 void __user *arg) 901 { 902 struct usbatm_data *instance = atm_dev->dev_data; 903 904 if (!instance || instance->disconnected) 905 return -ENODEV; 906 907 switch (cmd) { 908 case ATM_QUERYLOOP: 909 return put_user(ATM_LM_NONE, (int __user *)arg) ? -EFAULT : 0; 910 default: 911 return -ENOIOCTLCMD; 912 } 913 } 914 915 static int usbatm_atm_init(struct usbatm_data *instance) 916 { 917 struct atm_dev *atm_dev; 918 int ret, i; 919 920 /* ATM init. The ATM initialization scheme suffers from an intrinsic race 921 * condition: callbacks we register can be executed at once, before we have 922 * initialized the struct atm_dev. To protect against this, all callbacks 923 * abort if atm_dev->dev_data is NULL. */ 924 atm_dev = atm_dev_register(instance->driver_name, 925 &instance->usb_intf->dev, &usbatm_atm_devops, 926 -1, NULL); 927 if (!atm_dev) { 928 usb_err(instance, "%s: failed to register ATM device!\n", __func__); 929 return -1; 930 } 931 932 instance->atm_dev = atm_dev; 933 934 atm_dev->ci_range.vpi_bits = ATM_CI_MAX; 935 atm_dev->ci_range.vci_bits = ATM_CI_MAX; 936 atm_dev->signal = ATM_PHY_SIG_UNKNOWN; 937 938 /* temp init ATM device, set to 128kbit */ 939 atm_dev->link_rate = 128 * 1000 / 424; 940 941 if (instance->driver->atm_start && ((ret = instance->driver->atm_start(instance, atm_dev)) < 0)) { 942 atm_err(instance, "%s: atm_start failed: %d!\n", __func__, ret); 943 goto fail; 944 } 945 946 usbatm_get_instance(instance); /* dropped in usbatm_atm_dev_close */ 947 948 /* ready for ATM callbacks */ 949 mb(); 950 atm_dev->dev_data = instance; 951 952 /* submit all rx URBs */ 953 for (i = 0; i < num_rcv_urbs; i++) 954 usbatm_submit_urb(instance->urbs[i]); 955 956 return 0; 957 958 fail: 959 instance->atm_dev = NULL; 960 atm_dev_deregister(atm_dev); /* usbatm_atm_dev_close will eventually be called */ 961 return ret; 962 } 963 964 965 /********** 966 ** USB ** 967 **********/ 968 969 static int usbatm_do_heavy_init(void *arg) 970 { 971 struct usbatm_data *instance = arg; 972 int ret; 973 974 allow_signal(SIGTERM); 975 complete(&instance->thread_started); 976 977 ret = instance->driver->heavy_init(instance, instance->usb_intf); 978 979 if (!ret) 980 ret = usbatm_atm_init(instance); 981 982 mutex_lock(&instance->serialize); 983 instance->thread = NULL; 984 mutex_unlock(&instance->serialize); 985 986 complete_and_exit(&instance->thread_exited, ret); 987 } 988 989 static int usbatm_heavy_init(struct usbatm_data *instance) 990 { 991 struct task_struct *t; 992 993 t = kthread_create(usbatm_do_heavy_init, instance, "%s", 994 instance->driver->driver_name); 995 if (IS_ERR(t)) { 996 usb_err(instance, "%s: failed to create kernel_thread (%ld)!\n", 997 __func__, PTR_ERR(t)); 998 return PTR_ERR(t); 999 } 1000 1001 instance->thread = t; 1002 wake_up_process(t); 1003 wait_for_completion(&instance->thread_started); 1004 1005 return 0; 1006 } 1007 1008 static void usbatm_tasklet_schedule(unsigned long data) 1009 { 1010 tasklet_schedule((struct tasklet_struct *) data); 1011 } 1012 1013 static void usbatm_init_channel(struct usbatm_channel *channel) 1014 { 1015 spin_lock_init(&channel->lock); 1016 INIT_LIST_HEAD(&channel->list); 1017 channel->delay.function = usbatm_tasklet_schedule; 1018 channel->delay.data = (unsigned long) &channel->tasklet; 1019 init_timer(&channel->delay); 1020 } 1021 1022 int usbatm_usb_probe(struct usb_interface *intf, const struct usb_device_id *id, 1023 struct usbatm_driver *driver) 1024 { 1025 struct device *dev = &intf->dev; 1026 struct usb_device *usb_dev = interface_to_usbdev(intf); 1027 struct usbatm_data *instance; 1028 char *buf; 1029 int error = -ENOMEM; 1030 int i, length; 1031 unsigned int maxpacket, num_packets; 1032 1033 /* instance init */ 1034 instance = kzalloc(sizeof(*instance) + sizeof(struct urb *) * (num_rcv_urbs + num_snd_urbs), GFP_KERNEL); 1035 if (!instance) { 1036 dev_err(dev, "%s: no memory for instance data!\n", __func__); 1037 return -ENOMEM; 1038 } 1039 1040 /* public fields */ 1041 1042 instance->driver = driver; 1043 strlcpy(instance->driver_name, driver->driver_name, 1044 sizeof(instance->driver_name)); 1045 1046 instance->usb_dev = usb_dev; 1047 instance->usb_intf = intf; 1048 1049 buf = instance->description; 1050 length = sizeof(instance->description); 1051 1052 if ((i = usb_string(usb_dev, usb_dev->descriptor.iProduct, buf, length)) < 0) 1053 goto bind; 1054 1055 buf += i; 1056 length -= i; 1057 1058 i = scnprintf(buf, length, " ("); 1059 buf += i; 1060 length -= i; 1061 1062 if (length <= 0 || (i = usb_make_path(usb_dev, buf, length)) < 0) 1063 goto bind; 1064 1065 buf += i; 1066 length -= i; 1067 1068 snprintf(buf, length, ")"); 1069 1070 bind: 1071 if (driver->bind && (error = driver->bind(instance, intf, id)) < 0) { 1072 dev_err(dev, "%s: bind failed: %d!\n", __func__, error); 1073 goto fail_free; 1074 } 1075 1076 /* private fields */ 1077 1078 kref_init(&instance->refcount); /* dropped in usbatm_usb_disconnect */ 1079 mutex_init(&instance->serialize); 1080 1081 instance->thread = NULL; 1082 init_completion(&instance->thread_started); 1083 init_completion(&instance->thread_exited); 1084 1085 INIT_LIST_HEAD(&instance->vcc_list); 1086 skb_queue_head_init(&instance->sndqueue); 1087 1088 usbatm_init_channel(&instance->rx_channel); 1089 usbatm_init_channel(&instance->tx_channel); 1090 tasklet_init(&instance->rx_channel.tasklet, usbatm_rx_process, (unsigned long)instance); 1091 tasklet_init(&instance->tx_channel.tasklet, usbatm_tx_process, (unsigned long)instance); 1092 instance->rx_channel.stride = ATM_CELL_SIZE + driver->rx_padding; 1093 instance->tx_channel.stride = ATM_CELL_SIZE + driver->tx_padding; 1094 instance->rx_channel.usbatm = instance->tx_channel.usbatm = instance; 1095 1096 if ((instance->flags & UDSL_USE_ISOC) && driver->isoc_in) 1097 instance->rx_channel.endpoint = usb_rcvisocpipe(usb_dev, driver->isoc_in); 1098 else 1099 instance->rx_channel.endpoint = usb_rcvbulkpipe(usb_dev, driver->bulk_in); 1100 1101 instance->tx_channel.endpoint = usb_sndbulkpipe(usb_dev, driver->bulk_out); 1102 1103 /* tx buffer size must be a positive multiple of the stride */ 1104 instance->tx_channel.buf_size = max(instance->tx_channel.stride, 1105 snd_buf_bytes - (snd_buf_bytes % instance->tx_channel.stride)); 1106 1107 /* rx buffer size must be a positive multiple of the endpoint maxpacket */ 1108 maxpacket = usb_maxpacket(usb_dev, instance->rx_channel.endpoint, 0); 1109 1110 if ((maxpacket < 1) || (maxpacket > UDSL_MAX_BUF_SIZE)) { 1111 dev_err(dev, "%s: invalid endpoint %02x!\n", __func__, 1112 usb_pipeendpoint(instance->rx_channel.endpoint)); 1113 error = -EINVAL; 1114 goto fail_unbind; 1115 } 1116 1117 num_packets = max(1U, (rcv_buf_bytes + maxpacket / 2) / maxpacket); /* round */ 1118 1119 if (num_packets * maxpacket > UDSL_MAX_BUF_SIZE) 1120 num_packets--; 1121 1122 instance->rx_channel.buf_size = num_packets * maxpacket; 1123 instance->rx_channel.packet_size = maxpacket; 1124 1125 for (i = 0; i < 2; i++) { 1126 struct usbatm_channel *channel = i ? 1127 &instance->tx_channel : &instance->rx_channel; 1128 1129 dev_dbg(dev, "%s: using %d byte buffer for %s channel 0x%p\n", 1130 __func__, channel->buf_size, i ? "tx" : "rx", channel); 1131 } 1132 1133 /* initialize urbs */ 1134 1135 for (i = 0; i < num_rcv_urbs + num_snd_urbs; i++) { 1136 u8 *buffer; 1137 struct usbatm_channel *channel = i < num_rcv_urbs ? 1138 &instance->rx_channel : &instance->tx_channel; 1139 struct urb *urb; 1140 unsigned int iso_packets = usb_pipeisoc(channel->endpoint) ? channel->buf_size / channel->packet_size : 0; 1141 1142 urb = usb_alloc_urb(iso_packets, GFP_KERNEL); 1143 if (!urb) { 1144 dev_err(dev, "%s: no memory for urb %d!\n", __func__, i); 1145 error = -ENOMEM; 1146 goto fail_unbind; 1147 } 1148 1149 instance->urbs[i] = urb; 1150 1151 /* zero the tx padding to avoid leaking information */ 1152 buffer = kzalloc(channel->buf_size, GFP_KERNEL); 1153 if (!buffer) { 1154 dev_err(dev, "%s: no memory for buffer %d!\n", __func__, i); 1155 error = -ENOMEM; 1156 goto fail_unbind; 1157 } 1158 1159 usb_fill_bulk_urb(urb, instance->usb_dev, channel->endpoint, 1160 buffer, channel->buf_size, usbatm_complete, channel); 1161 if (iso_packets) { 1162 int j; 1163 urb->interval = 1; 1164 urb->transfer_flags = URB_ISO_ASAP; 1165 urb->number_of_packets = iso_packets; 1166 for (j = 0; j < iso_packets; j++) { 1167 urb->iso_frame_desc[j].offset = channel->packet_size * j; 1168 urb->iso_frame_desc[j].length = channel->packet_size; 1169 } 1170 } 1171 1172 /* put all tx URBs on the list of spares */ 1173 if (i >= num_rcv_urbs) 1174 list_add_tail(&urb->urb_list, &channel->list); 1175 1176 vdbg(&intf->dev, "%s: alloced buffer 0x%p buf size %u urb 0x%p", 1177 __func__, urb->transfer_buffer, urb->transfer_buffer_length, urb); 1178 } 1179 1180 instance->cached_vpi = ATM_VPI_UNSPEC; 1181 instance->cached_vci = ATM_VCI_UNSPEC; 1182 instance->cell_buf = kmalloc(instance->rx_channel.stride, GFP_KERNEL); 1183 1184 if (!instance->cell_buf) { 1185 dev_err(dev, "%s: no memory for cell buffer!\n", __func__); 1186 error = -ENOMEM; 1187 goto fail_unbind; 1188 } 1189 1190 if (!(instance->flags & UDSL_SKIP_HEAVY_INIT) && driver->heavy_init) { 1191 error = usbatm_heavy_init(instance); 1192 } else { 1193 complete(&instance->thread_exited); /* pretend that heavy_init was run */ 1194 error = usbatm_atm_init(instance); 1195 } 1196 1197 if (error < 0) 1198 goto fail_unbind; 1199 1200 usb_get_dev(usb_dev); 1201 usb_set_intfdata(intf, instance); 1202 1203 return 0; 1204 1205 fail_unbind: 1206 if (instance->driver->unbind) 1207 instance->driver->unbind(instance, intf); 1208 fail_free: 1209 kfree(instance->cell_buf); 1210 1211 for (i = 0; i < num_rcv_urbs + num_snd_urbs; i++) { 1212 if (instance->urbs[i]) 1213 kfree(instance->urbs[i]->transfer_buffer); 1214 usb_free_urb(instance->urbs[i]); 1215 } 1216 1217 kfree(instance); 1218 1219 return error; 1220 } 1221 EXPORT_SYMBOL_GPL(usbatm_usb_probe); 1222 1223 void usbatm_usb_disconnect(struct usb_interface *intf) 1224 { 1225 struct device *dev = &intf->dev; 1226 struct usbatm_data *instance = usb_get_intfdata(intf); 1227 struct usbatm_vcc_data *vcc_data; 1228 int i; 1229 1230 if (!instance) { 1231 dev_dbg(dev, "%s: NULL instance!\n", __func__); 1232 return; 1233 } 1234 1235 usb_set_intfdata(intf, NULL); 1236 1237 mutex_lock(&instance->serialize); 1238 instance->disconnected = 1; 1239 if (instance->thread != NULL) 1240 send_sig(SIGTERM, instance->thread, 1); 1241 mutex_unlock(&instance->serialize); 1242 1243 wait_for_completion(&instance->thread_exited); 1244 1245 mutex_lock(&instance->serialize); 1246 list_for_each_entry(vcc_data, &instance->vcc_list, list) 1247 vcc_release_async(vcc_data->vcc, -EPIPE); 1248 mutex_unlock(&instance->serialize); 1249 1250 tasklet_disable(&instance->rx_channel.tasklet); 1251 tasklet_disable(&instance->tx_channel.tasklet); 1252 1253 for (i = 0; i < num_rcv_urbs + num_snd_urbs; i++) 1254 usb_kill_urb(instance->urbs[i]); 1255 1256 del_timer_sync(&instance->rx_channel.delay); 1257 del_timer_sync(&instance->tx_channel.delay); 1258 1259 /* turn usbatm_[rt]x_process into something close to a no-op */ 1260 /* no need to take the spinlock */ 1261 INIT_LIST_HEAD(&instance->rx_channel.list); 1262 INIT_LIST_HEAD(&instance->tx_channel.list); 1263 1264 tasklet_enable(&instance->rx_channel.tasklet); 1265 tasklet_enable(&instance->tx_channel.tasklet); 1266 1267 if (instance->atm_dev && instance->driver->atm_stop) 1268 instance->driver->atm_stop(instance, instance->atm_dev); 1269 1270 if (instance->driver->unbind) 1271 instance->driver->unbind(instance, intf); 1272 1273 instance->driver_data = NULL; 1274 1275 for (i = 0; i < num_rcv_urbs + num_snd_urbs; i++) { 1276 kfree(instance->urbs[i]->transfer_buffer); 1277 usb_free_urb(instance->urbs[i]); 1278 } 1279 1280 kfree(instance->cell_buf); 1281 1282 /* ATM finalize */ 1283 if (instance->atm_dev) { 1284 atm_dev_deregister(instance->atm_dev); 1285 instance->atm_dev = NULL; 1286 } 1287 1288 usbatm_put_instance(instance); /* taken in usbatm_usb_probe */ 1289 } 1290 EXPORT_SYMBOL_GPL(usbatm_usb_disconnect); 1291 1292 1293 /*********** 1294 ** init ** 1295 ***********/ 1296 1297 static int __init usbatm_usb_init(void) 1298 { 1299 if (sizeof(struct usbatm_control) > FIELD_SIZEOF(struct sk_buff, cb)) { 1300 printk(KERN_ERR "%s unusable with this kernel!\n", usbatm_driver_name); 1301 return -EIO; 1302 } 1303 1304 if ((num_rcv_urbs > UDSL_MAX_RCV_URBS) 1305 || (num_snd_urbs > UDSL_MAX_SND_URBS) 1306 || (rcv_buf_bytes < 1) 1307 || (rcv_buf_bytes > UDSL_MAX_BUF_SIZE) 1308 || (snd_buf_bytes < 1) 1309 || (snd_buf_bytes > UDSL_MAX_BUF_SIZE)) 1310 return -EINVAL; 1311 1312 return 0; 1313 } 1314 module_init(usbatm_usb_init); 1315 1316 static void __exit usbatm_usb_exit(void) 1317 { 1318 } 1319 module_exit(usbatm_usb_exit); 1320 1321 MODULE_AUTHOR(DRIVER_AUTHOR); 1322 MODULE_DESCRIPTION(DRIVER_DESC); 1323 MODULE_LICENSE("GPL"); 1324 MODULE_VERSION(DRIVER_VERSION); 1325 1326 /************ 1327 ** debug ** 1328 ************/ 1329 1330 #ifdef VERBOSE_DEBUG 1331 static int usbatm_print_packet(struct usbatm_data *instance, 1332 const unsigned char *data, int len) 1333 { 1334 unsigned char buffer[256]; 1335 int i = 0, j = 0; 1336 1337 for (i = 0; i < len;) { 1338 buffer[0] = '\0'; 1339 sprintf(buffer, "%.3d :", i); 1340 for (j = 0; (j < 16) && (i < len); j++, i++) 1341 sprintf(buffer, "%s %2.2x", buffer, data[i]); 1342 dev_dbg(&instance->usb_intf->dev, "%s", buffer); 1343 } 1344 return i; 1345 } 1346 #endif 1347