Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 363dc367 authored by Ramkrishna Vepa's avatar Ramkrishna Vepa Committed by Jeff Garzik
Browse files

S2IO: Save/Restore unused buffer mappings in 2/3 buffer mode



- 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: default avatarSantosh Rastapur <santosh.rastapur@neterion.com>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent dcd01faf
Loading
Loading
Loading
Loading
+16 −4
Original line number Diff line number Diff line
@@ -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 @@ static void s2io_reset(struct s2io_nic * sp)

	/* 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,8 +4293,6 @@ 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));
	} 
}