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 --- |