acenic.c (5d6bcdfe38ce883946aebf751a64695471ce1ab5) acenic.c (9e903e085262ffbf1fc44a17ac06058aca03524a)
1/*
2 * acenic.c: Linux driver for the Alteon AceNIC Gigabit Ethernet card
3 * and other Tigon based cards.
4 *
5 * Copyright 1998-2002 by Jes Sorensen, <jes@trained-monkey.org>.
6 *
7 * Thanks to Alteon and 3Com for providing hardware and documentation
8 * enabling me to write this driver.

--- 2464 unchanged lines hidden (view full) ---

2473 vlan_tag = vlan_tx_tag_get(skb);
2474 }
2475
2476 ace_load_tx_bd(ap, ap->tx_ring + idx, mapping, flagsize, vlan_tag);
2477
2478 idx = (idx + 1) % ACE_TX_RING_ENTRIES(ap);
2479
2480 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
1/*
2 * acenic.c: Linux driver for the Alteon AceNIC Gigabit Ethernet card
3 * and other Tigon based cards.
4 *
5 * Copyright 1998-2002 by Jes Sorensen, <jes@trained-monkey.org>.
6 *
7 * Thanks to Alteon and 3Com for providing hardware and documentation
8 * enabling me to write this driver.

--- 2464 unchanged lines hidden (view full) ---

2473 vlan_tag = vlan_tx_tag_get(skb);
2474 }
2475
2476 ace_load_tx_bd(ap, ap->tx_ring + idx, mapping, flagsize, vlan_tag);
2477
2478 idx = (idx + 1) % ACE_TX_RING_ENTRIES(ap);
2479
2480 for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
2481 skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
2481 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
2482 struct tx_ring_info *info;
2483
2482 struct tx_ring_info *info;
2483
2484 len += frag->size;
2484 len += skb_frag_size(frag);
2485 info = ap->skb->tx_skbuff + idx;
2486 desc = ap->tx_ring + idx;
2487
2488 mapping = skb_frag_dma_map(&ap->pdev->dev, frag, 0,
2485 info = ap->skb->tx_skbuff + idx;
2486 desc = ap->tx_ring + idx;
2487
2488 mapping = skb_frag_dma_map(&ap->pdev->dev, frag, 0,
2489 frag->size,
2489 skb_frag_size(frag),
2490 DMA_TO_DEVICE);
2491
2490 DMA_TO_DEVICE);
2491
2492 flagsize = (frag->size << 16);
2492 flagsize = skb_frag_size(frag) << 16;
2493 if (skb->ip_summed == CHECKSUM_PARTIAL)
2494 flagsize |= BD_FLG_TCP_UDP_SUM;
2495 idx = (idx + 1) % ACE_TX_RING_ENTRIES(ap);
2496
2497 if (i == skb_shinfo(skb)->nr_frags - 1) {
2498 flagsize |= BD_FLG_END;
2499 if (tx_ring_full(ap, ap->tx_ret_csm, idx))
2500 flagsize |= BD_FLG_COAL_NOW;
2501
2502 /*
2503 * Only the last fragment frees
2504 * the skb!
2505 */
2506 info->skb = skb;
2507 } else {
2508 info->skb = NULL;
2509 }
2510 dma_unmap_addr_set(info, mapping, mapping);
2493 if (skb->ip_summed == CHECKSUM_PARTIAL)
2494 flagsize |= BD_FLG_TCP_UDP_SUM;
2495 idx = (idx + 1) % ACE_TX_RING_ENTRIES(ap);
2496
2497 if (i == skb_shinfo(skb)->nr_frags - 1) {
2498 flagsize |= BD_FLG_END;
2499 if (tx_ring_full(ap, ap->tx_ret_csm, idx))
2500 flagsize |= BD_FLG_COAL_NOW;
2501
2502 /*
2503 * Only the last fragment frees
2504 * the skb!
2505 */
2506 info->skb = skb;
2507 } else {
2508 info->skb = NULL;
2509 }
2510 dma_unmap_addr_set(info, mapping, mapping);
2511 dma_unmap_len_set(info, maplen, frag->size);
2511 dma_unmap_len_set(info, maplen, skb_frag_size(frag));
2512 ace_load_tx_bd(ap, desc, mapping, flagsize, vlan_tag);
2513 }
2514 }
2515
2516 wmb();
2517 ap->tx_prd = idx;
2518 ace_set_txprd(regs, ap, idx);
2519

--- 687 unchanged lines hidden ---
2512 ace_load_tx_bd(ap, desc, mapping, flagsize, vlan_tag);
2513 }
2514 }
2515
2516 wmb();
2517 ap->tx_prd = idx;
2518 ace_set_txprd(regs, ap, idx);
2519

--- 687 unchanged lines hidden ---