Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 122744
b: refs/heads/master
c: 5a5efed
h: refs/heads/master
v: v3
  • Loading branch information
Dai Haruki authored and David S. Miller committed Dec 16, 2008
1 parent 4bfbf85 commit 5454ca6
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 26 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: 31de198b4d2732028f4c5bff04b0103b1d8c1d8c
refs/heads/master: 5a5efed4817ef931f648b118aeb9222e53122d2b
36 changes: 15 additions & 21 deletions trunk/drivers/net/gianfar.c
Original file line number Diff line number Diff line change
Expand Up @@ -854,8 +854,7 @@ static void free_skb_resources(struct gfar_private *priv)
priv->rx_skbuff[i] = NULL;
}

rxbdp->status = 0;
rxbdp->length = 0;
rxbdp->lstatus = 0;
rxbdp->bufPtr = 0;

rxbdp++;
Expand Down Expand Up @@ -976,8 +975,7 @@ int startup_gfar(struct net_device *dev)
/* Initialize Transmit Descriptor Ring */
txbdp = priv->tx_bd_base;
for (i = 0; i < priv->tx_ring_size; i++) {
txbdp->status = 0;
txbdp->length = 0;
txbdp->lstatus = 0;
txbdp->bufPtr = 0;
txbdp++;
}
Expand Down Expand Up @@ -1216,7 +1214,7 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)
struct gfar_private *priv = netdev_priv(dev);
struct txfcb *fcb = NULL;
struct txbd8 *txbdp, *base;
u16 status;
u32 lstatus;
unsigned long flags;

/* Update transmit stats */
Expand All @@ -1230,26 +1228,25 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)
base = priv->tx_bd_base;

/* Clear all but the WRAP status flags */
status = txbdp->status & TXBD_WRAP;
lstatus = txbdp->lstatus & BD_LFLAG(TXBD_WRAP);

/* Set up checksumming */
if (CHECKSUM_PARTIAL == skb->ip_summed) {
fcb = gfar_add_fcb(skb);
status |= TXBD_TOE;
lstatus |= BD_LFLAG(TXBD_TOE);
gfar_tx_checksum(skb, fcb);
}

if (priv->vlgrp && vlan_tx_tag_present(skb)) {
if (unlikely(NULL == fcb)) {
fcb = gfar_add_fcb(skb);
status |= TXBD_TOE;
lstatus |= BD_LFLAG(TXBD_TOE);
}

gfar_tx_vlan(skb, fcb);
}

/* Set buffer length and pointer */
txbdp->length = skb->len;
txbdp->bufPtr = dma_map_single(&dev->dev, skb->data,
skb->len, DMA_TO_DEVICE);

Expand All @@ -1260,12 +1257,10 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)
priv->skb_curtx =
(priv->skb_curtx + 1) & TX_RING_MOD_MASK(priv->tx_ring_size);

/* Flag the BD as interrupt-causing */
status |= TXBD_INTERRUPT;

/* Flag the BD as ready to go, last in frame, and */
/* in need of CRC */
status |= (TXBD_READY | TXBD_LAST | TXBD_CRC);
/* Flag the BD as ready, interrupt-causing, last, and in need of CRC */
lstatus |=
BD_LFLAG(TXBD_READY | TXBD_LAST | TXBD_CRC | TXBD_INTERRUPT) |
skb->len;

dev->trans_start = jiffies;

Expand All @@ -1278,7 +1273,7 @@ static int gfar_start_xmit(struct sk_buff *skb, struct net_device *dev)
*/

eieio();
txbdp->status = status;
txbdp->lstatus = lstatus;

txbdp = next_bd(txbdp, base, priv->tx_ring_size);

Expand Down Expand Up @@ -1546,20 +1541,19 @@ static void gfar_new_rxbdp(struct net_device *dev, struct rxbd8 *bdp,
struct sk_buff *skb)
{
struct gfar_private *priv = netdev_priv(dev);
u32 * status_len = (u32 *)bdp;
u16 flags;
u32 lstatus;

bdp->bufPtr = dma_map_single(&dev->dev, skb->data,
priv->rx_buffer_size, DMA_FROM_DEVICE);

flags = RXBD_EMPTY | RXBD_INTERRUPT;
lstatus = BD_LFLAG(RXBD_EMPTY | RXBD_INTERRUPT);

if (bdp == priv->rx_bd_base + priv->rx_ring_size - 1)
flags |= RXBD_WRAP;
lstatus |= BD_LFLAG(RXBD_WRAP);

eieio();

*status_len = (u32)flags << 16;
bdp->lstatus = lstatus;
}


Expand Down
20 changes: 16 additions & 4 deletions trunk/drivers/net/gianfar.h
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,8 @@ extern const char gfar_driver_version[];
#define ATTRELI_EI_MASK 0x00003fff
#define ATTRELI_EI(x) (x)

#define BD_LFLAG(flags) ((flags) << 16)
#define BD_LENGTH_MASK 0x00ff

/* TxBD status field bits */
#define TXBD_READY 0x8000
Expand Down Expand Up @@ -374,8 +376,13 @@ extern const char gfar_driver_version[];

struct txbd8
{
u16 status; /* Status Fields */
u16 length; /* Buffer length */
union {
struct {
u16 status; /* Status Fields */
u16 length; /* Buffer length */
};
u32 lstatus;
};
u32 bufPtr; /* Buffer Pointer */
};

Expand All @@ -390,8 +397,13 @@ struct txfcb {

struct rxbd8
{
u16 status; /* Status Fields */
u16 length; /* Buffer Length */
union {
struct {
u16 status; /* Status Fields */
u16 length; /* Buffer Length */
};
u32 lstatus;
};
u32 bufPtr; /* Buffer Pointer */
};

Expand Down

0 comments on commit 5454ca6

Please sign in to comment.