catc 179 drivers/net/usb/catc.c void (*callback)(struct catc *catc, struct ctrl_queue *q); catc 193 drivers/net/usb/catc.c #define catc_get_mac(catc, mac) catc_ctrl_msg(catc, USB_DIR_IN, GetMac, 0, 0, mac, 6) catc 194 drivers/net/usb/catc.c #define catc_reset(catc) catc_ctrl_msg(catc, USB_DIR_OUT, Reset, 0, 0, NULL, 0) catc 195 drivers/net/usb/catc.c #define catc_set_reg(catc, reg, val) catc_ctrl_msg(catc, USB_DIR_OUT, SetReg, val, reg, NULL, 0) catc 196 drivers/net/usb/catc.c #define catc_get_reg(catc, reg, buf) catc_ctrl_msg(catc, USB_DIR_IN, GetReg, 0, reg, buf, 1) catc 197 drivers/net/usb/catc.c #define catc_write_mem(catc, addr, buf, size) catc_ctrl_msg(catc, USB_DIR_OUT, WriteMem, 0, addr, buf, size) catc 198 drivers/net/usb/catc.c #define catc_read_mem(catc, addr, buf, size) catc_ctrl_msg(catc, USB_DIR_IN, ReadMem, 0, addr, buf, size) catc 200 drivers/net/usb/catc.c #define f5u011_rxmode(catc, rxmode) catc_ctrl_msg(catc, USB_DIR_OUT, SetRxMode, 0, 1, rxmode, 2) catc 201 drivers/net/usb/catc.c #define f5u011_rxmode_async(catc, rxmode) catc_ctrl_async(catc, USB_DIR_OUT, SetRxMode, 0, 1, &rxmode, 2, NULL) catc 202 drivers/net/usb/catc.c #define f5u011_mchash_async(catc, hash) catc_ctrl_async(catc, USB_DIR_OUT, SetRxMode, 0, 2, &hash, 8, NULL) catc 204 drivers/net/usb/catc.c #define catc_set_reg_async(catc, reg, val) catc_ctrl_async(catc, USB_DIR_OUT, SetReg, val, reg, NULL, 0, NULL) catc 205 drivers/net/usb/catc.c #define catc_get_reg_async(catc, reg, cb) catc_ctrl_async(catc, USB_DIR_IN, GetReg, 0, reg, NULL, 1, cb) catc 206 drivers/net/usb/catc.c #define catc_write_mem_async(catc, addr, buf, size) catc_ctrl_async(catc, USB_DIR_OUT, WriteMem, 0, addr, buf, size, NULL) catc 214 drivers/net/usb/catc.c struct catc *catc = urb->context; catc 220 drivers/net/usb/catc.c if (!catc->is_f5u011) { catc 221 drivers/net/usb/catc.c clear_bit(RX_RUNNING, &catc->flags); catc 232 drivers/net/usb/catc.c if(!catc->is_f5u011) { catc 235 drivers/net/usb/catc.c catc->netdev->stats.rx_length_errors++; catc 236 drivers/net/usb/catc.c catc->netdev->stats.rx_errors++; catc 249 drivers/net/usb/catc.c skb->protocol = eth_type_trans(skb, catc->netdev); catc 252 drivers/net/usb/catc.c catc->netdev->stats.rx_packets++; catc 253 drivers/net/usb/catc.c catc->netdev->stats.rx_bytes += pkt_len; catc 256 drivers/net/usb/catc.c if (catc->is_f5u011) catc 262 drivers/net/usb/catc.c if (catc->is_f5u011) { catc 263 drivers/net/usb/catc.c if (atomic_read(&catc->recq_sz)) { catc 265 drivers/net/usb/catc.c atomic_dec(&catc->recq_sz); catc 266 drivers/net/usb/catc.c netdev_dbg(catc->netdev, "getting extra packet\n"); catc 267 drivers/net/usb/catc.c urb->dev = catc->usbdev; catc 269 drivers/net/usb/catc.c netdev_dbg(catc->netdev, catc 273 drivers/net/usb/catc.c clear_bit(RX_RUNNING, &catc->flags); catc 280 drivers/net/usb/catc.c struct catc *catc = urb->context; catc 286 drivers/net/usb/catc.c if (!catc->is_f5u011) { catc 316 drivers/net/usb/catc.c netif_carrier_on(catc->netdev); catc 317 drivers/net/usb/catc.c netdev_dbg(catc->netdev, "link ok\n"); catc 321 drivers/net/usb/catc.c netif_carrier_off(catc->netdev); catc 322 drivers/net/usb/catc.c netdev_dbg(catc->netdev, "link bad\n"); catc 326 drivers/net/usb/catc.c if (test_and_set_bit(RX_RUNNING, &catc->flags)) { catc 327 drivers/net/usb/catc.c if (catc->is_f5u011) catc 328 drivers/net/usb/catc.c atomic_inc(&catc->recq_sz); catc 330 drivers/net/usb/catc.c catc->rx_urb->dev = catc->usbdev; catc 331 drivers/net/usb/catc.c if ((res = usb_submit_urb(catc->rx_urb, GFP_ATOMIC)) < 0) { catc 332 drivers/net/usb/catc.c dev_err(&catc->usbdev->dev, catc 340 drivers/net/usb/catc.c dev_err(&catc->usbdev->dev, catc 342 drivers/net/usb/catc.c catc->usbdev->bus->bus_name, catc 343 drivers/net/usb/catc.c catc->usbdev->devpath, res); catc 350 drivers/net/usb/catc.c static int catc_tx_run(struct catc *catc) catc 354 drivers/net/usb/catc.c if (catc->is_f5u011) catc 355 drivers/net/usb/catc.c catc->tx_ptr = (catc->tx_ptr + 63) & ~63; catc 357 drivers/net/usb/catc.c catc->tx_urb->transfer_buffer_length = catc->tx_ptr; catc 358 drivers/net/usb/catc.c catc->tx_urb->transfer_buffer = catc->tx_buf[catc->tx_idx]; catc 359 drivers/net/usb/catc.c catc->tx_urb->dev = catc->usbdev; catc 361 drivers/net/usb/catc.c if ((status = usb_submit_urb(catc->tx_urb, GFP_ATOMIC)) < 0) catc 362 drivers/net/usb/catc.c dev_err(&catc->usbdev->dev, "submit(tx_urb), status %d\n", catc 365 drivers/net/usb/catc.c catc->tx_idx = !catc->tx_idx; catc 366 drivers/net/usb/catc.c catc->tx_ptr = 0; catc 368 drivers/net/usb/catc.c netif_trans_update(catc->netdev); catc 374 drivers/net/usb/catc.c struct catc *catc = urb->context; catc 381 drivers/net/usb/catc.c netif_trans_update(catc->netdev); catc 382 drivers/net/usb/catc.c catc->netdev->stats.tx_errors++; catc 383 drivers/net/usb/catc.c clear_bit(TX_RUNNING, &catc->flags); catc 384 drivers/net/usb/catc.c netif_wake_queue(catc->netdev); catc 394 drivers/net/usb/catc.c spin_lock_irqsave(&catc->tx_lock, flags); catc 396 drivers/net/usb/catc.c if (catc->tx_ptr) { catc 397 drivers/net/usb/catc.c r = catc_tx_run(catc); catc 399 drivers/net/usb/catc.c clear_bit(TX_RUNNING, &catc->flags); catc 401 drivers/net/usb/catc.c clear_bit(TX_RUNNING, &catc->flags); catc 404 drivers/net/usb/catc.c netif_wake_queue(catc->netdev); catc 406 drivers/net/usb/catc.c spin_unlock_irqrestore(&catc->tx_lock, flags); catc 412 drivers/net/usb/catc.c struct catc *catc = netdev_priv(netdev); catc 417 drivers/net/usb/catc.c spin_lock_irqsave(&catc->tx_lock, flags); catc 419 drivers/net/usb/catc.c catc->tx_ptr = (((catc->tx_ptr - 1) >> 6) + 1) << 6; catc 420 drivers/net/usb/catc.c tx_buf = catc->tx_buf[catc->tx_idx] + catc->tx_ptr; catc 421 drivers/net/usb/catc.c if (catc->is_f5u011) catc 426 drivers/net/usb/catc.c catc->tx_ptr += skb->len + 2; catc 428 drivers/net/usb/catc.c if (!test_and_set_bit(TX_RUNNING, &catc->flags)) { catc 429 drivers/net/usb/catc.c r = catc_tx_run(catc); catc 431 drivers/net/usb/catc.c clear_bit(TX_RUNNING, &catc->flags); catc 434 drivers/net/usb/catc.c if ((catc->is_f5u011 && catc->tx_ptr) || catc 435 drivers/net/usb/catc.c (catc->tx_ptr >= ((TX_MAX_BURST - 1) * (PKT_SZ + 2)))) catc 438 drivers/net/usb/catc.c spin_unlock_irqrestore(&catc->tx_lock, flags); catc 441 drivers/net/usb/catc.c catc->netdev->stats.tx_bytes += skb->len; catc 442 drivers/net/usb/catc.c catc->netdev->stats.tx_packets++; catc 452 drivers/net/usb/catc.c struct catc *catc = netdev_priv(netdev); catc 455 drivers/net/usb/catc.c usb_unlink_urb(catc->tx_urb); catc 462 drivers/net/usb/catc.c static int catc_ctrl_msg(struct catc *catc, u8 dir, u8 request, u16 value, u16 index, void *buf, int len) catc 464 drivers/net/usb/catc.c int retval = usb_control_msg(catc->usbdev, catc 465 drivers/net/usb/catc.c dir ? usb_rcvctrlpipe(catc->usbdev, 0) : usb_sndctrlpipe(catc->usbdev, 0), catc 470 drivers/net/usb/catc.c static void catc_ctrl_run(struct catc *catc) catc 472 drivers/net/usb/catc.c struct ctrl_queue *q = catc->ctrl_queue + catc->ctrl_tail; catc 473 drivers/net/usb/catc.c struct usb_device *usbdev = catc->usbdev; catc 474 drivers/net/usb/catc.c struct urb *urb = catc->ctrl_urb; catc 475 drivers/net/usb/catc.c struct usb_ctrlrequest *dr = &catc->ctrl_dr; catc 486 drivers/net/usb/catc.c urb->transfer_buffer = catc->ctrl_buf; catc 491 drivers/net/usb/catc.c memcpy(catc->ctrl_buf, q->buf, q->len); catc 493 drivers/net/usb/catc.c if ((status = usb_submit_urb(catc->ctrl_urb, GFP_ATOMIC))) catc 494 drivers/net/usb/catc.c dev_err(&catc->usbdev->dev, "submit(ctrl_urb) status %d\n", catc 500 drivers/net/usb/catc.c struct catc *catc = urb->context; catc 509 drivers/net/usb/catc.c spin_lock_irqsave(&catc->ctrl_lock, flags); catc 511 drivers/net/usb/catc.c q = catc->ctrl_queue + catc->ctrl_tail; catc 515 drivers/net/usb/catc.c memcpy(q->buf, catc->ctrl_buf, q->len); catc 517 drivers/net/usb/catc.c q->buf = catc->ctrl_buf; catc 521 drivers/net/usb/catc.c q->callback(catc, q); catc 523 drivers/net/usb/catc.c catc->ctrl_tail = (catc->ctrl_tail + 1) & (CTRL_QUEUE - 1); catc 525 drivers/net/usb/catc.c if (catc->ctrl_head != catc->ctrl_tail) catc 526 drivers/net/usb/catc.c catc_ctrl_run(catc); catc 528 drivers/net/usb/catc.c clear_bit(CTRL_RUNNING, &catc->flags); catc 530 drivers/net/usb/catc.c spin_unlock_irqrestore(&catc->ctrl_lock, flags); catc 533 drivers/net/usb/catc.c static int catc_ctrl_async(struct catc *catc, u8 dir, u8 request, u16 value, catc 534 drivers/net/usb/catc.c u16 index, void *buf, int len, void (*callback)(struct catc *catc, struct ctrl_queue *q)) catc 540 drivers/net/usb/catc.c spin_lock_irqsave(&catc->ctrl_lock, flags); catc 542 drivers/net/usb/catc.c q = catc->ctrl_queue + catc->ctrl_head; catc 552 drivers/net/usb/catc.c catc->ctrl_head = (catc->ctrl_head + 1) & (CTRL_QUEUE - 1); catc 554 drivers/net/usb/catc.c if (catc->ctrl_head == catc->ctrl_tail) { catc 555 drivers/net/usb/catc.c dev_err(&catc->usbdev->dev, "ctrl queue full\n"); catc 556 drivers/net/usb/catc.c catc->ctrl_tail = (catc->ctrl_tail + 1) & (CTRL_QUEUE - 1); catc 560 drivers/net/usb/catc.c if (!test_and_set_bit(CTRL_RUNNING, &catc->flags)) catc 561 drivers/net/usb/catc.c catc_ctrl_run(catc); catc 563 drivers/net/usb/catc.c spin_unlock_irqrestore(&catc->ctrl_lock, flags); catc 572 drivers/net/usb/catc.c static void catc_stats_done(struct catc *catc, struct ctrl_queue *q) catc 577 drivers/net/usb/catc.c catc->stats_buf[index] = *((char *)q->buf); catc 582 drivers/net/usb/catc.c data = ((u16)catc->stats_buf[index] << 8) | catc->stats_buf[index + 1]; catc 583 drivers/net/usb/catc.c last = catc->stats_vals[index >> 1]; catc 588 drivers/net/usb/catc.c catc->netdev->stats.collisions += data - last; catc 591 drivers/net/usb/catc.c catc->netdev->stats.tx_aborted_errors += data - last; catc 592 drivers/net/usb/catc.c catc->netdev->stats.tx_errors += data - last; catc 595 drivers/net/usb/catc.c catc->netdev->stats.rx_frame_errors += data - last; catc 596 drivers/net/usb/catc.c catc->netdev->stats.rx_errors += data - last; catc 600 drivers/net/usb/catc.c catc->stats_vals[index >> 1] = data; catc 605 drivers/net/usb/catc.c struct catc *catc = from_timer(catc, t, timer); catc 609 drivers/net/usb/catc.c catc_get_reg_async(catc, EthStats + 7 - i, catc_stats_done); catc 611 drivers/net/usb/catc.c mod_timer(&catc->timer, jiffies + STATS_UPDATE); catc 628 drivers/net/usb/catc.c struct catc *catc = netdev_priv(netdev); catc 634 drivers/net/usb/catc.c memset(catc->multicast, 0, 64); catc 636 drivers/net/usb/catc.c catc_multicast(broadcast, catc->multicast); catc 637 drivers/net/usb/catc.c catc_multicast(netdev->dev_addr, catc->multicast); catc 640 drivers/net/usb/catc.c memset(catc->multicast, 0xff, 64); catc 641 drivers/net/usb/catc.c rx |= (!catc->is_f5u011) ? RxPromisc : AltRxPromisc; catc 645 drivers/net/usb/catc.c memset(catc->multicast, 0xff, 64); catc 649 drivers/net/usb/catc.c if (!catc->is_f5u011) { catc 650 drivers/net/usb/catc.c catc->multicast[(crc >> 3) & 0x3f] |= 1 << (crc & 7); catc 652 drivers/net/usb/catc.c catc->multicast[7-(crc >> 29)] |= 1 << ((crc >> 26) & 7); catc 656 drivers/net/usb/catc.c if (!catc->is_f5u011) { catc 657 drivers/net/usb/catc.c catc_set_reg_async(catc, RxUnit, rx); catc 658 drivers/net/usb/catc.c catc_write_mem_async(catc, 0xfa80, catc->multicast, 64); catc 660 drivers/net/usb/catc.c f5u011_mchash_async(catc, catc->multicast); catc 661 drivers/net/usb/catc.c if (catc->rxmode[0] != rx) { catc 662 drivers/net/usb/catc.c catc->rxmode[0] = rx; catc 663 drivers/net/usb/catc.c netdev_dbg(catc->netdev, catc 665 drivers/net/usb/catc.c catc->rxmode[0], catc->rxmode[1]); catc 666 drivers/net/usb/catc.c f5u011_rxmode_async(catc, catc->rxmode); catc 674 drivers/net/usb/catc.c struct catc *catc = netdev_priv(dev); catc 677 drivers/net/usb/catc.c usb_make_path(catc->usbdev, info->bus_info, sizeof(info->bus_info)); catc 683 drivers/net/usb/catc.c struct catc *catc = netdev_priv(dev); catc 684 drivers/net/usb/catc.c if (!catc->is_f5u011) catc 716 drivers/net/usb/catc.c struct catc *catc = netdev_priv(netdev); catc 719 drivers/net/usb/catc.c catc->irq_urb->dev = catc->usbdev; catc 720 drivers/net/usb/catc.c if ((status = usb_submit_urb(catc->irq_urb, GFP_KERNEL)) < 0) { catc 721 drivers/net/usb/catc.c dev_err(&catc->usbdev->dev, "submit(irq_urb) status %d\n", catc 728 drivers/net/usb/catc.c if (!catc->is_f5u011) catc 729 drivers/net/usb/catc.c mod_timer(&catc->timer, jiffies + STATS_UPDATE); catc 736 drivers/net/usb/catc.c struct catc *catc = netdev_priv(netdev); catc 740 drivers/net/usb/catc.c if (!catc->is_f5u011) catc 741 drivers/net/usb/catc.c del_timer_sync(&catc->timer); catc 743 drivers/net/usb/catc.c usb_kill_urb(catc->rx_urb); catc 744 drivers/net/usb/catc.c usb_kill_urb(catc->tx_urb); catc 745 drivers/net/usb/catc.c usb_kill_urb(catc->irq_urb); catc 746 drivers/net/usb/catc.c usb_kill_urb(catc->ctrl_urb); catc 771 drivers/net/usb/catc.c struct catc *catc; catc 781 drivers/net/usb/catc.c netdev = alloc_etherdev(sizeof(struct catc)); catc 785 drivers/net/usb/catc.c catc = netdev_priv(netdev); catc 791 drivers/net/usb/catc.c catc->usbdev = usbdev; catc 792 drivers/net/usb/catc.c catc->netdev = netdev; catc 794 drivers/net/usb/catc.c spin_lock_init(&catc->tx_lock); catc 795 drivers/net/usb/catc.c spin_lock_init(&catc->ctrl_lock); catc 797 drivers/net/usb/catc.c timer_setup(&catc->timer, catc_stats_timer, 0); catc 799 drivers/net/usb/catc.c catc->ctrl_urb = usb_alloc_urb(0, GFP_KERNEL); catc 800 drivers/net/usb/catc.c catc->tx_urb = usb_alloc_urb(0, GFP_KERNEL); catc 801 drivers/net/usb/catc.c catc->rx_urb = usb_alloc_urb(0, GFP_KERNEL); catc 802 drivers/net/usb/catc.c catc->irq_urb = usb_alloc_urb(0, GFP_KERNEL); catc 803 drivers/net/usb/catc.c if ((!catc->ctrl_urb) || (!catc->tx_urb) || catc 804 drivers/net/usb/catc.c (!catc->rx_urb) || (!catc->irq_urb)) { catc 813 drivers/net/usb/catc.c le16_to_cpu(catc->usbdev->descriptor.bcdDevice) == 0x0130) { catc 815 drivers/net/usb/catc.c catc->is_f5u011 = 1; catc 816 drivers/net/usb/catc.c atomic_set(&catc->recq_sz, 0); catc 822 drivers/net/usb/catc.c usb_fill_control_urb(catc->ctrl_urb, usbdev, usb_sndctrlpipe(usbdev, 0), catc 823 drivers/net/usb/catc.c NULL, NULL, 0, catc_ctrl_done, catc); catc 825 drivers/net/usb/catc.c usb_fill_bulk_urb(catc->tx_urb, usbdev, usb_sndbulkpipe(usbdev, 1), catc 826 drivers/net/usb/catc.c NULL, 0, catc_tx_done, catc); catc 828 drivers/net/usb/catc.c usb_fill_bulk_urb(catc->rx_urb, usbdev, usb_rcvbulkpipe(usbdev, 1), catc 829 drivers/net/usb/catc.c catc->rx_buf, pktsz, catc_rx_done, catc); catc 831 drivers/net/usb/catc.c usb_fill_int_urb(catc->irq_urb, usbdev, usb_rcvintpipe(usbdev, 2), catc 832 drivers/net/usb/catc.c catc->irq_buf, 2, catc_irq_done, catc, 1); catc 834 drivers/net/usb/catc.c if (!catc->is_f5u011) { catc 847 drivers/net/usb/catc.c catc_write_mem(catc, 0x7a80, buf, 4); catc 849 drivers/net/usb/catc.c catc_write_mem(catc, 0xfa80, buf, 4); catc 850 drivers/net/usb/catc.c catc_read_mem(catc, 0x7a80, buf, 4); catc 854 drivers/net/usb/catc.c catc_set_reg(catc, TxBufCount, 8); catc 855 drivers/net/usb/catc.c catc_set_reg(catc, RxBufCount, 32); catc 863 drivers/net/usb/catc.c catc_set_reg(catc, TxBufCount, 4); catc 864 drivers/net/usb/catc.c catc_set_reg(catc, RxBufCount, 16); catc 873 drivers/net/usb/catc.c catc_get_mac(catc, netdev->dev_addr); catc 878 drivers/net/usb/catc.c catc_set_reg(catc, StationAddr0 - i, netdev->dev_addr[i]); catc 883 drivers/net/usb/catc.c catc_multicast(broadcast, catc->multicast); catc 884 drivers/net/usb/catc.c catc_multicast(netdev->dev_addr, catc->multicast); catc 885 drivers/net/usb/catc.c catc_write_mem(catc, 0xfa80, catc->multicast, 64); catc 890 drivers/net/usb/catc.c catc_set_reg(catc, EthStats + i, 0); catc 891 drivers/net/usb/catc.c catc->last_stats = jiffies; catc 895 drivers/net/usb/catc.c catc_set_reg(catc, MaxBurst, RX_MAX_BURST); catc 896 drivers/net/usb/catc.c catc_set_reg(catc, OpModes, OpTxMerge | OpRxMerge | OpLenInclude | Op3MemWaits); catc 897 drivers/net/usb/catc.c catc_set_reg(catc, LEDCtrl, LEDLink); catc 898 drivers/net/usb/catc.c catc_set_reg(catc, RxUnit, RxEnable | RxPolarity | RxMultiCast); catc 901 drivers/net/usb/catc.c catc_reset(catc); catc 902 drivers/net/usb/catc.c catc_get_mac(catc, netdev->dev_addr); catc 905 drivers/net/usb/catc.c catc->rxmode[0] = RxEnable | RxPolarity | RxMultiCast; catc 906 drivers/net/usb/catc.c catc->rxmode[1] = 0; catc 907 drivers/net/usb/catc.c f5u011_rxmode(catc, catc->rxmode); catc 911 drivers/net/usb/catc.c netdev->name, (catc->is_f5u011) ? "Belkin F5U011" : "CATC EL1210A NetMate", catc 913 drivers/net/usb/catc.c usb_set_intfdata(intf, catc); catc 925 drivers/net/usb/catc.c usb_free_urb(catc->ctrl_urb); catc 926 drivers/net/usb/catc.c usb_free_urb(catc->tx_urb); catc 927 drivers/net/usb/catc.c usb_free_urb(catc->rx_urb); catc 928 drivers/net/usb/catc.c usb_free_urb(catc->irq_urb); catc 935 drivers/net/usb/catc.c struct catc *catc = usb_get_intfdata(intf); catc 938 drivers/net/usb/catc.c if (catc) { catc 939 drivers/net/usb/catc.c unregister_netdev(catc->netdev); catc 940 drivers/net/usb/catc.c usb_free_urb(catc->ctrl_urb); catc 941 drivers/net/usb/catc.c usb_free_urb(catc->tx_urb); catc 942 drivers/net/usb/catc.c usb_free_urb(catc->rx_urb); catc 943 drivers/net/usb/catc.c usb_free_urb(catc->irq_urb); catc 944 drivers/net/usb/catc.c free_netdev(catc->netdev);