]> pilppa.org Git - linux-2.6-omap-h63xx.git/commitdiff
S2IO: Save/Restore unused buffer mappings in 2/3 buffer mode
authorRamkrishna Vepa <ram.vepa@neterion.com>
Wed, 7 Mar 2007 01:01:00 +0000 (17:01 -0800)
committerJeff Garzik <jeff@garzik.org>
Sat, 28 Apr 2007 15:00:58 +0000 (11:00 -0400)
- Save/Restore unused buffer mappings in 2/3 buffer mode to avoid
frequent mapping

- Save/Restore adapter reset count during adapter reset

  (Resending; forgot to cc netdev)

Signed-off-by: Santosh Rastapur <santosh.rastapur@neterion.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/net/s2io.c

index 7309a178b1ac6d7fa412b0daaa94b5da7058fc8d..049060cb6a05e5304c8cf383f6b50f5c56786bfb 100644 (file)
@@ -84,7 +84,7 @@
 #include "s2io.h"
 #include "s2io-regs.h"
 
-#define DRV_VERSION "2.0.17.1"
+#define DRV_VERSION "2.0.19.1"
 
 /* S2io Driver name & version. */
 static char s2io_driver_name[] = "Neterion";
@@ -2242,6 +2242,7 @@ static int fill_rx_buffers(struct s2io_nic *nic, int ring_no)
        struct buffAdd *ba;
        unsigned long flags;
        struct RxD_t *first_rxdp = NULL;
+       u64 Buffer0_ptr = 0, Buffer1_ptr = 0;
 
        mac_control = &nic->mac_control;
        config = &nic->config;
@@ -2342,7 +2343,14 @@ static int fill_rx_buffers(struct s2io_nic *nic, int ring_no)
                         * payload
                         */
 
+                       /* save the buffer pointers to avoid frequent dma mapping */
+                       Buffer0_ptr = ((struct RxD3*)rxdp)->Buffer0_ptr;
+                       Buffer1_ptr = ((struct RxD3*)rxdp)->Buffer1_ptr;
                        memset(rxdp, 0, sizeof(struct RxD3));
+                       /* restore the buffer pointers for dma sync*/
+                       ((struct RxD3*)rxdp)->Buffer0_ptr = Buffer0_ptr;
+                       ((struct RxD3*)rxdp)->Buffer1_ptr = Buffer1_ptr;
+
                        ba = &mac_control->rings[ring_no].ba[block_no][off];
                        skb_reserve(skb, BUF0_LEN);
                        tmp = (u64)(unsigned long) skb->data;
@@ -3307,6 +3315,7 @@ static void s2io_reset(struct s2io_nic * sp)
        u16 subid, pci_cmd;
        int i;
        u16 val16;
+       unsigned long long reset_cnt = 0;
        DBG_PRINT(INIT_DBG,"%s - Resetting XFrame card %s\n",
                        __FUNCTION__, sp->dev->name);
 
@@ -3372,6 +3381,11 @@ new_way:
 
        /* Reset device statistics maintained by OS */
        memset(&sp->stats, 0, sizeof (struct net_device_stats));
+       /* save reset count */
+       reset_cnt = sp->mac_control.stats_info->sw_stat.soft_reset_cnt;
+       memset(sp->mac_control.stats_info, 0, sizeof(struct stat_block));
+       /* restore reset count */
+       sp->mac_control.stats_info->sw_stat.soft_reset_cnt = reset_cnt;
 
        /* SXE-002: Configure link and activity LED to turn it off */
        subid = sp->pdev->subsystem_device;
@@ -4279,9 +4293,7 @@ static void s2io_updt_stats(struct s2io_nic *sp)
                        if (cnt == 5)
                                break; /* Updt failed */
                } while(1);
-       } else {
-               memset(sp->mac_control.stats_info, 0, sizeof(struct stat_block));
-       }
+       } 
 }
 
 /**