Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 337187
b: refs/heads/master
c: 998f6df
h: refs/heads/master
i:
  337185: c7c5241
  337183: dccffef
v: v3
  • Loading branch information
Mark Einon authored and Greg Kroah-Hartman committed Oct 22, 2012
1 parent aff717d commit 549e38d
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 64 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: f1b540b92c54531484d00bb790ad47f3f44b2798
refs/heads/master: 998f6dfb61e52e1f42d97f9fab1bf7c8077bc293
102 changes: 39 additions & 63 deletions trunk/drivers/staging/et131x/et131x.c
Original file line number Diff line number Diff line change
Expand Up @@ -3285,6 +3285,7 @@ static int nic_send_packet(struct et131x_adapter *adapter, struct tcb *tcb)
struct skb_frag_struct *frags = &skb_shinfo(skb)->frags[0];
unsigned long flags;
struct phy_device *phydev = adapter->phydev;
dma_addr_t dma_addr;

/* Part of the optimizations of this send routine restrict us to
* sending 24 fragments at a pass. In practice we should never see
Expand Down Expand Up @@ -3314,77 +3315,46 @@ static int nic_send_packet(struct et131x_adapter *adapter, struct tcb *tcb)
* doesn't seem to like large fragments.
*/
if (skb_headlen(skb) <= 1514) {
desc[frag].addr_hi = 0;
/* Low 16bits are length, high is vlan and
unused currently so zero */
desc[frag].len_vlan = skb_headlen(skb);

/* NOTE: Here, the dma_addr_t returned from
* dma_map_single() is implicitly cast as a
* u32. Although dma_addr_t can be
* 64-bit, the address returned by
* dma_map_single() is always 32-bit
* addressable (as defined by the pci/dma
* subsystem)
*/
desc[frag++].addr_lo =
dma_map_single(&adapter->pdev->dev,
skb->data,
skb_headlen(skb),
DMA_TO_DEVICE);
dma_addr = dma_map_single(&adapter->pdev->dev,
skb->data,
skb_headlen(skb),
DMA_TO_DEVICE);
desc[frag].addr_lo = lower_32_bits(dma_addr);
desc[frag].addr_hi = upper_32_bits(dma_addr);
frag++;
} else {
desc[frag].addr_hi = 0;
desc[frag].len_vlan = skb_headlen(skb) / 2;

/* NOTE: Here, the dma_addr_t returned from
* dma_map_single() is implicitly cast as a
* u32. Although dma_addr_t can be
* 64-bit, the address returned by
* dma_map_single() is always 32-bit
* addressable (as defined by the pci/dma
* subsystem)
*/
desc[frag++].addr_lo =
dma_map_single(&adapter->pdev->dev,
skb->data,
(skb_headlen(skb) / 2),
DMA_TO_DEVICE);
desc[frag].addr_hi = 0;
dma_addr = dma_map_single(&adapter->pdev->dev,
skb->data,
(skb_headlen(skb) / 2),
DMA_TO_DEVICE);
desc[frag].addr_lo = lower_32_bits(dma_addr);
desc[frag].addr_hi = upper_32_bits(dma_addr);
frag++;

desc[frag].len_vlan = skb_headlen(skb) / 2;

/* NOTE: Here, the dma_addr_t returned from
* dma_map_single() is implicitly cast as a
* u32. Although dma_addr_t can be
* 64-bit, the address returned by
* dma_map_single() is always 32-bit
* addressable (as defined by the pci/dma
* subsystem)
*/
desc[frag++].addr_lo =
dma_map_single(&adapter->pdev->dev,
skb->data +
(skb_headlen(skb) / 2),
(skb_headlen(skb) / 2),
DMA_TO_DEVICE);
dma_addr = dma_map_single(&adapter->pdev->dev,
skb->data +
(skb_headlen(skb) / 2),
(skb_headlen(skb) / 2),
DMA_TO_DEVICE);
desc[frag].addr_lo = lower_32_bits(dma_addr);
desc[frag].addr_hi = upper_32_bits(dma_addr);
frag++;
}
} else {
desc[frag].addr_hi = 0;
desc[frag].len_vlan =
frags[i - 1].size;

/* NOTE: Here, the dma_addr_t returned from
* dma_map_page() is implicitly cast as a u32.
* Although dma_addr_t can be 64-bit, the address
* returned by dma_map_page() is always 32-bit
* addressable (as defined by the pci/dma subsystem)
*/
desc[frag++].addr_lo = skb_frag_dma_map(
&adapter->pdev->dev,
&frags[i - 1],
0,
frags[i - 1].size,
DMA_TO_DEVICE);
desc[frag].len_vlan = frags[i - 1].size;
dma_addr = skb_frag_dma_map(&adapter->pdev->dev,
&frags[i - 1],
0,
frags[i - 1].size,
DMA_TO_DEVICE);
desc[frag].addr_lo = lower_32_bits(dma_addr);
desc[frag].addr_hi = upper_32_bits(dma_addr);
frag++;
}
}

Expand Down Expand Up @@ -3611,6 +3581,7 @@ static inline void free_send_packet(struct et131x_adapter *adapter,
unsigned long flags;
struct tx_desc *desc = NULL;
struct net_device_stats *stats = &adapter->net_stats;
dma_addr_t dma_addr;

if (tcb->flags & fMP_DEST_BROAD)
atomic_inc(&adapter->stats.broadcast_pkts_xmtd);
Expand All @@ -3631,8 +3602,13 @@ static inline void free_send_packet(struct et131x_adapter *adapter,
(adapter->tx_ring.tx_desc_ring +
INDEX10(tcb->index_start));

dma_addr = desc->addr_lo;

if (sizeof(dma_addr_t) == sizeof(u64))
dma_addr |= ((dma_addr_t)desc->addr_hi) << 32;

dma_unmap_single(&adapter->pdev->dev,
desc->addr_lo,
dma_addr,
desc->len_vlan, DMA_TO_DEVICE);

add_10bit(&tcb->index_start, 1);
Expand Down

0 comments on commit 549e38d

Please sign in to comment.