cassini.c (597473720f4dc69749542bfcfed4a927a43d935e) cassini.c (b54c9d5bd6e38edac9ce3a3f95f14a1292b5268d)
1// SPDX-License-Identifier: GPL-2.0+
2/* cassini.c: Sun Microsystems Cassini(+) ethernet driver.
3 *
4 * Copyright (C) 2004 Sun Microsystems Inc.
5 * Copyright (C) 2003 Adrian Sun (asun@darksunrising.com)
6 *
7 * This driver uses the sungem driver (c) David Miller
8 * (davem@redhat.com) as its basis.

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

2029
2030 skb_shinfo(skb)->nr_frags++;
2031 skb->data_len += hlen - swivel;
2032 skb->truesize += hlen - swivel;
2033 skb->len += hlen - swivel;
2034
2035 __skb_frag_set_page(frag, page->buffer);
2036 __skb_frag_ref(frag);
1// SPDX-License-Identifier: GPL-2.0+
2/* cassini.c: Sun Microsystems Cassini(+) ethernet driver.
3 *
4 * Copyright (C) 2004 Sun Microsystems Inc.
5 * Copyright (C) 2003 Adrian Sun (asun@darksunrising.com)
6 *
7 * This driver uses the sungem driver (c) David Miller
8 * (davem@redhat.com) as its basis.

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

2029
2030 skb_shinfo(skb)->nr_frags++;
2031 skb->data_len += hlen - swivel;
2032 skb->truesize += hlen - swivel;
2033 skb->len += hlen - swivel;
2034
2035 __skb_frag_set_page(frag, page->buffer);
2036 __skb_frag_ref(frag);
2037 frag->page_offset = off;
2037 skb_frag_off_set(frag, off);
2038 skb_frag_size_set(frag, hlen - swivel);
2039
2040 /* any more data? */
2041 if ((words[0] & RX_COMP1_SPLIT_PKT) && ((dlen -= hlen) > 0)) {
2042 hlen = dlen;
2043 off = 0;
2044
2045 i = CAS_VAL(RX_COMP2_NEXT_INDEX, words[1]);

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

2053
2054 skb_shinfo(skb)->nr_frags++;
2055 skb->data_len += hlen;
2056 skb->len += hlen;
2057 frag++;
2058
2059 __skb_frag_set_page(frag, page->buffer);
2060 __skb_frag_ref(frag);
2038 skb_frag_size_set(frag, hlen - swivel);
2039
2040 /* any more data? */
2041 if ((words[0] & RX_COMP1_SPLIT_PKT) && ((dlen -= hlen) > 0)) {
2042 hlen = dlen;
2043 off = 0;
2044
2045 i = CAS_VAL(RX_COMP2_NEXT_INDEX, words[1]);

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

2053
2054 skb_shinfo(skb)->nr_frags++;
2055 skb->data_len += hlen;
2056 skb->len += hlen;
2057 frag++;
2058
2059 __skb_frag_set_page(frag, page->buffer);
2060 __skb_frag_ref(frag);
2061 frag->page_offset = 0;
2061 skb_frag_off_set(frag, 0);
2062 skb_frag_size_set(frag, hlen);
2063 RX_USED_ADD(page, hlen + cp->crc_size);
2064 }
2065
2066 if (cp->crc_size) {
2067 addr = cas_page_map(page->buffer);
2068 crcaddr = addr + off + hlen;
2069 }

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

2811
2812 for (frag = 0; frag < nr_frags; frag++) {
2813 const skb_frag_t *fragp = &skb_shinfo(skb)->frags[frag];
2814
2815 len = skb_frag_size(fragp);
2816 mapping = skb_frag_dma_map(&cp->pdev->dev, fragp, 0, len,
2817 DMA_TO_DEVICE);
2818
2062 skb_frag_size_set(frag, hlen);
2063 RX_USED_ADD(page, hlen + cp->crc_size);
2064 }
2065
2066 if (cp->crc_size) {
2067 addr = cas_page_map(page->buffer);
2068 crcaddr = addr + off + hlen;
2069 }

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

2811
2812 for (frag = 0; frag < nr_frags; frag++) {
2813 const skb_frag_t *fragp = &skb_shinfo(skb)->frags[frag];
2814
2815 len = skb_frag_size(fragp);
2816 mapping = skb_frag_dma_map(&cp->pdev->dev, fragp, 0, len,
2817 DMA_TO_DEVICE);
2818
2819 tabort = cas_calc_tabort(cp, fragp->page_offset, len);
2819 tabort = cas_calc_tabort(cp, skb_frag_off(fragp), len);
2820 if (unlikely(tabort)) {
2821 void *addr;
2822
2823 /* NOTE: len is always > tabort */
2824 cas_write_txd(cp, ring, entry, mapping, len - tabort,
2825 ctrl, 0);
2826 entry = TX_DESC_NEXT(ring, entry);
2827
2828 addr = cas_page_map(skb_frag_page(fragp));
2829 memcpy(tx_tiny_buf(cp, ring, entry),
2820 if (unlikely(tabort)) {
2821 void *addr;
2822
2823 /* NOTE: len is always > tabort */
2824 cas_write_txd(cp, ring, entry, mapping, len - tabort,
2825 ctrl, 0);
2826 entry = TX_DESC_NEXT(ring, entry);
2827
2828 addr = cas_page_map(skb_frag_page(fragp));
2829 memcpy(tx_tiny_buf(cp, ring, entry),
2830 addr + fragp->page_offset + len - tabort,
2830 addr + skb_frag_off(fragp) + len - tabort,
2831 tabort);
2832 cas_page_unmap(addr);
2833 mapping = tx_tiny_map(cp, ring, entry, tentry);
2834 len = tabort;
2835 }
2836
2837 cas_write_txd(cp, ring, entry, mapping, len, ctrl,
2838 (frag + 1 == nr_frags));

--- 2442 unchanged lines hidden ---
2831 tabort);
2832 cas_page_unmap(addr);
2833 mapping = tx_tiny_map(cp, ring, entry, tentry);
2834 len = tabort;
2835 }
2836
2837 cas_write_txd(cp, ring, entry, mapping, len, ctrl,
2838 (frag + 1 == nr_frags));

--- 2442 unchanged lines hidden ---