Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 253433
b: refs/heads/master
c: 3247a1f
h: refs/heads/master
i:
  253431: 10c8baf
v: v3
  • Loading branch information
Mika Westerberg authored and David S. Miller committed Jun 11, 2011
1 parent 4b329ab commit 94f360b
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 32 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: fc9b4910b00039da054f221e2821be0519261101
refs/heads/master: 3247a1fcee49b571b40c4bd723439ce5c64f56ad
51 changes: 20 additions & 31 deletions trunk/drivers/net/arm/ep93xx_eth.c
Original file line number Diff line number Diff line change
Expand Up @@ -460,36 +460,32 @@ static void ep93xx_free_buffers(struct ep93xx_priv *ep)
struct device *dev = ep->dev->dev.parent;
int i;

for (i = 0; i < RX_QUEUE_ENTRIES; i += 2) {
for (i = 0; i < RX_QUEUE_ENTRIES; i++) {
dma_addr_t d;

d = ep->descs->rdesc[i].buf_addr;
if (d)
dma_unmap_single(dev, d, PAGE_SIZE, DMA_FROM_DEVICE);
dma_unmap_single(dev, d, PKT_BUF_SIZE, DMA_FROM_DEVICE);

if (ep->rx_buf[i] != NULL)
free_page((unsigned long)ep->rx_buf[i]);
kfree(ep->rx_buf[i]);
}

for (i = 0; i < TX_QUEUE_ENTRIES; i += 2) {
for (i = 0; i < TX_QUEUE_ENTRIES; i++) {
dma_addr_t d;

d = ep->descs->tdesc[i].buf_addr;
if (d)
dma_unmap_single(dev, d, PAGE_SIZE, DMA_TO_DEVICE);
dma_unmap_single(dev, d, PKT_BUF_SIZE, DMA_TO_DEVICE);

if (ep->tx_buf[i] != NULL)
free_page((unsigned long)ep->tx_buf[i]);
kfree(ep->tx_buf[i]);
}

dma_free_coherent(dev, sizeof(struct ep93xx_descs), ep->descs,
ep->descs_dma_addr);
}

/*
* The hardware enforces a sub-2K maximum packet size, so we put
* two buffers on every hardware page.
*/
static int ep93xx_alloc_buffers(struct ep93xx_priv *ep)
{
struct device *dev = ep->dev->dev.parent;
Expand All @@ -500,48 +496,41 @@ static int ep93xx_alloc_buffers(struct ep93xx_priv *ep)
if (ep->descs == NULL)
return 1;

for (i = 0; i < RX_QUEUE_ENTRIES; i += 2) {
void *page;
for (i = 0; i < RX_QUEUE_ENTRIES; i++) {
void *buf;
dma_addr_t d;

page = (void *)__get_free_page(GFP_KERNEL | GFP_DMA);
if (page == NULL)
buf = kmalloc(PKT_BUF_SIZE, GFP_KERNEL);
if (buf == NULL)
goto err;

d = dma_map_single(dev, page, PAGE_SIZE, DMA_FROM_DEVICE);
d = dma_map_single(dev, buf, PKT_BUF_SIZE, DMA_FROM_DEVICE);
if (dma_mapping_error(dev, d)) {
free_page((unsigned long)page);
kfree(buf);
goto err;
}

ep->rx_buf[i] = page;
ep->rx_buf[i] = buf;
ep->descs->rdesc[i].buf_addr = d;
ep->descs->rdesc[i].rdesc1 = (i << 16) | PKT_BUF_SIZE;

ep->rx_buf[i + 1] = page + PKT_BUF_SIZE;
ep->descs->rdesc[i + 1].buf_addr = d + PKT_BUF_SIZE;
ep->descs->rdesc[i + 1].rdesc1 = ((i + 1) << 16) | PKT_BUF_SIZE;
}

for (i = 0; i < TX_QUEUE_ENTRIES; i += 2) {
void *page;
for (i = 0; i < TX_QUEUE_ENTRIES; i++) {
void *buf;
dma_addr_t d;

page = (void *)__get_free_page(GFP_KERNEL | GFP_DMA);
if (page == NULL)
buf = kmalloc(PKT_BUF_SIZE, GFP_KERNEL);
if (buf == NULL)
goto err;

d = dma_map_single(dev, page, PAGE_SIZE, DMA_TO_DEVICE);
d = dma_map_single(dev, buf, PKT_BUF_SIZE, DMA_TO_DEVICE);
if (dma_mapping_error(dev, d)) {
free_page((unsigned long)page);
kfree(buf);
goto err;
}

ep->tx_buf[i] = page;
ep->tx_buf[i] = buf;
ep->descs->tdesc[i].buf_addr = d;

ep->tx_buf[i + 1] = page + PKT_BUF_SIZE;
ep->descs->tdesc[i + 1].buf_addr = d + PKT_BUF_SIZE;
}

return 0;
Expand Down

0 comments on commit 94f360b

Please sign in to comment.