.. | .. |
---|
641 | 641 | scq = kzalloc(sizeof(struct scq_info), GFP_KERNEL); |
---|
642 | 642 | if (!scq) |
---|
643 | 643 | return NULL; |
---|
644 | | - scq->base = dma_zalloc_coherent(&card->pcidev->dev, SCQ_SIZE, |
---|
645 | | - &scq->paddr, GFP_KERNEL); |
---|
| 644 | + scq->base = dma_alloc_coherent(&card->pcidev->dev, SCQ_SIZE, |
---|
| 645 | + &scq->paddr, GFP_KERNEL); |
---|
646 | 646 | if (scq->base == NULL) { |
---|
647 | 647 | kfree(scq); |
---|
648 | 648 | return NULL; |
---|
.. | .. |
---|
835 | 835 | unsigned long flags; |
---|
836 | 836 | int error; |
---|
837 | 837 | int aal; |
---|
| 838 | + u32 word4; |
---|
838 | 839 | |
---|
839 | 840 | if (skb->len == 0) { |
---|
840 | 841 | printk("%s: invalid skb->len (%d)\n", card->name, skb->len); |
---|
.. | .. |
---|
846 | 847 | |
---|
847 | 848 | tbd = &IDT77252_PRV_TBD(skb); |
---|
848 | 849 | vcc = ATM_SKB(skb)->vcc; |
---|
| 850 | + word4 = (skb->data[0] << 24) | (skb->data[1] << 16) | |
---|
| 851 | + (skb->data[2] << 8) | (skb->data[3] << 0); |
---|
849 | 852 | |
---|
850 | 853 | IDT77252_PRV_PADDR(skb) = dma_map_single(&card->pcidev->dev, skb->data, |
---|
851 | 854 | skb->len, DMA_TO_DEVICE); |
---|
.. | .. |
---|
859 | 862 | tbd->word_1 = SAR_TBD_OAM | ATM_CELL_PAYLOAD | SAR_TBD_EPDU; |
---|
860 | 863 | tbd->word_2 = IDT77252_PRV_PADDR(skb) + 4; |
---|
861 | 864 | tbd->word_3 = 0x00000000; |
---|
862 | | - tbd->word_4 = (skb->data[0] << 24) | (skb->data[1] << 16) | |
---|
863 | | - (skb->data[2] << 8) | (skb->data[3] << 0); |
---|
| 865 | + tbd->word_4 = word4; |
---|
864 | 866 | |
---|
865 | 867 | if (test_bit(VCF_RSV, &vc->flags)) |
---|
866 | 868 | vc = card->vcs[0]; |
---|
.. | .. |
---|
890 | 892 | |
---|
891 | 893 | tbd->word_2 = IDT77252_PRV_PADDR(skb) + 4; |
---|
892 | 894 | tbd->word_3 = 0x00000000; |
---|
893 | | - tbd->word_4 = (skb->data[0] << 24) | (skb->data[1] << 16) | |
---|
894 | | - (skb->data[2] << 8) | (skb->data[3] << 0); |
---|
| 895 | + tbd->word_4 = word4; |
---|
895 | 896 | break; |
---|
896 | 897 | |
---|
897 | 898 | case ATM_AAL5: |
---|
.. | .. |
---|
971 | 972 | { |
---|
972 | 973 | struct rsq_entry *rsqe; |
---|
973 | 974 | |
---|
974 | | - card->rsq.base = dma_zalloc_coherent(&card->pcidev->dev, RSQSIZE, |
---|
975 | | - &card->rsq.paddr, GFP_KERNEL); |
---|
| 975 | + card->rsq.base = dma_alloc_coherent(&card->pcidev->dev, RSQSIZE, |
---|
| 976 | + &card->rsq.paddr, GFP_KERNEL); |
---|
976 | 977 | if (card->rsq.base == NULL) { |
---|
977 | 978 | printk("%s: can't allocate RSQ.\n", card->name); |
---|
978 | 979 | return -1; |
---|
.. | .. |
---|
1379 | 1380 | printk("%s: can't allocate TSQ.\n", card->name); |
---|
1380 | 1381 | return -1; |
---|
1381 | 1382 | } |
---|
1382 | | - memset(card->tsq.base, 0, TSQSIZE); |
---|
1383 | 1383 | |
---|
1384 | 1384 | card->tsq.last = card->tsq.base + TSQ_NUM_ENTRIES - 1; |
---|
1385 | 1385 | card->tsq.next = card->tsq.last; |
---|
.. | .. |
---|
2915 | 2915 | |
---|
2916 | 2916 | recycle_rx_pool_skb(card, &vc->rcv.rx_pool); |
---|
2917 | 2917 | } |
---|
| 2918 | + kfree(vc); |
---|
2918 | 2919 | } |
---|
2919 | 2920 | } |
---|
2920 | 2921 | } |
---|
.. | .. |
---|
2956 | 2957 | clear_bit(VCF_IDLE, &vc->flags); |
---|
2957 | 2958 | writel(TCMDQ_START | 0, SAR_REG_TCMDQ); |
---|
2958 | 2959 | return 0; |
---|
| 2960 | +} |
---|
| 2961 | + |
---|
| 2962 | +static void |
---|
| 2963 | +close_card_ubr0(struct idt77252_dev *card) |
---|
| 2964 | +{ |
---|
| 2965 | + struct vc_map *vc = card->vcs[0]; |
---|
| 2966 | + |
---|
| 2967 | + free_scq(card, vc->scq); |
---|
| 2968 | + kfree(vc); |
---|
2959 | 2969 | } |
---|
2960 | 2970 | |
---|
2961 | 2971 | static int |
---|
.. | .. |
---|
3007 | 3017 | struct idt77252_dev *card = dev->dev_data; |
---|
3008 | 3018 | u32 conf; |
---|
3009 | 3019 | |
---|
| 3020 | + close_card_ubr0(card); |
---|
3010 | 3021 | close_card_oam(card); |
---|
3011 | 3022 | |
---|
3012 | 3023 | conf = SAR_CFG_RXPTH | /* enable receive path */ |
---|
.. | .. |
---|
3390 | 3401 | writel(0, SAR_REG_GP); |
---|
3391 | 3402 | |
---|
3392 | 3403 | /* Initialize RAW Cell Handle Register */ |
---|
3393 | | - card->raw_cell_hnd = dma_zalloc_coherent(&card->pcidev->dev, |
---|
3394 | | - 2 * sizeof(u32), |
---|
3395 | | - &card->raw_cell_paddr, |
---|
3396 | | - GFP_KERNEL); |
---|
| 3404 | + card->raw_cell_hnd = dma_alloc_coherent(&card->pcidev->dev, |
---|
| 3405 | + 2 * sizeof(u32), |
---|
| 3406 | + &card->raw_cell_paddr, |
---|
| 3407 | + GFP_KERNEL); |
---|
3397 | 3408 | if (!card->raw_cell_hnd) { |
---|
3398 | 3409 | printk("%s: memory allocation failure.\n", card->name); |
---|
3399 | 3410 | deinit_card(card); |
---|
.. | .. |
---|
3767 | 3778 | card = idt77252_chain; |
---|
3768 | 3779 | dev = card->atmdev; |
---|
3769 | 3780 | idt77252_chain = card->next; |
---|
| 3781 | + del_timer_sync(&card->tst_timer); |
---|
3770 | 3782 | |
---|
3771 | 3783 | if (dev->phy->stop) |
---|
3772 | 3784 | dev->phy->stop(dev); |
---|