Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 27922b4260f65d317aabda37e42bbbff > files > 3065

kernel-2.6.18-238.el5.src.rpm

From: Prarit Bhargava <prarit@redhat.com>
Date: Tue, 29 Jun 2010 17:21:02 -0400
Subject: [net] s2io: compat header cleanups
Message-id: <4C2A2B7E.7050002@redhat.com>
Patchwork-id: 26624
O-Subject: Re: [RHEL5 PATCH 14/27] compat.h cleanup: s2io driver changes
Bugzilla: 546740
RH-Acked-by: Michal Schmidt <mschmidt@redhat.com>
RH-Acked-by: Andy Gospodarek <gospo@redhat.com>

Eliminate s2io driver compat header usage.

Signed-off-by: Jarod Wilson <jarod@redhat.com>

diff --git a/drivers/net/s2io-compat.h b/drivers/net/s2io-compat.h
deleted file mode 100644
index 749c3dc..0000000
--- a/drivers/net/s2io-compat.h
+++ /dev/null
@@ -1,229 +0,0 @@
-#ifndef __S2IO_COMPAT_H
-#define __S2IO_COMPAT_H
-
-typedef __u16 __bitwise __sum16;
-
-#ifndef pr_fmt
-#define pr_fmt(fmt) fmt
-#endif
-
-#define pr_err(fmt, ...) \
-	printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
-
-#define MAC_FMT "%02x:%02x:%02x:%02x:%02x:%02x"
-#define MAC_BUF_SIZE 18
-#define DECLARE_MAC_BUF(var) char var[MAC_BUF_SIZE]
-static inline char *print_mac(char *buf, const unsigned char *addr)
-{
-	sprintf(buf, MAC_FMT,
-		addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
-	return buf;
-}
-
-static inline int s2io_pci_dma_mapping_error(struct pci_dev *pdev,
-					     dma_addr_t dma_addr)
-{
-	return pci_dma_mapping_error(dma_addr);
-}
-#define pci_dma_mapping_error(pdev, dma_addr) s2io_pci_dma_mapping_error(pdev, dma_addr)
-
-/*
- * VLAN group compat functions
- */
-static inline void vlan_group_set_device(struct vlan_group *vg,
-					 u16 vid,
-					 struct net_device *dev)
-{
-	if (vg)
-		vg->vlan_devices[vid] = dev;
-}
-
-/*
- * delayer work compat
- */
-typedef void (*work_func_old_t)(void *);
-typedef void (*work_func_t)(struct work_struct *work);
-
-struct delayed_work {
-	struct work_struct work;
-};
-
-static inline void compat_INIT_WORK(struct work_struct *work, work_func_t func)
-{
-	INIT_WORK(work, (work_func_old_t)func, work);
-}
-
-static inline int compat_queue_delayed_work(struct workqueue_struct *wq,
-					    struct delayed_work *work,
-					    unsigned long delay)
-{
-	if (!delay)
-		return queue_work(wq, &work->work);
-	else
-		return queue_delayed_work(wq, &work->work, delay);
-}
-
-static inline int compat_cancel_delayed_work(struct delayed_work *work)
-{
-	return cancel_delayed_work(&work->work);
-}
-
-#undef INIT_WORK
-#define INIT_WORK(_work, _func) compat_INIT_WORK(_work, _func)
-#define INIT_DELAYED_WORK(_work,_func) INIT_WORK(&(_work)->work, _func)
-
-#define queue_delayed_work compat_queue_delayed_work
-#define cancel_delayed_work compat_cancel_delayed_work
-
-/*
- * Multiqueue stubs and function wrappers for single-queue devices
- */
-static inline struct net_device *alloc_etherdev_mq(int sizeof_priv,
-				     unsigned int queue_count)
-{
-	BUG_ON(queue_count != 1);
-	return alloc_etherdev(sizeof_priv);
-}
-
-static inline void netif_tx_stop_all_queues(struct net_device *dev)
-{
-	netif_stop_queue(dev);
-}
-
-static inline void netif_tx_start_all_queues(struct net_device *dev)
-{
-	netif_start_queue(dev);
-}
-
-static inline void netif_tx_wake_all_queues(struct net_device *dev)
-{
-	netif_wake_queue(dev);
-}
-
-static inline int __netif_subqueue_stopped(struct net_device *dev,
-					   int fifo_no)
-{
-	WARN_ON(1);
-	return netif_queue_stopped(dev);
-}
-
-static void netif_wake_subqueue(struct net_device *dev, int fifo_no)
-{
-	WARN_ON(1);
-	netif_wake_queue(dev);
-}
-
-static inline void skb_record_rx_queue(struct sk_buff *skb, u16 rx_queue)
-{
-}
-
-typedef int netdev_tx_t;
-
-/*
- * net_device_ops copied from upstream, but only the members actually
- * used by the s2io driver.
- */
-struct net_device_ops {
-	int			(*ndo_open)(struct net_device *dev);
-	int			(*ndo_stop)(struct net_device *dev);
-	netdev_tx_t		(*ndo_start_xmit) (struct sk_buff *skb,
-						   struct net_device *dev);
-	void			(*ndo_set_multicast_list)(struct net_device *dev);
-	int			(*ndo_set_mac_address)(struct net_device *dev,
-						       void *addr);
-	int			(*ndo_validate_addr)(struct net_device *dev);
-	int			(*ndo_do_ioctl)(struct net_device *dev,
-					        struct ifreq *ifr, int cmd);
-	int			(*ndo_change_mtu)(struct net_device *dev,
-						  int new_mtu);
-	void			(*ndo_tx_timeout) (struct net_device *dev);
-	struct net_device_stats* (*ndo_get_stats)(struct net_device *dev);
-	void			(*ndo_vlan_rx_register)(struct net_device *dev,
-						        struct vlan_group *grp);
-#ifdef CONFIG_NET_POLL_CONTROLLER
-	void                    (*ndo_poll_controller)(struct net_device *dev);
-#endif
-};
-
-#define eth_validate_addr NULL
-
-static inline void s2io_set_netdev_ops(struct net_device *ndev,
-	const struct net_device_ops *ndo)
-{
-	ndev->open               = ndo->ndo_open;
-	ndev->stop               = ndo->ndo_stop;
-	ndev->hard_start_xmit    = ndo->ndo_start_xmit;
-	ndev->set_multicast_list = ndo->ndo_set_multicast_list;
-	ndev->set_mac_address    = ndo->ndo_set_mac_address;
-	BUG_ON(ndo->ndo_validate_addr != eth_validate_addr);
-	ndev->do_ioctl           = ndo->ndo_do_ioctl;
-	ndev->change_mtu         = ndo->ndo_change_mtu;
-	ndev->tx_timeout         = ndo->ndo_tx_timeout;
-	ndev->get_stats          = ndo->ndo_get_stats;
-	ndev->vlan_rx_register   = ndo->ndo_vlan_rx_register;
-#ifdef CONFIG_NET_POLL_CONTROLLER
-	ndev->poll_controller    = ndo->ndo_poll_controller;
-#endif
-}
-
-/*
- * Partial new NAPI to old NAPI mapping
- * napi->dev is the dummy net_device for the old NAPI.
- */
-
-static inline void napi_enable(struct napi_struct *napi)
-{
-	netif_poll_enable(napi->dev);
-}
-
-static inline void napi_disable(struct napi_struct *napi)
-{
-	netif_poll_disable(napi->dev);
-}
-
-static inline void napi_schedule(struct napi_struct *napi)
-{
-	netif_rx_schedule(napi->dev);
-}
-
-/* Unlike upstream netif_napi_add(), ours may fail with -ENOMEM */
-static inline int rhel_netif_napi_add(void *nd_priv,
-	struct napi_struct *napi, int (*poll)(struct net_device *, int *),
-	int weight)
-{
-	struct net_device *nd;
-
-	nd = alloc_netdev(0, "", ether_setup);
-	if (!nd)
-		return -ENOMEM;
-
-	nd->priv = nd_priv;
-	nd->weight = weight;
-	nd->poll = poll;
-	set_bit(__LINK_STATE_START, &nd->state);
-	napi->dev = nd;
-	return 0;
-}
-
-static inline void netif_napi_del(struct napi_struct *napi)
-{
-	free_netdev(napi->dev);
-	napi->dev = NULL;
-}
-
-static inline int rhel_napi_poll_wrapper(int (*poll)(struct napi_struct*, int),
-	struct napi_struct *napi, struct net_device *dummy_dev, int *budget)
-{
-	int to_do = min(*budget, dummy_dev->quota);
-	int pkts_processed;
-
-	pkts_processed = poll(napi, to_do);
-
-	*budget -= pkts_processed;
-	dummy_dev->quota -= pkts_processed;
-
-	return (pkts_processed >= to_do);
-}
-
-
-#endif /* __S2IO_COMPAT_H */
diff --git a/drivers/net/s2io.c b/drivers/net/s2io.c
index cf66d10..675c6f9 100644
--- a/drivers/net/s2io.c
+++ b/drivers/net/s2io.c
@@ -54,6 +54,9 @@
 
 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 
+#define pr_err(fmt, ...) \
+	printk(KERN_ERR pr_fmt(fmt), ##__VA_ARGS__)
+
 #include <linux/module.h>
 #include <linux/types.h>
 #include <linux/errno.h>
@@ -86,7 +89,6 @@
 /* local include */
 #include "s2io.h"
 #include "s2io-regs.h"
-#include "s2io-compat.h"
 
 #define DRV_VERSION "2.0.26.25"
 
@@ -542,7 +544,7 @@ static inline void s2io_stop_all_tx_queue(struct s2io_nic *sp)
 		for (i = 0; i < sp->config.tx_fifo_num; i++)
 			sp->mac_control.fifos[i].queue_state = FIFO_QUEUE_STOP;
 	}
-	netif_tx_stop_all_queues(sp->dev);
+	netif_stop_queue(sp->dev);
 }
 
 static inline void s2io_stop_tx_queue(struct s2io_nic *sp, int fifo_no)
@@ -551,7 +553,7 @@ static inline void s2io_stop_tx_queue(struct s2io_nic *sp, int fifo_no)
 		sp->mac_control.fifos[fifo_no].queue_state =
 			FIFO_QUEUE_STOP;
 
-	netif_tx_stop_all_queues(sp->dev);
+	netif_stop_queue(sp->dev);
 }
 
 static inline void s2io_start_all_tx_queue(struct s2io_nic *sp)
@@ -562,7 +564,7 @@ static inline void s2io_start_all_tx_queue(struct s2io_nic *sp)
 		for (i = 0; i < sp->config.tx_fifo_num; i++)
 			sp->mac_control.fifos[i].queue_state = FIFO_QUEUE_START;
 	}
-	netif_tx_start_all_queues(sp->dev);
+	netif_start_queue(sp->dev);
 }
 
 static inline void s2io_start_tx_queue(struct s2io_nic *sp, int fifo_no)
@@ -571,7 +573,7 @@ static inline void s2io_start_tx_queue(struct s2io_nic *sp, int fifo_no)
 		sp->mac_control.fifos[fifo_no].queue_state =
 			FIFO_QUEUE_START;
 
-	netif_tx_start_all_queues(sp->dev);
+	netif_start_queue(sp->dev);
 }
 
 static inline void s2io_wake_all_tx_queue(struct s2io_nic *sp)
@@ -582,7 +584,7 @@ static inline void s2io_wake_all_tx_queue(struct s2io_nic *sp)
 		for (i = 0; i < sp->config.tx_fifo_num; i++)
 			sp->mac_control.fifos[i].queue_state = FIFO_QUEUE_START;
 	}
-	netif_tx_wake_all_queues(sp->dev);
+	netif_wake_queue(sp->dev);
 }
 
 static inline void s2io_wake_tx_queue(
@@ -590,8 +592,8 @@ static inline void s2io_wake_tx_queue(
 {
 
 	if (multiq) {
-		if (cnt && __netif_subqueue_stopped(fifo->dev, fifo->fifo_no))
-			netif_wake_subqueue(fifo->dev, fifo->fifo_no);
+		if (cnt && netif_queue_stopped(fifo->dev))
+			netif_wake_queue(fifo->dev);
 	} else if (cnt && (fifo->queue_state == FIFO_QUEUE_STOP)) {
 		if (netif_queue_stopped(fifo->dev)) {
 			fifo->queue_state = FIFO_QUEUE_START;
@@ -2585,8 +2587,7 @@ static int fill_rx_buffers(struct s2io_nic *nic, struct ring_info *ring,
 				pci_map_single(ring->pdev, skb->data,
 					       size - NET_IP_ALIGN,
 					       PCI_DMA_FROMDEVICE);
-			if (pci_dma_mapping_error(nic->pdev,
-						  rxdp1->Buffer0_ptr))
+			if (pci_dma_mapping_error(rxdp1->Buffer0_ptr))
 				goto pci_map_failed;
 
 			rxdp->Control_2 =
@@ -2621,8 +2622,7 @@ static int fill_rx_buffers(struct s2io_nic *nic, struct ring_info *ring,
 					pci_map_single(ring->pdev, ba->ba_0,
 						       BUF0_LEN,
 						       PCI_DMA_FROMDEVICE);
-				if (pci_dma_mapping_error(nic->pdev,
-							  rxdp3->Buffer0_ptr))
+				if (pci_dma_mapping_error(rxdp3->Buffer0_ptr))
 					goto pci_map_failed;
 			} else
 				pci_dma_sync_single_for_device(ring->pdev,
@@ -2643,8 +2643,7 @@ static int fill_rx_buffers(struct s2io_nic *nic, struct ring_info *ring,
 								    ring->mtu + 4,
 								    PCI_DMA_FROMDEVICE);
 
-				if (pci_dma_mapping_error(nic->pdev,
-							  rxdp3->Buffer2_ptr))
+				if (pci_dma_mapping_error(rxdp3->Buffer2_ptr))
 					goto pci_map_failed;
 
 				if (from_card_up) {
@@ -2654,8 +2653,7 @@ static int fill_rx_buffers(struct s2io_nic *nic, struct ring_info *ring,
 							       BUF1_LEN,
 							       PCI_DMA_FROMDEVICE);
 
-					if (pci_dma_mapping_error(nic->pdev,
-								  rxdp3->Buffer1_ptr)) {
+					if (pci_dma_mapping_error(rxdp3->Buffer1_ptr)) {
 						pci_unmap_single(ring->pdev,
 								 (dma_addr_t)(unsigned long)
 								 skb->data,
@@ -2874,6 +2872,20 @@ static int s2io_poll_inta(struct napi_struct *napi, int budget)
 	return pkts_processed;
 }
 
+static inline int rhel_napi_poll_wrapper(int (*poll)(struct napi_struct*, int),
+	struct napi_struct *napi, struct net_device *dummy_dev, int *budget)
+{
+	int to_do = min(*budget, dummy_dev->quota);
+	int pkts_processed;
+
+	pkts_processed = poll(napi, to_do);
+
+	*budget -= pkts_processed;
+	dummy_dev->quota -= pkts_processed;
+
+	return (pkts_processed >= to_do);
+}
+
 static int rhel_s2io_poll_msix(struct net_device *dummy_dev, int *budget)
 {
 	struct ring_info *ring = dummy_dev->priv;
@@ -4072,7 +4084,7 @@ static int s2io_close(struct net_device *dev)
  *  0 on success & 1 on failure.
  */
 
-static netdev_tx_t s2io_xmit(struct sk_buff *skb, struct net_device *dev)
+static int s2io_xmit(struct sk_buff *skb, struct net_device *dev)
 {
 	struct s2io_nic *sp = netdev_priv(dev);
 	u16 frg_cnt, frg_len, i, queue, queue_len, put_off, get_off;
@@ -4153,7 +4165,7 @@ static netdev_tx_t s2io_xmit(struct sk_buff *skb, struct net_device *dev)
 	}
 
 	if (sp->config.multiq) {
-		if (__netif_subqueue_stopped(dev, fifo->fifo_no)) {
+		if (netif_queue_stopped(dev)) {
 			spin_unlock_irqrestore(&fifo->tx_lock, flags);
 			return NETDEV_TX_BUSY;
 		}
@@ -4222,14 +4234,14 @@ static netdev_tx_t s2io_xmit(struct sk_buff *skb, struct net_device *dev)
 						      fifo->ufo_in_band_v,
 						      sizeof(u64),
 						      PCI_DMA_TODEVICE);
-		if (pci_dma_mapping_error(sp->pdev, txdp->Buffer_Pointer))
+		if (pci_dma_mapping_error(txdp->Buffer_Pointer))
 			goto pci_map_failed;
 		txdp++;
 	}
 
 	txdp->Buffer_Pointer = pci_map_single(sp->pdev, skb->data,
 					      frg_len, PCI_DMA_TODEVICE);
-	if (pci_dma_mapping_error(sp->pdev, txdp->Buffer_Pointer))
+	if (pci_dma_mapping_error(txdp->Buffer_Pointer))
 		goto pci_map_failed;
 
 	txdp->Host_Control = (unsigned long)skb;
@@ -4331,7 +4343,7 @@ static irqreturn_t s2io_msix_ring_handle(int irq, void *dev_id,
 		val8 = (ring->ring_no == 0) ? 0x7f : 0xff;
 		writeb(val8, addr);
 		val8 = readb(addr);
-		napi_schedule(&ring->napi);
+		netif_rx_schedule(ring->napi.dev);
 	} else {
 		rx_intr_handler(ring, 0);
 		s2io_chk_rx_buffers(sp, ring);
@@ -4811,7 +4823,7 @@ static irqreturn_t s2io_isr(int irq, void *dev_id, struct pt_regs *regs)
 
 		if (config->napi) {
 			if (reason & GEN_INTR_RXTRAFFIC) {
-				napi_schedule(&sp->napi);
+				netif_rx_schedule(sp->napi.dev);
 				writeq(S2IO_MINUS_ONE, &bar0->rx_traffic_mask);
 				writeq(S2IO_MINUS_ONE, &bar0->rx_traffic_int);
 				readl(&bar0->rx_traffic_int);
@@ -6809,8 +6821,9 @@ static int s2io_change_mtu(struct net_device *dev, int new_mtu)
  * Description: Sets the link status for the adapter
  */
 
-static void s2io_set_link(struct work_struct *work)
+static void s2io_set_link(void *data)
 {
+	struct work_struct *work = data;
 	struct s2io_nic *nic = container_of(work, struct s2io_nic,
 					    set_link_task);
 	struct net_device *dev = nic->dev;
@@ -6923,7 +6936,7 @@ static int set_rxd_buffer_pointer(struct s2io_nic *sp, struct RxD_t *rxdp,
 				pci_map_single(sp->pdev, (*skb)->data,
 					       size - NET_IP_ALIGN,
 					       PCI_DMA_FROMDEVICE);
-			if (pci_dma_mapping_error(sp->pdev, rxdp1->Buffer0_ptr))
+			if (pci_dma_mapping_error(rxdp1->Buffer0_ptr))
 				goto memalloc_failed;
 			rxdp->Host_Control = (unsigned long) (*skb);
 		}
@@ -6949,13 +6962,12 @@ static int set_rxd_buffer_pointer(struct s2io_nic *sp, struct RxD_t *rxdp,
 				pci_map_single(sp->pdev, (*skb)->data,
 					       dev->mtu + 4,
 					       PCI_DMA_FROMDEVICE);
-			if (pci_dma_mapping_error(sp->pdev, rxdp3->Buffer2_ptr))
+			if (pci_dma_mapping_error(rxdp3->Buffer2_ptr))
 				goto memalloc_failed;
 			rxdp3->Buffer0_ptr = *temp0 =
 				pci_map_single(sp->pdev, ba->ba_0, BUF0_LEN,
 					       PCI_DMA_FROMDEVICE);
-			if (pci_dma_mapping_error(sp->pdev,
-						  rxdp3->Buffer0_ptr)) {
+			if (pci_dma_mapping_error(rxdp3->Buffer0_ptr)) {
 				pci_unmap_single(sp->pdev,
 						 (dma_addr_t)rxdp3->Buffer2_ptr,
 						 dev->mtu + 4,
@@ -6968,8 +6980,7 @@ static int set_rxd_buffer_pointer(struct s2io_nic *sp, struct RxD_t *rxdp,
 			rxdp3->Buffer1_ptr = *temp1 =
 				pci_map_single(sp->pdev, ba->ba_1, BUF1_LEN,
 					       PCI_DMA_FROMDEVICE);
-			if (pci_dma_mapping_error(sp->pdev,
-						  rxdp3->Buffer1_ptr)) {
+			if (pci_dma_mapping_error(rxdp3->Buffer1_ptr)) {
 				pci_unmap_single(sp->pdev,
 						 (dma_addr_t)rxdp3->Buffer0_ptr,
 						 BUF0_LEN, PCI_DMA_FROMDEVICE);
@@ -7174,10 +7185,10 @@ static void do_s2io_card_down(struct s2io_nic *sp, int do_io)
 		int off = 0;
 		if (config->intr_type ==  MSI_X) {
 			for (; off < sp->config.rx_ring_num; off++)
-				napi_disable(&sp->mac_control.rings[off].napi);
+				netif_poll_disable(sp->mac_control.rings[off].napi.dev);
 		}
 		else
-			napi_disable(&sp->napi);
+			netif_poll_disable(sp->napi.dev);
 	}
 
 	/* disable Tx and Rx traffic on the NIC */
@@ -7277,9 +7288,9 @@ static int s2io_card_up(struct s2io_nic *sp)
 	if (config->napi) {
 		if (config->intr_type ==  MSI_X) {
 			for (i = 0; i < sp->config.rx_ring_num; i++)
-				napi_enable(&sp->mac_control.rings[i].napi);
+				netif_poll_enable(sp->mac_control.rings[i].napi.dev);
 		} else {
-			napi_enable(&sp->napi);
+			netif_poll_enable(sp->napi.dev);
 		}
 	}
 
@@ -7347,8 +7358,9 @@ static int s2io_card_up(struct s2io_nic *sp)
  * spin lock.
  */
 
-static void s2io_restart_nic(struct work_struct *work)
+static void s2io_restart_nic(void *data)
 {
+	struct work_struct *work = data;
 	struct s2io_nic *sp = container_of(work, struct s2io_nic, rst_timer_task);
 	struct net_device *dev = sp->dev;
 
@@ -7578,7 +7590,6 @@ static int rx_osm_handler(struct ring_info *ring_data, struct RxD_t * rxdp)
 
 	swstats->mem_freed += skb->truesize;
 send_up:
-	skb_record_rx_queue(skb, ring_no);
 	queue_rx_frame(skb, RXD_GET_VLAN_TAG(rxdp->Control_2));
 	dev->last_rx = jiffies;
 aggregate:
@@ -7753,23 +7764,6 @@ static int rts_ds_steer(struct s2io_nic *nic, u8 ds_codepoint, u8 ring)
 				     S2IO_BIT_RESET);
 }
 
-static const struct net_device_ops s2io_netdev_ops = {
-	.ndo_open	        = s2io_open,
-	.ndo_stop	        = s2io_close,
-	.ndo_get_stats	        = s2io_get_stats,
-	.ndo_start_xmit    	= s2io_xmit,
-	.ndo_validate_addr	= eth_validate_addr,
-	.ndo_set_multicast_list = s2io_set_multicast,
-	.ndo_do_ioctl	   	= s2io_ioctl,
-	.ndo_set_mac_address    = s2io_set_mac_addr,
-	.ndo_change_mtu	   	= s2io_change_mtu,
-	.ndo_vlan_rx_register   = s2io_vlan_rx_register,
-	.ndo_tx_timeout	   	= s2io_tx_watchdog,
-#ifdef CONFIG_NET_POLL_CONTROLLER
-	.ndo_poll_controller    = s2io_netpoll,
-#endif
-};
-
 static void s2io_napi_del_all_rings(struct s2io_nic *sp)
 {
 	struct ring_info *ring;
@@ -7779,7 +7773,8 @@ static void s2io_napi_del_all_rings(struct s2io_nic *sp)
 		ring = &sp->mac_control.rings[i];
 		if (!ring->napi.dev)
 			break;
-		netif_napi_del(&ring->napi);
+		free_netdev(ring->napi.dev);
+		ring->napi.dev = NULL;
 	}
 }
 
@@ -7813,6 +7808,7 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre)
 	int mode;
 	u8 dev_intr_type = intr_type;
 	u8 dev_multiq = 0;
+	struct net_device *napi_nd;
 	DECLARE_MAC_BUF(mac);
 
 	ret = s2io_verify_parm(pdev, &dev_intr_type, &dev_multiq);
@@ -8017,7 +8013,20 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre)
 	}
 
 	/*  Driver entry points */
-	s2io_set_netdev_ops(dev, &s2io_netdev_ops);
+	dev->open = s2io_open;
+	dev->stop = s2io_close;
+	dev->hard_start_xmit = s2io_xmit;
+	dev->set_mac_address = s2io_set_mac_addr;
+	dev->get_stats = s2io_get_stats;
+	dev->set_multicast_list = s2io_set_multicast;
+	dev->change_mtu = s2io_change_mtu;
+	dev->vlan_rx_register = s2io_vlan_rx_register;
+	dev->tx_timeout = s2io_tx_watchdog;
+	dev->do_ioctl = s2io_ioctl;
+#ifdef CONFIG_NET_POLL_CONTROLLER
+	dev->poll_controller = s2io_netpoll;
+#endif
+
 	SET_ETHTOOL_OPS(dev, &netdev_ethtool_ops);
 	dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
 
@@ -8031,8 +8040,8 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre)
 		dev->features |= NETIF_F_HW_CSUM;
 	}
 	dev->watchdog_timeo = WATCH_DOG_TIMEOUT;
-	INIT_WORK(&sp->rst_timer_task, s2io_restart_nic);
-	INIT_WORK(&sp->set_link_task, s2io_set_link);
+	INIT_WORK(&sp->rst_timer_task, s2io_restart_nic, &sp->rst_timer_task);
+	INIT_WORK(&sp->set_link_task, s2io_set_link, &sp->set_link_task);
 
 	pci_save_state(sp->pdev);
 
@@ -8076,18 +8085,29 @@ s2io_init_nic(struct pci_dev *pdev, const struct pci_device_id *pre)
 		for (i = 0; i < config->rx_ring_num ; i++) {
 			struct ring_info *ring = &mac_control->rings[i];
 
-			ret = rhel_netif_napi_add(ring, &ring->napi,
-						  rhel_s2io_poll_msix, 64);
-			if (ret) {
+			napi_nd = alloc_netdev(0, "", ether_setup);
+			if (!napi_nd) {
 				s2io_napi_del_all_rings(sp);
 				goto napi_add_failed;
 			}
+
+			napi_nd->priv = ring;
+			napi_nd->weight = 64;
+			napi_nd->poll = rhel_s2io_poll_msix;
+			set_bit(__LINK_STATE_START, &napi_nd->state);
+			ring->napi.dev = napi_nd;
+
 		}
 	} else {
-		ret = rhel_netif_napi_add(sp, &sp->napi,
-					  rhel_s2io_poll_inta, 64);
-		if (ret)
+		napi_nd = alloc_netdev(0, "", ether_setup);
+		if (!napi_nd)
 			goto napi_add_failed;
+
+		napi_nd->priv = sp;
+		napi_nd->weight = 64;
+		napi_nd->poll = rhel_s2io_poll_inta;
+		set_bit(__LINK_STATE_START, &napi_nd->state);
+		sp->napi.dev = napi_nd;
 	}
 
 	/* Not needed for Herc */
@@ -8292,8 +8312,10 @@ register_failed:
 set_swap_failed:
 	if (config->intr_type == MSI_X)
 		s2io_napi_del_all_rings(sp);
-	else
-		netif_napi_del(&sp->napi);
+	else {
+		free_netdev(sp->napi.dev);
+		sp->napi.dev = NULL;
+	}
 napi_add_failed:
 	iounmap(sp->bar1);
 bar1_remap_failed:
@@ -8335,8 +8357,10 @@ static void __devexit s2io_rem_nic(struct pci_dev *pdev)
 	unregister_netdev(dev);
 	if (sp->config.intr_type == MSI_X)
 		s2io_napi_del_all_rings(sp);
-	else
-		netif_napi_del(&sp->napi);
+	else {
+		free_netdev(sp->napi.dev);
+		sp->napi.dev = NULL;
+	}
 
 	free_shared_mem(sp);
 	iounmap(sp->bar0);
@@ -8789,5 +8813,5 @@ static void s2io_io_resume(struct pci_dev *pdev)
 	}
 
 	netif_device_attach(netdev);
-	netif_tx_wake_all_queues(netdev);
+	netif_wake_queue(netdev);
 }
diff --git a/drivers/net/s2io.h b/drivers/net/s2io.h
index 71b9853..2fc3c87 100644
--- a/drivers/net/s2io.h
+++ b/drivers/net/s2io.h
@@ -998,27 +998,6 @@ struct s2io_nic {
 #define RESET_ERROR 1;
 #define CMD_ERROR   2;
 
-/*  OS related system calls */
-#ifndef readq
-static inline u64 readq(void __iomem *addr)
-{
-	u64 ret = 0;
-	ret = readl(addr + 4);
-	ret <<= 32;
-	ret |= readl(addr);
-
-	return ret;
-}
-#endif
-
-#ifndef writeq
-static inline void writeq(u64 val, void __iomem *addr)
-{
-	writel((u32) (val), addr);
-	writel((u32) (val >> 32), (addr + 4));
-}
-#endif
-
 /*
  * Some registers have to be written in a particular order to
  * expect correct hardware operation. The macro SPECIAL_REG_WRITE
@@ -1135,7 +1114,7 @@ s2io_msix_fifo_handle(int irq, void *dev_id, struct pt_regs *regs);
 static irqreturn_t s2io_isr(int irq, void *dev_id, struct pt_regs *regs);
 static int verify_xena_quiescence(struct s2io_nic *sp);
 static struct ethtool_ops netdev_ethtool_ops;
-static void s2io_set_link(struct work_struct *work);
+static void s2io_set_link(void *data);
 static int s2io_set_swapper(struct s2io_nic * sp);
 static void s2io_card_down(struct s2io_nic *nic);
 static int s2io_card_up(struct s2io_nic *nic);