aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/r6040.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/r6040.c')
-rw-r--r--drivers/net/r6040.c37
1 files changed, 26 insertions, 11 deletions
diff --git a/drivers/net/r6040.c b/drivers/net/r6040.c
index 9061ec1aa4f7..973f1e81667a 100644
--- a/drivers/net/r6040.c
+++ b/drivers/net/r6040.c
@@ -138,6 +138,21 @@
138#define MBCR_DEFAULT 0x012A /* MAC Bus Control Register */ 138#define MBCR_DEFAULT 0x012A /* MAC Bus Control Register */
139#define MCAST_MAX 4 /* Max number multicast addresses to filter */ 139#define MCAST_MAX 4 /* Max number multicast addresses to filter */
140 140
141/* Descriptor status */
142#define DSC_OWNER_MAC 0x8000 /* MAC is the owner of this descriptor */
143#define DSC_RX_OK 0x4000 /* RX was successful */
144#define DSC_RX_ERR 0x0800 /* RX PHY error */
145#define DSC_RX_ERR_DRI 0x0400 /* RX dribble packet */
146#define DSC_RX_ERR_BUF 0x0200 /* RX length exceeds buffer size */
147#define DSC_RX_ERR_LONG 0x0100 /* RX length > maximum packet length */
148#define DSC_RX_ERR_RUNT 0x0080 /* RX packet length < 64 byte */
149#define DSC_RX_ERR_CRC 0x0040 /* RX CRC error */
150#define DSC_RX_BCAST 0x0020 /* RX broadcast (no error) */
151#define DSC_RX_MCAST 0x0010 /* RX multicast (no error) */
152#define DSC_RX_MCH_HIT 0x0008 /* RX multicast hit in hash table (no error) */
153#define DSC_RX_MIDH_HIT 0x0004 /* RX MID table hit (no error) */
154#define DSC_RX_IDX_MID_MASK 3 /* RX mask for the index of matched MIDx */
155
141/* PHY settings */ 156/* PHY settings */
142#define ICPLUS_PHY_ID 0x0243 157#define ICPLUS_PHY_ID 0x0243
143 158
@@ -324,7 +339,7 @@ static int r6040_alloc_rxbufs(struct net_device *dev)
324 desc->buf = cpu_to_le32(pci_map_single(lp->pdev, 339 desc->buf = cpu_to_le32(pci_map_single(lp->pdev,
325 desc->skb_ptr->data, 340 desc->skb_ptr->data,
326 MAX_BUF_SIZE, PCI_DMA_FROMDEVICE)); 341 MAX_BUF_SIZE, PCI_DMA_FROMDEVICE));
327 desc->status = 0x8000; 342 desc->status = DSC_OWNER_MAC;
328 desc = desc->vndescp; 343 desc = desc->vndescp;
329 } while (desc != lp->rx_ring); 344 } while (desc != lp->rx_ring);
330 345
@@ -541,25 +556,25 @@ static int r6040_rx(struct net_device *dev, int limit)
541 u16 err; 556 u16 err;
542 557
543 /* Limit not reached and the descriptor belongs to the CPU */ 558 /* Limit not reached and the descriptor belongs to the CPU */
544 while (count < limit && !(descptr->status & 0x8000)) { 559 while (count < limit && !(descptr->status & DSC_OWNER_MAC)) {
545 /* Read the descriptor status */ 560 /* Read the descriptor status */
546 err = descptr->status; 561 err = descptr->status;
547 /* Global error status set */ 562 /* Global error status set */
548 if (err & 0x0800) { 563 if (err & DSC_RX_ERR) {
549 /* RX dribble */ 564 /* RX dribble */
550 if (err & 0x0400) 565 if (err & DSC_RX_ERR_DRI)
551 dev->stats.rx_frame_errors++; 566 dev->stats.rx_frame_errors++;
552 /* Buffer lenght exceeded */ 567 /* Buffer lenght exceeded */
553 if (err & 0x0200) 568 if (err & DSC_RX_ERR_BUF)
554 dev->stats.rx_length_errors++; 569 dev->stats.rx_length_errors++;
555 /* Packet too long */ 570 /* Packet too long */
556 if (err & 0x0100) 571 if (err & DSC_RX_ERR_LONG)
557 dev->stats.rx_length_errors++; 572 dev->stats.rx_length_errors++;
558 /* Packet < 64 bytes */ 573 /* Packet < 64 bytes */
559 if (err & 0x0080) 574 if (err & DSC_RX_ERR_RUNT)
560 dev->stats.rx_length_errors++; 575 dev->stats.rx_length_errors++;
561 /* CRC error */ 576 /* CRC error */
562 if (err & 0x0040) { 577 if (err & DSC_RX_ERR_CRC) {
563 spin_lock(&priv->lock); 578 spin_lock(&priv->lock);
564 dev->stats.rx_crc_errors++; 579 dev->stats.rx_crc_errors++;
565 spin_unlock(&priv->lock); 580 spin_unlock(&priv->lock);
@@ -596,7 +611,7 @@ static int r6040_rx(struct net_device *dev, int limit)
596 611
597next_descr: 612next_descr:
598 /* put the descriptor back to the MAC */ 613 /* put the descriptor back to the MAC */
599 descptr->status = 0x8000; 614 descptr->status = DSC_OWNER_MAC;
600 descptr = descptr->vndescp; 615 descptr = descptr->vndescp;
601 count++; 616 count++;
602 } 617 }
@@ -624,7 +639,7 @@ static void r6040_tx(struct net_device *dev)
624 if (err & (0x2000 | 0x4000)) 639 if (err & (0x2000 | 0x4000))
625 dev->stats.tx_carrier_errors++; 640 dev->stats.tx_carrier_errors++;
626 641
627 if (descptr->status & 0x8000) 642 if (descptr->status & DSC_OWNER_MAC)
628 break; /* Not complete */ 643 break; /* Not complete */
629 skb_ptr = descptr->skb_ptr; 644 skb_ptr = descptr->skb_ptr;
630 pci_unmap_single(priv->pdev, le32_to_cpu(descptr->buf), 645 pci_unmap_single(priv->pdev, le32_to_cpu(descptr->buf),
@@ -874,7 +889,7 @@ static int r6040_start_xmit(struct sk_buff *skb, struct net_device *dev)
874 descptr->skb_ptr = skb; 889 descptr->skb_ptr = skb;
875 descptr->buf = cpu_to_le32(pci_map_single(lp->pdev, 890 descptr->buf = cpu_to_le32(pci_map_single(lp->pdev,
876 skb->data, skb->len, PCI_DMA_TODEVICE)); 891 skb->data, skb->len, PCI_DMA_TODEVICE));
877 descptr->status = 0x8000; 892 descptr->status = DSC_OWNER_MAC;
878 /* Trigger the MAC to check the TX descriptor */ 893 /* Trigger the MAC to check the TX descriptor */
879 iowrite16(0x01, ioaddr + MTPR); 894 iowrite16(0x01, ioaddr + MTPR);
880 lp->tx_insert_ptr = descptr->vndescp; 895 lp->tx_insert_ptr = descptr->vndescp;