Diff below. Hope this is useful.

Richard

P.S. Sorry for slow turnaround. I had a few day job issues to sort out
:-(

Jeff Garzik writes:
 > Here is the patch I just checked in, which fixes some of the easier
 > issues.  If you could diff against this, that would be great.
 > -- 
 > Jeff Garzik      | Andre the Giant has a posse.
 > Building 1024    |
 > MandrakeSoft     |


--- linux-cvs/linux/drivers/net/dmfe.c  Sat Jun 30 13:10:18 2001
+++ drivers/net/dmfe.c  Wed Jul  4 01:12:53 2001
@@ -77,9 +77,11 @@
 #include <asm/io.h>
 #include <asm/dma.h>
 
+#if 0
 #if BITS_PER_LONG == 64
 #error FIXME: driver does not support 64-bit platforms
 #endif
+#endif
 
 
 /* Board/System/Debug information/definition ---------------- */
@@ -127,8 +129,8 @@
 #define DMFE_TXTH_1K   0xC000          /* TX TH 1K  byte */
 
 #define DMFE_TIMER_WUT  (jiffies + HZ * 1)/* timer wakeup time : 1 second */
-#define DMFE_TX_TIMEOUT (HZ * 1.5)     /* tx packet time-out time 1.5 s" */
-#define DMFE_TX_KICK   (HZ * 0.5)      /* tx packet Kick-out time 0.5 s" */
+#define DMFE_TX_TIMEOUT ((unsigned long) (HZ * 1.5))   /* tx packet time-out 
time 1.5 s" */
+#define DMFE_TX_KICK   ((unsigned long) (HZ * 0.5))    /* tx packet Kick-out 
time 0.5 s" */
 
 #define DMFE_DBUG(dbug_now, msg, value) if (dmfe_debug || (dbug_now)) 
printk(KERN_ERR "<DMFE>: %s %lx\n", (msg), (long) (value))
 
@@ -161,18 +163,28 @@
 /* Structure/enum declaration ------------------------------- */
 struct tx_desc {
        u32 tdes0, tdes1, tdes2, tdes3;
+#if __sparc_v9__
+       unsigned long tx_buf_ptr;
+       unsigned long next_tx_desc;
+#else
        u32 tx_skb_ptr;
        u32 tx_buf_ptr;
        u32 next_tx_desc;
        u32 reserved;
+#endif
 };
 
 struct rx_desc {
        u32 rdes0, rdes1, rdes2, rdes3;
+#ifdef __sparc_v9__
+       unsigned long rx_skb_ptr;
+       unsigned long next_rx_desc;
+#else
        u32 rx_skb_ptr;
        u32 rx_buf_ptr;
        u32 next_rx_desc;
        u32 reserved;
+#endif
 };
 
 struct dmfe_board_info {
@@ -392,7 +404,7 @@
                                    const struct pci_device_id *ent)
 {
        unsigned long pci_iobase;
-       u8 pci_irqline;
+       int pci_irqline;
        struct dmfe_board_info *db;     /* board information structure */
        int i;
        struct net_device *dev;
@@ -852,11 +864,14 @@
 {
        struct tx_desc *txptr;
        unsigned long ioaddr = dev->base_addr;
+       u32 tdes0, tdes1;
 
        txptr = db->tx_remove_ptr;
        while(db->tx_packet_cnt) {
                /* printk("<DMFE>: tdes0=%x\n", txptr->tdes0); */
-               if (txptr->tdes0 & 0x80000000)
+               tdes0 = le32_to_cpu(txptr->tdes0);
+               tdes1 = le32_to_cpu(txptr->tdes1);
+               if (tdes0 & 0x80000000)
                        break;
 
                /* A packet sent completed */
@@ -864,29 +879,29 @@
                db->stats.tx_packets++;
 
                /* Transmit statistic counter */
-               if ( txptr->tdes0 != 0x7fffffff ) {
-                       /* printk("<DMFE>: tdes0=%x\n", txptr->tdes0); */
-                       db->stats.collisions += (txptr->tdes0 >> 3) & 0xf;
-                       db->stats.tx_bytes += txptr->tdes1 & 0x7ff;
-                       if (txptr->tdes0 & TDES0_ERR_MASK) {
+               if ( tdes0 != 0x7fffffff ) {
+                       /* printk("<DMFE>: tdes0=%x\n", tdes0); */
+                       db->stats.collisions += (tdes0 >> 3) & 0xf;
+                       db->stats.tx_bytes += tdes1 & 0x7ff;
+                       if (tdes0 & TDES0_ERR_MASK) {
                                db->stats.tx_errors++;
 
-                               if (txptr->tdes0 & 0x0002) {    /* UnderRun */
+                               if (tdes0 & 0x0002) {   /* UnderRun */
                                        db->tx_fifo_underrun++;
                                        if ( !(db->cr6_data & CR6_SFT) ) {
                                                db->cr6_data = db->cr6_data | 
CR6_SFT;
                                                update_cr6(db->cr6_data, 
db->ioaddr);
                                        }
                                }
-                               if (txptr->tdes0 & 0x0100)
+                               if (tdes0 & 0x0100)
                                        db->tx_excessive_collision++;
-                               if (txptr->tdes0 & 0x0200)
+                               if (tdes0 & 0x0200)
                                        db->tx_late_collision++;
-                               if (txptr->tdes0 & 0x0400)
+                               if (tdes0 & 0x0400)
                                        db->tx_no_carrier++;
-                               if (txptr->tdes0 & 0x0800)
+                               if (tdes0 & 0x0800)
                                        db->tx_loss_carrier++;
-                               if (txptr->tdes0 & 0x4000)
+                               if (tdes0 & 0x4000)
                                        db->tx_jabber_timeout++;
                        }
                }
@@ -921,39 +936,41 @@
        struct rx_desc *rxptr;
        struct sk_buff *skb;
        int rxlen;
+       u32 rdes0;
 
        rxptr = db->rx_ready_ptr;
 
        while(db->rx_avail_cnt) {
-               if (rxptr->rdes0 & 0x80000000)  /* packet owner check */
+               rdes0 = le32_to_cpu(rxptr->rdes0);
+               if (rdes0 & 0x80000000) /* packet owner check */
                        break;
 
                db->rx_avail_cnt--;
                db->interval_rx_cnt++;
 
-               if ( (rxptr->rdes0 & 0x300) != 0x300) {
+               if ( (rdes0 & 0x300) != 0x300) {
                        /* A packet without First/Last flag */
                        /* reused this SKB */
-                       DMFE_DBUG(0, "Reused SK buffer, rdes0", rxptr->rdes0);
+                       DMFE_DBUG(0, "Reused SK buffer, rdes0 %x", rdes0);
                        dmfe_reused_skb(db, (struct sk_buff *) 
rxptr->rx_skb_ptr);
                } else {
                        /* A packet with First/Last flag */
-                       rxlen = ( (rxptr->rdes0 >> 16) & 0x3fff) - 4;
+                       rxlen = ( (rdes0 >> 16) & 0x3fff) - 4;
 
                        /* error summary bit check */
-                       if (rxptr->rdes0 & 0x8000) {
+                       if (rdes0 & 0x8000) {
                                /* This is a error packet */
-                               //printk("<DMFE>: rdes0: %lx\n", rxptr->rdes0);
+                               //printk("<DMFE>: rdes0: %lx\n", rdes0);
                                db->stats.rx_errors++;
-                               if (rxptr->rdes0 & 1)
+                               if (rdes0 & 1)
                                        db->stats.rx_fifo_errors++;
-                               if (rxptr->rdes0 & 2)
+                               if (rdes0 & 2)
                                        db->stats.rx_crc_errors++;
-                               if (rxptr->rdes0 & 0x80)
+                               if (rdes0 & 0x80)
                                        db->stats.rx_length_errors++;
                        }
 
-                       if ( !(rxptr->rdes0 & 0x8000) ||
+                       if ( !(rdes0 & 0x800) ||
                                ((db->cr6_data & CR6_PM) && (rxlen>6)) ) {
                                skb = (struct sk_buff *) rxptr->rx_skb_ptr;
 
@@ -988,7 +1005,7 @@
                                }
                        } else {
                                /* Reuse SKB buffer when the packet is error */
-                               DMFE_DBUG(0, "Reused SK buffer, rdes0", 
rxptr->rdes0);
+                               DMFE_DBUG(0, "Reused SK buffer, rdes0 %x", 
rdes0);
                                dmfe_reused_skb(db, (struct sk_buff *) 
rxptr->rx_skb_ptr);
                        }
                }
@@ -1259,8 +1276,8 @@
 {
        struct rx_desc *rxptr = db->rx_insert_ptr;
 
-       if (!(rxptr->rdes0 & 0x80000000)) {
-               rxptr->rx_skb_ptr = (u32) skb;
+       if (!(le32_to_cpu(rxptr->rdes0) & 0x80000000)) {
+               rxptr->rx_skb_ptr = (unsigned long) skb;
                rxptr->rdes2 = cpu_to_le32( pci_map_single(db->net_dev, 
skb->tail, RX_ALLOC_SIZE, PCI_DMA_FROMDEVICE) );
                rxptr->rdes0 = cpu_to_le32(0x80000000);
                db->rx_avail_cnt++;
@@ -1292,7 +1309,7 @@
        outl(db->first_tx_desc_dma, ioaddr + DCR4);     /* TX DESC address */
 
        /* rx descriptor start pointer */
-       db->first_rx_desc = (struct rx_desc *) ( (u32) db->first_tx_desc + 
sizeof(struct rx_desc) * TX_DESC_CNT );
+       db->first_rx_desc = (struct rx_desc *) ( (unsigned long) 
db->first_tx_desc + sizeof(struct rx_desc) * TX_DESC_CNT );
        db->first_rx_desc_dma = ( db->first_tx_desc_dma + sizeof(struct 
rx_desc) * TX_DESC_CNT);
        db->rx_insert_ptr = db->first_rx_desc;
        db->rx_ready_ptr = db->first_rx_desc;
@@ -1303,18 +1320,18 @@
        tmp_buf_dma = db->buf_pool_dma_start;
        tmp_tx_dma = db->first_tx_desc_dma;
        for (tmp_tx = db->first_tx_desc, i = 0; i < TX_DESC_CNT; i++, tmp_tx++) 
{
-               tmp_tx->tx_buf_ptr = (u32) tmp_buf;
+               tmp_tx->tx_buf_ptr = (unsigned long) tmp_buf;
                tmp_tx->tdes0 = cpu_to_le32(0);
                tmp_tx->tdes1 = cpu_to_le32(0x81000000);        /* IC, chain */
                tmp_tx->tdes2 = cpu_to_le32(tmp_buf_dma);
                tmp_tx_dma += sizeof(struct tx_desc);
                tmp_tx->tdes3 = cpu_to_le32(tmp_tx_dma);
-               tmp_tx->next_tx_desc = (u32) ((u32) tmp_tx + sizeof(struct 
tx_desc));
-               tmp_buf = (unsigned char *) ((u32) tmp_buf + TX_BUF_ALLOC);
+               tmp_tx->next_tx_desc = (unsigned long) ((unsigned long) tmp_tx 
+ sizeof(struct tx_desc));
+               tmp_buf = (unsigned char *) ((unsigned long) tmp_buf + 
TX_BUF_ALLOC);
                tmp_buf_dma = tmp_buf_dma + TX_BUF_ALLOC;
        }
        (--tmp_tx)->tdes3 = cpu_to_le32(db->first_tx_desc_dma);
-       tmp_tx->next_tx_desc = (u32) db->first_tx_desc;
+       tmp_tx->next_tx_desc = (unsigned long) db->first_tx_desc;
 
         /* Init Receive descriptor chain */
        tmp_rx_dma=db->first_rx_desc_dma;
@@ -1323,10 +1340,10 @@
                tmp_rx->rdes1 = cpu_to_le32(0x01000600);
                tmp_rx_dma += sizeof(struct rx_desc);
                tmp_rx->rdes3 = cpu_to_le32(tmp_rx_dma);
-               tmp_rx->next_rx_desc = (u32) ((u32) tmp_rx + sizeof(struct 
rx_desc));
+               tmp_rx->next_rx_desc = (unsigned long) ((unsigned long) tmp_rx 
+ sizeof(struct rx_desc));
        }
        (--tmp_rx)->rdes3 = cpu_to_le32(db->first_rx_desc_dma);
-       tmp_rx->next_rx_desc = (u32) db->first_rx_desc;
+       tmp_rx->next_rx_desc = (unsigned long) db->first_rx_desc;
 
        /* pre-allocated Rx buffer */
        allocated_rx_buffer(db);
@@ -1470,7 +1487,7 @@
        while(db->rx_avail_cnt < RX_DESC_CNT) {
                if ( ( skb = dev_alloc_skb(RX_ALLOC_SIZE) ) == NULL )
                        break;
-               rxptr->rx_skb_ptr = (u32) skb; /* FIXME */
+               rxptr->rx_skb_ptr = (unsigned long) skb; /* FIXME */
                rxptr->rdes2 = cpu_to_le32( pci_map_single(db->net_dev, 
skb->tail, RX_ALLOC_SIZE, PCI_DMA_FROMDEVICE) );
                rxptr->rdes0 = cpu_to_le32(0x80000000);
                rxptr = (struct rx_desc *) rxptr->next_rx_desc;

Reply via email to