All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Amit S. Kale" <amitkale@linsyssoft.com>
To: Stephen Hemminger <shemminger@osdl.org>
Cc: Christoph Hellwig <hch@infradead.org>,
	Jeff Garzik <jgarzik@pobox.com>,
	"Amit S. Kale" <amitkale@netxen.com>,
	netdev@vger.kernel.org
Subject: Re: [PATCH] netxen: remove private ioctl
Date: Wed, 27 Dec 2006 11:06:04 +0530	[thread overview]
Message-ID: <200612271106.04931.amitkale@linsyssoft.com> (raw)
In-Reply-To: <20061215075708.57a1b6b6@localhost.localdomain>

On Friday 15 December 2006 21:27, Stephen Hemminger wrote:
> The netxen driver includes a private ioctl that provides access
> to functionality that is already available in other ways. The PCI
> layer has application access hooks (see setpci), and the statistics
> are available in ethtool/netstats.

Thanks.
We needed ioctls mainly for debugging a tool and for flashing. We'll soon send 
a patch to make our flash tool work through ethtool interface. Should be much 
cleaner.

-Amit

>
> Signed-off-by: Stephen Hemminger <shemminger@osdl.org>
> ---
>  drivers/net/netxen/netxen_nic.h         |   11 -
>  drivers/net/netxen/netxen_nic_ethtool.c |    5 -
>  drivers/net/netxen/netxen_nic_hw.c      |  294
> ------------------------------- drivers/net/netxen/netxen_nic_init.c    | 
> 237 ------------------------- drivers/net/netxen/netxen_nic_ioctl.h   |  
> 77 --------
>  drivers/net/netxen/netxen_nic_main.c    |   45 -----
>  6 files changed, 1 insertions(+), 668 deletions(-)
>
> diff --git a/drivers/net/netxen/netxen_nic.h
> b/drivers/net/netxen/netxen_nic.h index b5410be..b4c4fc0 100644
> --- a/drivers/net/netxen/netxen_nic.h
> +++ b/drivers/net/netxen/netxen_nic.h
> @@ -1027,14 +1027,6 @@ int netxen_nic_hw_read_wx(struct netxen_
>  			  int len);
>  int netxen_nic_hw_write_wx(struct netxen_adapter *adapter, u64 off, void
> *data, int len);
> -int netxen_nic_hw_read_ioctl(struct netxen_adapter *adapter, u64 off,
> -			     void *data, int len);
> -int netxen_nic_hw_write_ioctl(struct netxen_adapter *adapter, u64 off,
> -			      void *data, int len);
> -int netxen_nic_pci_mem_write_ioctl(struct netxen_adapter *adapter,
> -				   u64 off, void *data, int size);
> -int netxen_nic_pci_mem_read_ioctl(struct netxen_adapter *adapter,
> -				  u64 off, void *data, int size);
>  void netxen_crb_writelit_adapter(struct netxen_adapter *adapter,
>  				 unsigned long off, int data);
>
> @@ -1067,9 +1059,6 @@ void netxen_tso_check(struct netxen_adap
>  		      struct cmd_desc_type0 *desc, struct sk_buff *skb);
>  int netxen_nic_hw_resources(struct netxen_adapter *adapter);
>  void netxen_nic_clear_stats(struct netxen_adapter *adapter);
> -int
> -netxen_nic_do_ioctl(struct netxen_adapter *adapter, void *u_data,
> -		    struct netxen_port *port);
>  int netxen_nic_rx_has_work(struct netxen_adapter *adapter);
>  int netxen_nic_tx_has_work(struct netxen_adapter *adapter);
>  void netxen_watchdog_task(struct work_struct *work);
> diff --git a/drivers/net/netxen/netxen_nic_ethtool.c
> b/drivers/net/netxen/netxen_nic_ethtool.c index 2ab4885..3404461 100644
> --- a/drivers/net/netxen/netxen_nic_ethtool.c
> +++ b/drivers/net/netxen/netxen_nic_ethtool.c
> @@ -42,7 +42,6 @@ #include <linux/version.h>
>  #include "netxen_nic_hw.h"
>  #include "netxen_nic.h"
>  #include "netxen_nic_phan_reg.h"
> -#include "netxen_nic_ioctl.h"
>
>  struct netxen_nic_stats {
>  	char stat_string[ETH_GSTRING_LEN];
> @@ -79,8 +78,7 @@ static const struct netxen_nic_stats net
>  	{"tx_bytes", NETXEN_NIC_STAT(stats.txbytes)},
>  };
>
> -#define NETXEN_NIC_STATS_LEN	\
> -	sizeof(netxen_nic_gstrings_stats) / sizeof(struct netxen_nic_stats)
> +#define NETXEN_NIC_STATS_LEN	ARRAY_SIZE(netxen_nic_gstrings_stats)
>
>  static const char netxen_nic_gstrings_test[][ETH_GSTRING_LEN] = {
>  	"Register_Test_offline", "EEPROM_Test_offline",
> @@ -711,7 +709,6 @@ netxen_nic_get_ethtool_stats(struct net_
>  		    (netxen_nic_gstrings_stats[index].sizeof_stat ==
>  		     sizeof(u64)) ? *(u64 *) p : *(u32 *) p;
>  	}
> -
>  }
>
>  struct ethtool_ops netxen_nic_ethtool_ops = {
> diff --git a/drivers/net/netxen/netxen_nic_hw.c
> b/drivers/net/netxen/netxen_nic_hw.c index 9147b60..5dac50c 100644
> --- a/drivers/net/netxen/netxen_nic_hw.c
> +++ b/drivers/net/netxen/netxen_nic_hw.c
> @@ -997,297 +997,3 @@ void netxen_nic_flash_print(struct netxe
>  		       fw_major, fw_minor);
>  }
>
> -int netxen_crb_read_val(struct netxen_adapter *adapter, unsigned long off)
> -{
> -	int data;
> -	netxen_nic_hw_read_wx(adapter, off, &data, 4);
> -	return data;
> -}
> -
> -int netxen_nic_hw_write_ioctl(struct netxen_adapter *adapter, u64 off,
> -			      void *data, int len)
> -{
> -	void *addr;
> -	u64 offset = off;
> -	u8 *mem_ptr = NULL;
> -	unsigned long mem_base;
> -	unsigned long mem_page;
> -
> -	if (ADDR_IN_WINDOW1(off)) {
> -		addr = NETXEN_CRB_NORMALIZE(adapter, off);
> -		if (!addr) {
> -			mem_base = pci_resource_start(adapter->ahw.pdev, 0);
> -			offset = NETXEN_CRB_NORMAL(off);
> -			mem_page = offset & PAGE_MASK;
> -			if (mem_page != ((offset + len - 1) & PAGE_MASK))
> -				mem_ptr =
> -				    ioremap(mem_base + mem_page, PAGE_SIZE * 2);
> -			else
> -				mem_ptr =
> -				    ioremap(mem_base + mem_page, PAGE_SIZE);
> -			if (mem_ptr == 0UL) {
> -				return 1;
> -			}
> -			addr = mem_ptr;
> -			addr += offset & (PAGE_SIZE - 1);
> -		}
> -	} else {
> -		addr = pci_base_offset(adapter, off);
> -		if (!addr) {
> -			mem_base = pci_resource_start(adapter->ahw.pdev, 0);
> -			mem_page = off & PAGE_MASK;
> -			if (mem_page != ((off + len - 1) & PAGE_MASK))
> -				mem_ptr =
> -				    ioremap(mem_base + mem_page, PAGE_SIZE * 2);
> -			else
> -				mem_ptr =
> -				    ioremap(mem_base + mem_page, PAGE_SIZE);
> -			if (mem_ptr == 0UL) {
> -				return 1;
> -			}
> -			addr = mem_ptr;
> -			addr += off & (PAGE_SIZE - 1);
> -		}
> -		netxen_nic_pci_change_crbwindow(adapter, 0);
> -	}
> -	switch (len) {
> -	case 1:
> -		writeb(*(u8 *) data, addr);
> -		break;
> -	case 2:
> -		writew(*(u16 *) data, addr);
> -		break;
> -	case 4:
> -		writel(*(u32 *) data, addr);
> -		break;
> -	case 8:
> -		writeq(*(u64 *) data, addr);
> -		break;
> -	default:
> -		DPRINTK(INFO,
> -			"writing data %lx to offset %llx, num words=%d\n",
> -			*(unsigned long *)data, off, (len >> 3));
> -
> -		netxen_nic_hw_block_write64((u64 __iomem *) data, addr,
> -					    (len >> 3));
> -		break;
> -	}
> -
> -	if (!ADDR_IN_WINDOW1(off))
> -		netxen_nic_pci_change_crbwindow(adapter, 1);
> -	if (mem_ptr)
> -		iounmap(mem_ptr);
> -	return 0;
> -}
> -
> -int netxen_nic_hw_read_ioctl(struct netxen_adapter *adapter, u64 off,
> -			     void *data, int len)
> -{
> -	void *addr;
> -	u64 offset;
> -	u8 *mem_ptr = NULL;
> -	unsigned long mem_base;
> -	unsigned long mem_page;
> -
> -	if (ADDR_IN_WINDOW1(off)) {
> -		addr = NETXEN_CRB_NORMALIZE(adapter, off);
> -		if (!addr) {
> -			mem_base = pci_resource_start(adapter->ahw.pdev, 0);
> -			offset = NETXEN_CRB_NORMAL(off);
> -			mem_page = offset & PAGE_MASK;
> -			if (mem_page != ((offset + len - 1) & PAGE_MASK))
> -				mem_ptr =
> -				    ioremap(mem_base + mem_page, PAGE_SIZE * 2);
> -			else
> -				mem_ptr =
> -				    ioremap(mem_base + mem_page, PAGE_SIZE);
> -			if (mem_ptr == 0UL) {
> -				*(u8 *) data = 0;
> -				return 1;
> -			}
> -			addr = mem_ptr;
> -			addr += offset & (PAGE_SIZE - 1);
> -		}
> -	} else {
> -		addr = pci_base_offset(adapter, off);
> -		if (!addr) {
> -			mem_base = pci_resource_start(adapter->ahw.pdev, 0);
> -			mem_page = off & PAGE_MASK;
> -			if (mem_page != ((off + len - 1) & PAGE_MASK))
> -				mem_ptr =
> -				    ioremap(mem_base + mem_page, PAGE_SIZE * 2);
> -			else
> -				mem_ptr =
> -				    ioremap(mem_base + mem_page, PAGE_SIZE);
> -			if (mem_ptr == 0UL)
> -				return 1;
> -			addr = mem_ptr;
> -			addr += off & (PAGE_SIZE - 1);
> -		}
> -		netxen_nic_pci_change_crbwindow(adapter, 0);
> -	}
> -	switch (len) {
> -	case 1:
> -		*(u8 *) data = readb(addr);
> -		break;
> -	case 2:
> -		*(u16 *) data = readw(addr);
> -		break;
> -	case 4:
> -		*(u32 *) data = readl(addr);
> -		break;
> -	case 8:
> -		*(u64 *) data = readq(addr);
> -		break;
> -	default:
> -		netxen_nic_hw_block_read64((u64 __iomem *) data, addr,
> -					   (len >> 3));
> -		break;
> -	}
> -	if (!ADDR_IN_WINDOW1(off))
> -		netxen_nic_pci_change_crbwindow(adapter, 1);
> -	if (mem_ptr)
> -		iounmap(mem_ptr);
> -	return 0;
> -}
> -
> -int netxen_nic_pci_mem_write_ioctl(struct netxen_adapter *adapter, u64
> off, -				   void *data, int size)
> -{
> -	void *addr;
> -	int ret = 0;
> -	u8 *mem_ptr = NULL;
> -	unsigned long mem_base;
> -	unsigned long mem_page;
> -
> -	if (data == NULL || off > (128 * 1024 * 1024)) {
> -		printk(KERN_ERR "%s: data: %p off:%llx\n",
> -		       netxen_nic_driver_name, data, off);
> -		return 1;
> -	}
> -	off = netxen_nic_pci_set_window(adapter, off);
> -	/* Corner case : Malicious user tried to break the driver by reading
> -	   last few bytes in ranges and tries to read further addresses.
> -	 */
> -	if (!pci_base(adapter, off + size - 1) && pci_base(adapter, off)) {
> -		printk(KERN_ERR "%s: Invalid access to memory address range"
> -		       " 0x%llx - 0x%llx\n", netxen_nic_driver_name, off,
> -		       off + size);
> -		return 1;
> -	}
> -	addr = pci_base_offset(adapter, off);
> -	DPRINTK(INFO, "writing data %llx to offset %llx\n",
> -		*(unsigned long long *)data, off);
> -	if (!addr) {
> -		mem_base = pci_resource_start(adapter->ahw.pdev, 0);
> -		mem_page = off & PAGE_MASK;
> -		/* Map two pages whenever user tries to access addresses in two
> -		   consecutive pages.
> -		 */
> -		if (mem_page != ((off + size - 1) & PAGE_MASK))
> -			mem_ptr = ioremap(mem_base + mem_page, PAGE_SIZE * 2);
> -		else
> -			mem_ptr = ioremap(mem_base + mem_page, PAGE_SIZE);
> -		if (mem_ptr == 0UL) {
> -			return 1;
> -		}
> -		addr = mem_ptr;
> -		addr += off & (PAGE_SIZE - 1);
> -	}
> -	switch (size) {
> -	case 1:
> -		writeb(*(u8 *) data, addr);
> -		break;
> -	case 2:
> -		writew(*(u16 *) data, addr);
> -		break;
> -	case 4:
> -		writel(*(u32 *) data, addr);
> -		break;
> -	case 8:
> -		writeq(*(u64 *) data, addr);
> -		break;
> -	default:
> -		DPRINTK(INFO,
> -			"writing data %lx to offset %llx, num words=%d\n",
> -			*(unsigned long *)data, off, (size >> 3));
> -
> -		netxen_nic_hw_block_write64((u64 __iomem *) data, addr,
> -					    (size >> 3));
> -		break;
> -	}
> -
> -	if (mem_ptr)
> -		iounmap(mem_ptr);
> -	DPRINTK(INFO, "wrote %llx\n", *(unsigned long long *)data);
> -
> -	return ret;
> -}
> -
> -int netxen_nic_pci_mem_read_ioctl(struct netxen_adapter *adapter,
> -				  u64 off, void *data, int size)
> -{
> -	void *addr;
> -	int ret = 0;
> -	u8 *mem_ptr = NULL;
> -	unsigned long mem_base;
> -	unsigned long mem_page;
> -
> -	if (data == NULL || off > (128 * 1024 * 1024)) {
> -		printk(KERN_ERR "%s: data: %p off:%llx\n",
> -		       netxen_nic_driver_name, data, off);
> -		return 1;
> -	}
> -	off = netxen_nic_pci_set_window(adapter, off);
> -	/* Corner case : Malicious user tried to break the driver by reading
> -	   last few bytes in ranges and tries to read further addresses.
> -	 */
> -	if (!pci_base(adapter, off + size - 1) && pci_base(adapter, off)) {
> -		printk(KERN_ERR "%s: Invalid access to memory address range"
> -		       " 0x%llx - 0x%llx\n", netxen_nic_driver_name, off,
> -		       off + size);
> -		return 1;
> -	}
> -	addr = pci_base_offset(adapter, off);
> -	if (!addr) {
> -		mem_base = pci_resource_start(adapter->ahw.pdev, 0);
> -		mem_page = off & PAGE_MASK;
> -		/* Map two pages whenever user tries to access addresses in two
> -		   consecutive pages.
> -		 */
> -		if (mem_page != ((off + size - 1) & PAGE_MASK))
> -			mem_ptr = ioremap(mem_base + mem_page, PAGE_SIZE * 2);
> -		else
> -			mem_ptr = ioremap(mem_base + mem_page, PAGE_SIZE);
> -		if (mem_ptr == 0UL) {
> -			*(u8 *) data = 0;
> -			return 1;
> -		}
> -		addr = mem_ptr;
> -		addr += off & (PAGE_SIZE - 1);
> -	}
> -	switch (size) {
> -	case 1:
> -		*(u8 *) data = readb(addr);
> -		break;
> -	case 2:
> -		*(u16 *) data = readw(addr);
> -		break;
> -	case 4:
> -		*(u32 *) data = readl(addr);
> -		break;
> -	case 8:
> -		*(u64 *) data = readq(addr);
> -		break;
> -	default:
> -		netxen_nic_hw_block_read64((u64 __iomem *) data, addr,
> -					   (size >> 3));
> -		break;
> -	}
> -
> -	if (mem_ptr)
> -		iounmap(mem_ptr);
> -	DPRINTK(INFO, "read %llx\n", *(unsigned long long *)data);
> -
> -	return ret;
> -}
> diff --git a/drivers/net/netxen/netxen_nic_init.c
> b/drivers/net/netxen/netxen_nic_init.c index 869725f..deacc61 100644
> --- a/drivers/net/netxen/netxen_nic_init.c
> +++ b/drivers/net/netxen/netxen_nic_init.c
> @@ -35,7 +35,6 @@ #include <linux/netdevice.h>
>  #include <linux/delay.h>
>  #include "netxen_nic.h"
>  #include "netxen_nic_hw.h"
> -#include "netxen_nic_ioctl.h"
>  #include "netxen_nic_phan_reg.h"
>
>  struct crb_addr_pair {
> @@ -1273,52 +1272,6 @@ int netxen_nic_tx_has_work(struct netxen
>  	return 0;
>  }
>
> -int
> -netxen_nic_fill_statistics(struct netxen_adapter *adapter,
> -			   struct netxen_port *port,
> -			   struct netxen_statistics *netxen_stats)
> -{
> -	void __iomem *addr;
> -
> -	if (adapter->ahw.board_type == NETXEN_NIC_XGBE) {
> -		netxen_nic_pci_change_crbwindow(adapter, 0);
> -		NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XGE_TX_BYTE_CNT,
> -					   &(netxen_stats->tx_bytes));
> -		NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XGE_TX_FRAME_CNT,
> -					   &(netxen_stats->tx_packets));
> -		NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XGE_RX_BYTE_CNT,
> -					   &(netxen_stats->rx_bytes));
> -		NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XGE_RX_FRAME_CNT,
> -					   &(netxen_stats->rx_packets));
> -		NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XGE_AGGR_ERROR_CNT,
> -					   &(netxen_stats->rx_errors));
> -		NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XGE_CRC_ERROR_CNT,
> -					   &(netxen_stats->rx_crc_errors));
> -		NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XGE_OVERSIZE_FRAME_ERR,
> -					   &(netxen_stats->
> -					     rx_long_length_error));
> -		NETXEN_NIC_LOCKED_READ_REG(NETXEN_NIU_XGE_UNDERSIZE_FRAME_ERR,
> -					   &(netxen_stats->
> -					     rx_short_length_error));
> -
> -		netxen_nic_pci_change_crbwindow(adapter, 1);
> -	} else {
> -		spin_lock_bh(&adapter->tx_lock);
> -		netxen_stats->tx_bytes = port->stats.txbytes;
> -		netxen_stats->tx_packets = port->stats.xmitedframes +
> -		    port->stats.xmitfinished;
> -		netxen_stats->rx_bytes = port->stats.rxbytes;
> -		netxen_stats->rx_packets = port->stats.no_rcv;
> -		netxen_stats->rx_errors = port->stats.rcvdbadskb;
> -		netxen_stats->tx_errors = port->stats.nocmddescriptor;
> -		netxen_stats->rx_short_length_error = port->stats.uplcong;
> -		netxen_stats->rx_long_length_error = port->stats.uphcong;
> -		netxen_stats->rx_crc_errors = 0;
> -		netxen_stats->rx_mac_errors = 0;
> -		spin_unlock_bh(&adapter->tx_lock);
> -	}
> -	return 0;
> -}
>
>  void netxen_nic_clear_stats(struct netxen_adapter *adapter)
>  {
> @@ -1332,193 +1285,3 @@ void netxen_nic_clear_stats(struct netxe
>  	}
>  }
>
> -int
> -netxen_nic_clear_statistics(struct netxen_adapter *adapter,
> -			    struct netxen_port *port)
> -{
> -	int data = 0;
> -
> -	netxen_nic_pci_change_crbwindow(adapter, 0);
> -
> -	netxen_nic_locked_write_reg(adapter, NETXEN_NIU_XGE_TX_BYTE_CNT, &data);
> -	netxen_nic_locked_write_reg(adapter, NETXEN_NIU_XGE_TX_FRAME_CNT,
> -				    &data);
> -	netxen_nic_locked_write_reg(adapter, NETXEN_NIU_XGE_RX_BYTE_CNT, &data);
> -	netxen_nic_locked_write_reg(adapter, NETXEN_NIU_XGE_RX_FRAME_CNT,
> -				    &data);
> -	netxen_nic_locked_write_reg(adapter, NETXEN_NIU_XGE_AGGR_ERROR_CNT,
> -				    &data);
> -	netxen_nic_locked_write_reg(adapter, NETXEN_NIU_XGE_CRC_ERROR_CNT,
> -				    &data);
> -	netxen_nic_locked_write_reg(adapter, NETXEN_NIU_XGE_OVERSIZE_FRAME_ERR,
> -				    &data);
> -	netxen_nic_locked_write_reg(adapter, NETXEN_NIU_XGE_UNDERSIZE_FRAME_ERR,
> -				    &data);
> -
> -	netxen_nic_pci_change_crbwindow(adapter, 1);
> -	netxen_nic_clear_stats(adapter);
> -	return 0;
> -}
> -
> -int
> -netxen_nic_do_ioctl(struct netxen_adapter *adapter, void *u_data,
> -		    struct netxen_port *port)
> -{
> -	struct netxen_nic_ioctl_data data;
> -	struct netxen_nic_ioctl_data *up_data;
> -	int retval = 0;
> -	struct netxen_statistics netxen_stats;
> -
> -	up_data = (void *)u_data;
> -
> -	DPRINTK(INFO, "doing ioctl for %p\n", adapter);
> -	if (copy_from_user(&data, (void __user *)up_data, sizeof(data))) {
> -		/* evil user tried to crash the kernel */
> -		DPRINTK(ERR, "bad copy from userland: %d\n", (int)sizeof(data));
> -		retval = -EFAULT;
> -		goto error_out;
> -	}
> -
> -	/* Shouldn't access beyond legal limits of  "char u[64];" member */
> -	if (!data.ptr && (data.size > sizeof(data.u))) {
> -		/* evil user tried to crash the kernel */
> -		DPRINTK(ERR, "bad size: %d\n", data.size);
> -		retval = -EFAULT;
> -		goto error_out;
> -	}
> -
> -	switch (data.cmd) {
> -	case netxen_nic_cmd_pci_read:
> -		if ((retval = netxen_nic_hw_read_ioctl(adapter, data.off,
> -						       &(data.u), data.size)))
> -			goto error_out;
> -		if (copy_to_user
> -		    ((void __user *)&(up_data->u), &(data.u), data.size)) {
> -			DPRINTK(ERR, "bad copy to userland: %d\n",
> -				(int)sizeof(data));
> -			retval = -EFAULT;
> -			goto error_out;
> -		}
> -		data.rv = 0;
> -		break;
> -
> -	case netxen_nic_cmd_pci_write:
> -		if ((retval = netxen_nic_hw_write_ioctl(adapter, data.off,
> -							&(data.u), data.size)))
> -			goto error_out;
> -		data.rv = 0;
> -		break;
> -
> -	case netxen_nic_cmd_pci_mem_read:
> -		if (netxen_nic_pci_mem_read_ioctl(adapter, data.off, &(data.u),
> -						  data.size)) {
> -			DPRINTK(ERR, "Failed to read the data.\n");
> -			retval = -EFAULT;
> -			goto error_out;
> -		}
> -		if (copy_to_user
> -		    ((void __user *)&(up_data->u), &(data.u), data.size)) {
> -			DPRINTK(ERR, "bad copy to userland: %d\n",
> -				(int)sizeof(data));
> -			retval = -EFAULT;
> -			goto error_out;
> -		}
> -		data.rv = 0;
> -		break;
> -
> -	case netxen_nic_cmd_pci_mem_write:
> -		if ((retval = netxen_nic_pci_mem_write_ioctl(adapter, data.off,
> -							     &(data.u),
> -							     data.size)))
> -			goto error_out;
> -		data.rv = 0;
> -		break;
> -
> -	case netxen_nic_cmd_pci_config_read:
> -		switch (data.size) {
> -		case 1:
> -			data.rv = pci_read_config_byte(adapter->ahw.pdev,
> -						       data.off,
> -						       (char *)&(data.u));
> -			break;
> -		case 2:
> -			data.rv = pci_read_config_word(adapter->ahw.pdev,
> -						       data.off,
> -						       (short *)&(data.u));
> -			break;
> -		case 4:
> -			data.rv = pci_read_config_dword(adapter->ahw.pdev,
> -							data.off,
> -							(u32 *) & (data.u));
> -			break;
> -		}
> -		if (copy_to_user
> -		    ((void __user *)&(up_data->u), &(data.u), data.size)) {
> -			DPRINTK(ERR, "bad copy to userland: %d\n",
> -				(int)sizeof(data));
> -			retval = -EFAULT;
> -			goto error_out;
> -		}
> -		break;
> -
> -	case netxen_nic_cmd_pci_config_write:
> -		switch (data.size) {
> -		case 1:
> -			data.rv = pci_write_config_byte(adapter->ahw.pdev,
> -							data.off,
> -							*(char *)&(data.u));
> -			break;
> -		case 2:
> -			data.rv = pci_write_config_word(adapter->ahw.pdev,
> -							data.off,
> -							*(short *)&(data.u));
> -			break;
> -		case 4:
> -			data.rv = pci_write_config_dword(adapter->ahw.pdev,
> -							 data.off,
> -							 *(u32 *) & (data.u));
> -			break;
> -		}
> -		break;
> -
> -	case netxen_nic_cmd_get_stats:
> -		data.rv =
> -		    netxen_nic_fill_statistics(adapter, port, &netxen_stats);
> -		if (copy_to_user
> -		    ((void __user *)(up_data->ptr), (void *)&netxen_stats,
> -		     sizeof(struct netxen_statistics))) {
> -			DPRINTK(ERR, "bad copy to userland: %d\n",
> -				(int)sizeof(netxen_stats));
> -			retval = -EFAULT;
> -			goto error_out;
> -		}
> -		up_data->rv = data.rv;
> -		break;
> -
> -	case netxen_nic_cmd_clear_stats:
> -		data.rv = netxen_nic_clear_statistics(adapter, port);
> -		up_data->rv = data.rv;
> -		break;
> -
> -	case netxen_nic_cmd_get_version:
> -		if (copy_to_user
> -		    ((void __user *)&(up_data->u), NETXEN_NIC_LINUX_VERSIONID,
> -		     sizeof(NETXEN_NIC_LINUX_VERSIONID))) {
> -			DPRINTK(ERR, "bad copy to userland: %d\n",
> -				(int)sizeof(data));
> -			retval = -EFAULT;
> -			goto error_out;
> -		}
> -		break;
> -
> -	default:
> -		DPRINTK(INFO, "bad command %d for %p\n", data.cmd, adapter);
> -		retval = -EOPNOTSUPP;
> -		goto error_out;
> -	}
> -	put_user(data.rv, (&(up_data->rv)));
> -	DPRINTK(INFO, "done ioctl for %p well.\n", adapter);
> -
> -      error_out:
> -	return retval;
> -}
> diff --git a/drivers/net/netxen/netxen_nic_ioctl.h
> b/drivers/net/netxen/netxen_nic_ioctl.h deleted file mode 100644
> index 1221fa5..0000000
> --- a/drivers/net/netxen/netxen_nic_ioctl.h
> +++ /dev/null
> @@ -1,77 +0,0 @@
> -/*
> - * Copyright (C) 2003 - 2006 NetXen, Inc.
> - * All rights reserved.
> - *
> - * This program is free software; you can redistribute it and/or
> - * modify it under the terms of the GNU General Public License
> - * as published by the Free Software Foundation; either version 2
> - * of the License, or (at your option) any later version.
> - *
> - * This program is distributed in the hope that it will be useful, but
> - * WITHOUT ANY WARRANTY; without even the implied warranty of
> - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> - * GNU General Public License for more details.
> - *
> - * You should have received a copy of the GNU General Public License
> - * along with this program; if not, write to the Free Software
> - * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
> - * MA  02111-1307, USA.
> - *
> - * The full GNU General Public License is included in this distribution
> - * in the file called LICENSE.
> - *
> - * Contact Information:
> - *    info@netxen.com
> - * NetXen,
> - * 3965 Freedom Circle, Fourth floor,
> - * Santa Clara, CA 95054
> - */
> -
> -#ifndef __NETXEN_NIC_IOCTL_H__
> -#define __NETXEN_NIC_IOCTL_H__
> -
> -#include <linux/sockios.h>
> -
> -#define NETXEN_CMD_START	SIOCDEVPRIVATE
> -#define NETXEN_NIC_CMD		(NETXEN_CMD_START + 1)
> -#define NETXEN_NIC_NAME		(NETXEN_CMD_START + 2)
> -#define NETXEN_NIC_NAME_LEN	16
> -#define NETXEN_NIC_NAME_RSP	"NETXEN-UNM"
> -
> -typedef enum {
> -	netxen_nic_cmd_none = 0,
> -	netxen_nic_cmd_pci_read,
> -	netxen_nic_cmd_pci_write,
> -	netxen_nic_cmd_pci_mem_read,
> -	netxen_nic_cmd_pci_mem_write,
> -	netxen_nic_cmd_pci_config_read,
> -	netxen_nic_cmd_pci_config_write,
> -	netxen_nic_cmd_get_stats,
> -	netxen_nic_cmd_clear_stats,
> -	netxen_nic_cmd_get_version
> -} netxen_nic_ioctl_cmd_t;
> -
> -struct netxen_nic_ioctl_data {
> -	u32 cmd;
> -	u32 unused1;
> -	u64 off;
> -	u32 size;
> -	u32 rv;
> -	char u[64];
> -	void *ptr;
> -};
> -
> -struct netxen_statistics {
> -	u64 rx_packets;
> -	u64 tx_packets;
> -	u64 rx_bytes;
> -	u64 rx_errors;
> -	u64 tx_bytes;
> -	u64 tx_errors;
> -	u64 rx_crc_errors;
> -	u64 rx_short_length_error;
> -	u64 rx_long_length_error;
> -	u64 rx_mac_errors;
> -};
> -
> -#endif				/* __NETXEN_NIC_IOCTL_H_ */
> diff --git a/drivers/net/netxen/netxen_nic_main.c
> b/drivers/net/netxen/netxen_nic_main.c index 575b71b..1658ca1 100644
> --- a/drivers/net/netxen/netxen_nic_main.c
> +++ b/drivers/net/netxen/netxen_nic_main.c
> @@ -38,7 +38,6 @@ #include "netxen_nic_hw.h"
>  #include "netxen_nic.h"
>  #define DEFINE_GLOBAL_RECV_CRB
>  #include "netxen_nic_phan_reg.h"
> -#include "netxen_nic_ioctl.h"
>
>  #include <linux/dma-mapping.h>
>  #include <linux/vmalloc.h>
> @@ -75,8 +74,6 @@ static void netxen_tx_timeout(struct net
>  static void netxen_tx_timeout_task(struct work_struct *work);
>  static void netxen_watchdog(unsigned long);
>  static int netxen_handle_int(struct netxen_adapter *, struct net_device
> *); -static int netxen_nic_ioctl(struct net_device *netdev,
> -			    struct ifreq *ifr, int cmd);
>  static int netxen_nic_poll(struct net_device *dev, int *budget);
>  #ifdef CONFIG_NET_POLL_CONTROLLER
>  static void netxen_nic_poll_controller(struct net_device *netdev);
> @@ -383,7 +380,6 @@ #endif
>  		netdev->set_multicast_list = netxen_nic_set_multi;
>  		netdev->set_mac_address = netxen_nic_set_mac;
>  		netdev->change_mtu = netxen_nic_change_mtu;
> -		netdev->do_ioctl = netxen_nic_ioctl;
>  		netdev->tx_timeout = netxen_tx_timeout;
>  		netdev->watchdog_timeo = HZ;
>
> @@ -1137,47 +1133,6 @@ static void netxen_nic_poll_controller(s
>  	enable_irq(adapter->irq);
>  }
>  #endif
> -/*
> - * netxen_nic_ioctl ()    We provide the tcl/phanmon support through these
> - * ioctls.
> - */
> -static int
> -netxen_nic_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
> -{
> -	int err = 0;
> -	unsigned long nr_bytes = 0;
> -	struct netxen_port *port = netdev_priv(netdev);
> -	struct netxen_adapter *adapter = port->adapter;
> -	char dev_name[NETXEN_NIC_NAME_LEN];
> -
> -	DPRINTK(INFO, "doing ioctl for %s\n", netdev->name);
> -	switch (cmd) {
> -	case NETXEN_NIC_CMD:
> -		err = netxen_nic_do_ioctl(adapter, (void *)ifr->ifr_data, port);
> -		break;
> -
> -	case NETXEN_NIC_NAME:
> -		DPRINTK(INFO, "ioctl cmd for NetXen\n");
> -		if (ifr->ifr_data) {
> -			sprintf(dev_name, "%s-%d", NETXEN_NIC_NAME_RSP,
> -				port->portnum);
> -			nr_bytes =
> -			    copy_to_user((char __user *)ifr->ifr_data, dev_name,
> -					 NETXEN_NIC_NAME_LEN);
> -			if (nr_bytes)
> -				err = -EIO;
> -
> -		}
> -		break;
> -
> -	default:
> -		DPRINTK(INFO, "ioctl cmd %x not supported\n", cmd);
> -		err = -EOPNOTSUPP;
> -		break;
> -	}
> -
> -	return err;
> -}
>
>  static struct pci_driver netxen_driver = {
>  	.name = netxen_nic_driver_name,

      parent reply	other threads:[~2006-12-27  6:13 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-12-05 20:07 [PATCH] netxen: sparse warning and ioctl bug fixes Stephen Hemminger
2006-12-06 16:10 ` Amit S. Kale
2006-12-06 16:30   ` Stephen Hemminger
2006-12-07 10:00 ` Jeff Garzik
2006-12-07 10:09 ` Christoph Hellwig
2006-12-15 15:57   ` [PATCH] netxen: remove private ioctl Stephen Hemminger
2006-12-15 16:04     ` Christoph Hellwig
2006-12-27  5:36     ` Amit S. Kale [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200612271106.04931.amitkale@linsyssoft.com \
    --to=amitkale@linsyssoft.com \
    --cc=amitkale@netxen.com \
    --cc=hch@infradead.org \
    --cc=jgarzik@pobox.com \
    --cc=netdev@vger.kernel.org \
    --cc=shemminger@osdl.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.