Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 28 Apr 2011 16:29:19 +0000 (UTC)
From:      "George V. Neville-Neil" <gnn@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r221175 - in head/tools/tools: . vxge
Message-ID:  <201104281629.p3SGTJdi030990@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: gnn
Date: Thu Apr 28 16:29:19 2011
New Revision: 221175
URL: http://svn.freebsd.org/changeset/base/221175

Log:
  A diagnostic tool to go along with the vxge(4) 10GbE driver.
  This tool can be used to print statistics, registers, and
  other device specific information once the driver is loaded
  into the kernel.
  
  Submitted by:	Sriram Rapuru from Exar
  MFC after:	2 weeks

Added:
  head/tools/tools/vxge/
  head/tools/tools/vxge/Makefile   (contents, props changed)
  head/tools/tools/vxge/vxge_cmn.h   (contents, props changed)
  head/tools/tools/vxge/vxge_info.c   (contents, props changed)
  head/tools/tools/vxge/vxge_info.h   (contents, props changed)
  head/tools/tools/vxge/vxge_log.c   (contents, props changed)
  head/tools/tools/vxge/vxge_log.h   (contents, props changed)
Modified:
  head/tools/tools/README

Modified: head/tools/tools/README
==============================================================================
--- head/tools/tools/README	Thu Apr 28 16:18:30 2011	(r221174)
+++ head/tools/tools/README	Thu Apr 28 16:29:19 2011	(r221175)
@@ -66,4 +66,5 @@ vimage		An interim utility for managing 
 		stack infrastructure.
 vop_table	Generates a HTML document that shows all the VOP's in
 		the kernel.
+vxge		A diagnostic tool for the vxge(4) driver
 whereintheworld	Summarizes "make world" output.

Added: head/tools/tools/vxge/Makefile
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/tools/tools/vxge/Makefile	Thu Apr 28 16:29:19 2011	(r221175)
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+PROG= vxge-manage
+SRCS= vxge_info.c vxge_log.c
+NO_MAN=
+ 
+.include <bsd.prog.mk>

Added: head/tools/tools/vxge/vxge_cmn.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/tools/tools/vxge/vxge_cmn.h	Thu Apr 28 16:29:19 2011	(r221175)
@@ -0,0 +1,260 @@
+/*-
+ * Copyright(c) 2002-2011 Exar Corp.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification are permitted provided the following conditions are met:
+ *
+ *    1. Redistributions of source code must retain the above copyright notice,
+ *       this list of conditions and the following disclaimer.
+ *
+ *    2. Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *
+ *    3. Neither the name of the Exar Corporation nor the names of its
+ *       contributors may be used to endorse or promote products derived from
+ *       this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+/*$FreeBSD$*/
+
+#ifndef	_VXGE_CMN_H_
+#define	_VXGE_CMN_H_
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/ioctl.h>
+#include <net/if.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <fcntl.h>
+
+#if BYTE_ORDER == BIG_ENDIAN
+#define	VXGE_OS_HOST_BIG_ENDIAN
+#else
+#define	VXGE_OS_HOST_LITTLE_ENDIAN
+#endif
+
+#if defined(VXGE_OS_HOST_BIG_ENDIAN)
+
+#define	GET_OFFSET_STATS(index)		statsInfo[(index)].be_offset
+#define	GET_OFFSET_PCICONF(index)	pciconfInfo[(index)].be_offset
+
+#else
+
+#define	GET_OFFSET_STATS(index)		statsInfo[(index)].le_offset
+#define	GET_OFFSET_PCICONF(index)	pciconfInfo[(index)].le_offset
+
+#endif
+
+#define	vxge_mem_free(x)	\
+	if (NULL != x) { free(x); x = NULL; }
+
+typedef uint8_t u8;
+typedef uint16_t u16;
+typedef uint32_t u32;
+typedef unsigned long long u64;
+typedef u_long ulong_t;
+
+typedef enum _vxge_query_device_info_e {
+
+	VXGE_GET_PCI_CONF = 100,
+	VXGE_GET_MRPCIM_STATS = 101,
+	VXGE_GET_DEVICE_STATS = 102,
+	VXGE_GET_DEVICE_HWINFO = 103,
+	VXGE_GET_DRIVER_STATS = 104,
+	VXGE_GET_INTR_STATS = 105,
+	VXGE_GET_VERSION = 106,
+	VXGE_GET_TCODE = 107,
+	VXGE_GET_VPATH_COUNT = 108,
+	VXGE_GET_BANDWIDTH = 109,
+	VXGE_SET_BANDWIDTH = 110,
+	VXGE_GET_PORT_MODE = 111,
+	VXGE_SET_PORT_MODE = 112
+
+} vxge_query_device_info_e;
+
+/* Register type enumaration */
+typedef enum vxge_hal_mgmt_reg_type_e {
+
+	vxge_hal_mgmt_reg_type_legacy = 0,
+	vxge_hal_mgmt_reg_type_toc = 1,
+	vxge_hal_mgmt_reg_type_common = 2,
+	vxge_hal_mgmt_reg_type_memrepair = 3,
+	vxge_hal_mgmt_reg_type_pcicfgmgmt = 4,
+	vxge_hal_mgmt_reg_type_mrpcim = 5,
+	vxge_hal_mgmt_reg_type_srpcim = 6,
+	vxge_hal_mgmt_reg_type_vpmgmt = 7,
+	vxge_hal_mgmt_reg_type_vpath = 8
+
+} vxge_hal_mgmt_reg_type_e;
+
+typedef enum vxge_hal_xmac_nwif_dp_mode {
+
+	VXGE_HAL_DP_NP_MODE_DEFAULT,
+	VXGE_HAL_DP_NP_MODE_LINK_AGGR,
+	VXGE_HAL_DP_NP_MODE_ACTIVE_PASSIVE,
+	VXGE_HAL_DP_NP_MODE_SINGLE_PORT,
+	VXGE_HAL_DP_NP_MODE_DUAL_PORT,
+	VXGE_HAL_DP_NP_MODE_DISABLE_PORT_MGMT
+
+} vxge_hal_xmac_nwif_dp_mode;
+
+typedef enum vxge_hal_xmac_nwif_behavior_on_failure {
+
+	VXGE_HAL_XMAC_NWIF_OnFailure_NoMove,
+	VXGE_HAL_XMAC_NWIF_OnFailure_OtherPort,
+	VXGE_HAL_XMAC_NWIF_OnFailure_OtherPortBackOnRestore
+
+} vxge_hal_xmac_nwif_behavior_on_failure;
+
+#define	VXGE_HAL_MGMT_REG_COUNT_LEGACY		7
+#define	VXGE_HAL_MGMT_REG_COUNT_TOC		11
+#define	VXGE_HAL_MGMT_REG_COUNT_COMMON		65
+#define	VXGE_HAL_MGMT_REG_COUNT_PCICFGMGMT	3
+#define	VXGE_HAL_MGMT_REG_COUNT_MRPCIM		1370
+#define	VXGE_HAL_MGMT_REG_COUNT_SRPCIM		48
+#define	VXGE_HAL_MGMT_REG_COUNT_VPMGMT		29
+#define	VXGE_HAL_MGMT_REG_COUNT_VPATH		139
+#define	VXGE_HAL_MGMT_STATS_COUNT_DRIVER	17
+#define	VXGE_HAL_MGMT_STATS_COUNT		160
+#define	VXGE_HAL_MGMT_STATS_COUNT_SW		54
+#define	VXGE_HAL_MGMT_STATS_COUNT_EXTENDED	56
+#define	VXGE_MAX_BANDWIDTH			10000
+
+#define	VXGE_HAL_MAX_VIRTUAL_PATHS		17
+#define	ETH_LENGTH_OF_ADDRESS			6
+
+typedef char macaddr[ETH_LENGTH_OF_ADDRESS];
+
+#define	VXGE_PRINT(fd, fmt...) {	\
+	fprintf(fd, fmt);		\
+	fprintf(fd, "\n");		\
+	printf(fmt);			\
+	printf("\n");			\
+}
+
+/* Read	& Write	Register */
+typedef struct _vxge_register_info_t {
+
+	u64	value;
+	u64	offset;
+	char	option[2];
+
+} vxge_register_info_t;
+
+/* Register Dump */
+typedef struct _vxge_pci_bar0_t {
+	char	name[64];
+	u64	offset;
+	u32	size;
+
+} vxge_pci_bar0_t;
+
+typedef struct _vxge_stats_driver_info_t {
+
+	char	name[32];
+	u64	value;
+
+} vxge_stats_driver_info_t;
+
+typedef struct _vxge_hal_device_pmd_info_t {
+
+	u32	type;
+	u32	unused;
+	char	vendor[24];
+	char	part_num[24];
+	char	ser_num[24];
+
+} vxge_hal_device_pmd_info_t;
+
+typedef struct _vxge_hal_device_version_t {
+
+	u32	major;
+	u32	minor;
+	u32	build;
+	char	version[32];
+
+} vxge_hal_device_version_t;
+
+typedef struct _vxge_hal_device_date_t {
+
+	u32	day;
+	u32	month;
+	u32	year;
+	char	date[16];
+
+} vxge_hal_device_date_t;
+
+typedef struct _vxge_hal_device_hw_info_t {
+
+	u32	host_type;
+	u64	function_mode;
+	u32	func_id;
+	u64	vpath_mask;
+
+	vxge_hal_device_version_t fw_version;
+	vxge_hal_device_date_t fw_date;
+	vxge_hal_device_version_t flash_version;
+	vxge_hal_device_date_t flash_date;
+
+	char	serial_number[24];
+	char	part_number[24];
+	char	product_description[72];
+	u32	unused;
+	u32	ports;
+
+	vxge_hal_device_pmd_info_t pmd_port0;
+	vxge_hal_device_pmd_info_t pmd_port1;
+
+	macaddr	mac_addrs[VXGE_HAL_MAX_VIRTUAL_PATHS];
+	macaddr	mac_addr_masks[VXGE_HAL_MAX_VIRTUAL_PATHS];
+
+} vxge_hal_device_hw_info_t;
+
+typedef struct _vxge_device_hw_info_t {
+
+	vxge_hal_device_hw_info_t hw_info;
+	u32	port_mode;
+	u32	port_failure;
+
+} vxge_device_hw_info_t;
+
+typedef struct _vxge_bw_info_t {
+
+	char	query;
+	u64	func_id;
+	int	priority;
+	int	bandwidth;
+
+} vxge_bw_info_t;
+
+typedef struct _vxge_port_info_t {
+
+	char	query;
+	int	port_mode;
+	int	port_failure;
+
+} vxge_port_info_t;
+
+u32	vxge_get_num_vpath(void);
+void	vxge_null_terminate(char *, size_t);
+
+#endif	/* _VXGE_CMN_H_ */

Added: head/tools/tools/vxge/vxge_info.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/tools/tools/vxge/vxge_info.c	Thu Apr 28 16:29:19 2011	(r221175)
@@ -0,0 +1,857 @@
+/*-
+ * Copyright(c) 2002-2011 Exar Corp.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification are permitted provided the following conditions are met:
+ *
+ *    1. Redistributions of source code must retain the above copyright notice,
+ *       this list of conditions and the following disclaimer.
+ *
+ *    2. Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *
+ *    3. Neither the name of the Exar Corporation nor the names of its
+ *       contributors may be used to endorse or promote products derived from
+ *       this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+/*$FreeBSD$*/
+
+#include "vxge_info.h"
+
+static int sockfd;
+static struct ifreq ifr;
+
+int
+main(int argc, char *argv[])
+{
+	if (argc >= 4) {
+		if (!((strcasecmp(argv[2], "regs") == 0) ||
+		    (strcasecmp(argv[2], "stats") == 0) ||
+		    (strcasecmp(argv[2], "bw_pri_set") == 0) ||
+		    (strcasecmp(argv[2], "port_mode_set") == 0) ||
+		    (strcasecmp(argv[2], "bw_pri_get") == 0)))
+			goto out;
+		else {
+			if (strcasecmp(argv[2], "regs") == 0) {
+				if (!((strcasecmp(argv[3], "common") == 0) ||
+				    (strcasecmp(argv[3], "legacy") == 0) ||
+				    (strcasecmp(argv[3], "pcicfgmgmt") == 0) ||
+				    (strcasecmp(argv[3], "toc") == 0) ||
+				    (strcasecmp(argv[3], "vpath") == 0) ||
+				    (strcasecmp(argv[3], "vpmgmt") == 0) ||
+				    (strcasecmp(argv[3], "mrpcim") == 0) ||
+				    (strcasecmp(argv[3], "srpcim") == 0) ||
+				    (strcasecmp(argv[3], "all") == 0))) {
+					goto regs;
+				}
+			} else if (strcasecmp(argv[2], "stats") == 0) {
+
+				if (!((strcasecmp(argv[3], "common") == 0) ||
+				    (strcasecmp(argv[3], "mrpcim") == 0) ||
+				    (strcasecmp(argv[3], "all") == 0) ||
+				    (strcasecmp(argv[3], "driver") == 0))) {
+					goto stats;
+				}
+			}
+		}
+	} else {
+		if (argc != 3)
+			goto out;
+		else {
+			if (!((strcasecmp(argv[2], "hwinfo") == 0) ||
+			    (strcasecmp(argv[2], "pciconfig") == 0) ||
+			    (strcasecmp(argv[2], "port_mode_get") == 0) ||
+			    (strcasecmp(argv[2], "bw_pri_get") == 0))) {
+				if (strcasecmp(argv[2], "regs") == 0)
+					goto regs;
+
+				if (strcasecmp(argv[2], "stats") == 0)
+					goto stats;
+
+				if (strcasecmp(argv[2], "bw_pri_set") == 0)
+					goto bw_pri_set;
+
+				if (strcasecmp(argv[2], "port_mode_set") == 0)
+					goto port_mode_set;
+
+				goto out;
+			}
+		}
+	}
+
+	sockfd = socket(AF_INET, SOCK_DGRAM, 0);
+	if (sockfd < 0) {
+		printf("Creating socket failed\n");
+		goto _exit0;
+	}
+
+	ifr.ifr_addr.sa_family = AF_INET;
+	strlcpy(ifr.ifr_name, argv[1], sizeof(ifr.ifr_name));
+
+	if (strcasecmp(argv[2], "pciconfig") == 0)
+		vxge_get_pci_config();
+
+	else if (strcasecmp(argv[2], "hwinfo") == 0)
+		vxge_get_hw_info();
+
+	else if (strcasecmp(argv[2], "vpathinfo") == 0)
+		vxge_get_num_vpath();
+
+	else if (strcasecmp(argv[2], "port_mode_get") == 0)
+		vxge_get_port_mode();
+
+	else if (strcasecmp(argv[2], "regs") == 0) {
+
+		if (strcasecmp(argv[3], "common") == 0)
+			vxge_get_registers_common();
+
+		else if (strcasecmp(argv[3], "toc") == 0)
+			vxge_get_registers_toc();
+
+		else if (strcasecmp(argv[3], "pcicfgmgmt") == 0)
+			vxge_get_registers_pcicfgmgmt();
+
+		else if (strcasecmp(argv[3], "vpath") == 0)
+			vxge_get_registers_vpath();
+
+		else if (strcasecmp(argv[3], "vpmgmt") == 0)
+			vxge_get_registers_vpmgmt();
+
+		else if (strcasecmp(argv[3], "srpcim") == 0)
+			vxge_get_registers_srpcim();
+
+		else if (strcasecmp(argv[3], "legacy") == 0)
+			vxge_get_registers_legacy();
+
+		if (strcasecmp(argv[3], "mrpcim") == 0)
+			vxge_get_registers_mrpcim();
+
+		else if (strcasecmp(argv[3], "all") == 0)
+			vxge_get_registers_all();
+
+	} else if (strcasecmp(argv[2], "stats") == 0) {
+
+		if (strcasecmp(argv[3], "mrpcim") == 0)
+			vxge_get_stats_mrpcim();
+
+		else if (strcasecmp(argv[3], "common") == 0)
+			vxge_get_stats_common();
+
+		else if (strcasecmp(argv[3], "all") == 0)
+			vxge_get_stats_all();
+
+		else if (strcasecmp(argv[3], "driver") == 0) {
+			if (argc == 4) {
+				vxge_get_stats_driver(-1);
+			} else if (argc == 6) {
+				if ((strcasecmp(argv[4], "vpath") == 0) &&
+				    (atoi(argv[5]) >= 0) &&
+				    (atoi(argv[5]) < 17)) {
+					vxge_get_stats_driver(atoi(argv[5]));
+				} else {
+					goto stats;
+				}
+			}
+		} else {
+			goto stats;
+		}
+	} else if (strcasecmp(argv[2], "port_mode_set") == 0) {
+		if ((atoi(argv[3]) >= 2) && (atoi(argv[3]) <= 4))
+			vxge_set_port_mode(atoi(argv[3]));
+		else
+			goto port_mode_set;
+	} else if (argc == 5) {
+		if (strcasecmp(argv[2], "bw_pri_set") == 0) {
+			if (((atoi(argv[3]) >= 0) && (atoi(argv[3]) < 8) &&
+			    (atoi(argv[4]) <= 10000)))
+				vxge_set_bw_priority(atoi(argv[3]),
+				    atoi(argv[4]), -1, VXGE_SET_BANDWIDTH);
+			else
+				goto bw_pri_set;
+		}
+	} else if (argc == 6) {
+		if (strcasecmp(argv[2], "bw_pri_set") == 0) {
+			if (((atoi(argv[3]) >= 0) && (atoi(argv[3]) < 8) &&
+			    (atoi(argv[4]) <= 10000)) && (atoi(argv[5]) <= 3))
+				vxge_set_bw_priority(atoi(argv[3]),
+				    atoi(argv[4]), atoi(argv[5]),
+				    VXGE_SET_BANDWIDTH);
+			else
+				goto bw_pri_set;
+		}
+	} else if (argc == 4) {
+		if (strcasecmp(argv[2], "bw_pri_get") == 0) {
+			if ((atoi(argv[3]) >= 0) && (atoi(argv[3]) < 8))
+				vxge_get_bw_priority(atoi(argv[3]), VXGE_GET_BANDWIDTH);
+			else
+				goto bw_pri_get;
+		}
+	} else if (argc == 3) {
+		if (strcasecmp(argv[2], "bw_pri_get") == 0)
+			vxge_get_bw_priority(-1, VXGE_GET_BANDWIDTH);
+		else
+			goto bw_pri_get;
+	}
+
+	goto _exit0;
+
+out:
+	printf("Usage: ");
+	printf("vxge-manage <INTERFACE> ");
+	printf("[regs] [stats] [hwinfo] [bw_pri_get] [bw_pri_set] [port_mode_get] [port_mode_set] [pciconfig]\n");
+	printf("\tINTERFACE      : Interface (vxge0, vxge1, vxge2, ..)\n");
+	printf("\tregs           : Prints register values\n");
+	printf("\tstats          : Prints statistics\n");
+	printf("\tpciconfig      : Prints pci configuration space\n");
+	printf("\thwinfo         : Displays hardware information\n");
+	printf("\tbw_pri_get     : Displays bandwidth and priority information\n");
+	printf("\tbw_pri_set     : Set bandwidth and priority of a function\n");
+	printf("\tport_mode_get  : Displays dual port adapter's port mode\n");
+	printf("\tport_mode_set  : Set dual port adapter's port mode\n\n");
+	goto _exit0;
+
+regs:
+	printf("Regs\n");
+	printf("[common] [legacy] [pcicfgmgmt] [toc] [vpath] [vpmgmt] [mrpcim] [srpcim] [All]\n");
+	printf("\tcommon         : print common registers\n");
+	printf("\tlegacy         : print legacy registers\n");
+	printf("\tpcicfgmgmt     : print pcicfgmgmt registers\n");
+	printf("\ttoc            : print toc registers\n");
+	printf("\tvpath          : print vpath registers\n");
+	printf("\tvpmgmt         : print vpmgmt registers\n");
+	printf("\tmrpcim         : print mrpcim registers\n");
+	printf("\tsrpcim         : print srpcim registers\n\n");
+	goto _exit0;
+
+stats:
+	printf("Stats\n");
+	printf("[common] [mrpcim] [driver [vpath (< 17) ]] [All]\n");
+	printf("\tcommon         : print common statistics\n");
+	printf("\tmrpcim         : print mrpcim statistics\n");
+	printf("\tdriver         : print driver statistics\n");
+	printf("\tAll            : print all statistics\n\n");
+	goto _exit0;
+
+bw_pri_set:
+	printf("Bandwidth & Priority\n");
+	printf("[vf-id (0-7)] [bandwidth (100-10000)] [priority (0-3)]\n\n");
+	goto _exit0;
+
+bw_pri_get:
+	printf("Bandwidth & Priority\n");
+	printf("[vf-id (0-7)]\n\n");
+	goto _exit0;
+
+port_mode_set:
+	printf("Port mode Setting\n");
+	printf("[port mode value (2-4)]\n\n");
+	goto _exit0;
+
+_exit0:
+	return (0);
+}
+
+/*
+ * vxge_get_registers_all
+ */
+void
+vxge_get_registers_all(void)
+{
+	vxge_get_registers_legacy();
+	vxge_get_registers_toc();
+	vxge_get_registers_common();
+	vxge_get_registers_pcicfgmgmt();
+	vxge_get_registers_srpcim();
+	vxge_get_registers_mrpcim();
+	vxge_get_registers_vpmgmt();
+	vxge_get_registers_vpath();
+}
+
+int
+vxge_get_registers_common(void)
+{
+	int bufsize, err = 0;
+	char *buffer = NULL;
+
+	bufsize =
+	    reginfo_registers[VXGE_HAL_MGMT_REG_COUNT_COMMON - 1].offset + 8;
+
+	buffer = (char *) vxge_mem_alloc(bufsize);
+	if (!buffer) {
+		printf("Allocating memory for register dump failed\n");
+		goto _exit0;
+	}
+
+	*buffer = vxge_hal_mgmt_reg_type_common;
+
+	ifr.ifr_data = (caddr_t) buffer;
+	err = ioctl(sockfd, SIOCGPRIVATE_1, &ifr);
+	if ((err < 0) || (err == EINVAL)) {
+		printf("Getting register values failed\n");
+		goto _exit0;
+	}
+
+	vxge_print_registers(buffer);
+
+_exit0:
+	vxge_mem_free(buffer);
+	return (err);
+}
+
+/*
+ * vxge_get_registers_legacy
+ */
+int
+vxge_get_registers_legacy(void)
+{
+	int bufsize, err = 0;
+	char *buffer = NULL;
+
+	bufsize = reginfo_legacy[VXGE_HAL_MGMT_REG_COUNT_LEGACY - 1].offset + 8;
+
+	buffer = (char *) vxge_mem_alloc(bufsize);
+	if (!buffer) {
+		printf("Allocating memory for register dump failed\n");
+		goto _exit0;
+	}
+
+	*buffer = vxge_hal_mgmt_reg_type_legacy;
+
+	ifr.ifr_data = (caddr_t) buffer;
+	err = ioctl(sockfd, SIOCGPRIVATE_1, &ifr);
+	if ((err < 0) || (err == EINVAL)) {
+		printf("Getting register values failed\n");
+		goto _exit0;
+	}
+
+	vxge_print_registers_legacy(buffer);
+
+_exit0:
+	vxge_mem_free(buffer);
+	return (err);
+}
+
+/*
+ * vxge_get_registers_toc
+ */
+int
+vxge_get_registers_toc(void)
+{
+	int bufsize, err = 0;
+	char *buffer = NULL;
+
+	bufsize = reginfo_toc[VXGE_HAL_MGMT_REG_COUNT_TOC - 1].offset + 8;
+	buffer = (char *) vxge_mem_alloc(bufsize);
+	if (!buffer) {
+		printf("Allocating memory for register dump failed\n");
+		goto _exit0;
+	}
+
+	*buffer = vxge_hal_mgmt_reg_type_toc;
+
+	ifr.ifr_data = (caddr_t) buffer;
+	err = ioctl(sockfd, SIOCGPRIVATE_1, &ifr);
+	if ((err < 0) || (err == EINVAL)) {
+		printf("Getting register values failed\n");
+		goto _exit0;
+	}
+
+	vxge_print_registers_toc(buffer);
+
+_exit0:
+	vxge_mem_free(buffer);
+	return (err);
+}
+
+/*
+ * vxge_get_registers_pcicfgmgmt
+ */
+int
+vxge_get_registers_pcicfgmgmt(void)
+{
+	int bufsize, err = 0;
+	char *buffer = NULL;
+
+	bufsize = reginfo_pcicfgmgmt[VXGE_HAL_MGMT_REG_COUNT_PCICFGMGMT - 1].offset + 8;
+
+	buffer = (char *) vxge_mem_alloc(bufsize);
+	if (!buffer) {
+		printf("Allocating memory for register dump failed\n");
+		goto _exit0;
+	}
+
+	*buffer = vxge_hal_mgmt_reg_type_pcicfgmgmt;
+
+	ifr.ifr_data = (caddr_t) buffer;
+	err = ioctl(sockfd, SIOCGPRIVATE_1, &ifr);
+	if ((err < 0) || (err == EINVAL)) {
+		printf("Getting register values failed\n");
+		goto _exit0;
+	}
+
+	vxge_print_registers_pcicfgmgmt(buffer);
+
+_exit0:
+	vxge_mem_free(buffer);
+	return (err);
+}
+
+/*
+ * vxge_get_registers_vpath
+ */
+int
+vxge_get_registers_vpath(void)
+{
+	int bufsize, err = 0;
+	u32 i, no_of_vpath;
+	char *buffer = NULL;
+
+	no_of_vpath = vxge_get_num_vpath();
+	bufsize = reginfo_vpath[VXGE_HAL_MGMT_REG_COUNT_VPATH - 1].offset + 8;
+
+	buffer = (char *) vxge_mem_alloc(bufsize);
+	if (!buffer) {
+		printf("Allocating memory for register dump failed\n");
+		goto _exit0;
+	}
+
+	for (i = 0; i < no_of_vpath; i++) {
+
+		bzero(buffer, bufsize);
+		*buffer = vxge_hal_mgmt_reg_type_vpath;
+		*((u32 *) (buffer + sizeof(u32))) = i;
+
+		ifr.ifr_data = (caddr_t) buffer;
+		err = ioctl(sockfd, SIOCGPRIVATE_1, &ifr);
+		if ((err < 0) || (err == EINVAL)) {
+			printf("Getting register values failed\n");
+			goto _exit0;
+		}
+
+		vxge_print_registers_vpath(buffer, i);
+	}
+
+_exit0:
+	vxge_mem_free(buffer);
+	return (err);
+}
+
+/*
+ * vxge_get_registers_vpmgmt
+ */
+int
+vxge_get_registers_vpmgmt(void)
+{
+	int bufsize, err = 0;
+	u32 i, no_of_vpath;
+	char *buffer = NULL;
+
+	no_of_vpath = vxge_get_num_vpath();
+	bufsize = reginfo_vpmgmt[VXGE_HAL_MGMT_REG_COUNT_VPMGMT - 1].offset + 8;
+	buffer = (char *) vxge_mem_alloc(bufsize);
+	if (!buffer) {
+		printf("Allocating memory for register dump failed\n");
+		goto _exit0;
+	}
+
+	for (i = 0; i < no_of_vpath; i++) {
+
+		bzero(buffer, bufsize);
+		*buffer = vxge_hal_mgmt_reg_type_vpmgmt;
+		*((u32 *) (buffer + sizeof(u32))) = i;
+
+		ifr.ifr_data = (caddr_t) buffer;
+		err = ioctl(sockfd, SIOCGPRIVATE_1, &ifr);
+		if ((err < 0) || (err == EINVAL)) {
+			printf("Getting register values failed\n");
+			goto _exit0;
+		}
+
+		vxge_print_registers_vpmgmt(buffer);
+	}
+
+_exit0:
+	vxge_mem_free(buffer);
+	return (err);
+}
+
+u32
+vxge_get_num_vpath(void)
+{
+	int err = 0;
+	u32 buffer, no_of_vpath = 0;
+
+	buffer = VXGE_GET_VPATH_COUNT;
+
+	ifr.ifr_data = (caddr_t) &buffer;
+	err = ioctl(sockfd, SIOCGPRIVATE_1, &ifr);
+	if (err == 0)
+		no_of_vpath = buffer;
+	else
+		printf("Getting number of vpath failed\n");
+
+	return (no_of_vpath);
+}
+
+/*
+ * vxge_get_registers_mrpcim
+ */
+int
+vxge_get_registers_mrpcim(void)
+{
+	int bufsize, err = 0;
+	char *buffer = NULL;
+
+	bufsize = reginfo_mrpcim[VXGE_HAL_MGMT_REG_COUNT_MRPCIM - 1].offset + 8;
+	buffer = (char *) vxge_mem_alloc(bufsize);
+	if (!buffer) {
+		printf("Allocating memory for register dump failed\n");
+		goto _exit0;
+	}
+
+	*buffer = vxge_hal_mgmt_reg_type_mrpcim;
+
+	ifr.ifr_data = (caddr_t) buffer;
+	err = ioctl(sockfd, SIOCGPRIVATE_1, &ifr);
+	if ((err < 0) || (err == EINVAL)) {
+		printf("Getting register values failed\n");
+		goto _exit0;
+	}
+
+	vxge_print_registers_mrpcim(buffer);
+
+_exit0:
+	vxge_mem_free(buffer);
+	return (err);
+}
+
+/*
+ * vxge_get_registers_srpcim
+ * Gets srpcim register values
+ * Returns EXIT_SUCCESS or EXIT_FAILURE
+ */
+int
+vxge_get_registers_srpcim(void)
+{
+	int bufsize, err = 0;
+	char *buffer = NULL;
+
+	bufsize = reginfo_srpcim[VXGE_HAL_MGMT_REG_COUNT_SRPCIM - 1].offset + 8;
+	buffer = (char *) vxge_mem_alloc(bufsize);
+	if (!buffer) {
+		printf("Allocating memory for register dump failed\n");
+		goto _exit0;
+	}
+
+	*buffer = vxge_hal_mgmt_reg_type_srpcim;
+
+	ifr.ifr_data = (caddr_t) buffer;
+	err = ioctl(sockfd, SIOCGPRIVATE_1, &ifr);
+	if ((err < 0) || (err == EINVAL)) {
+		printf("Getting register values failed\n");
+		goto _exit0;
+	}
+
+	vxge_print_registers_srpcim(buffer);
+
+_exit0:
+	vxge_mem_free(buffer);
+	return (err);
+}
+
+/*
+ * vxge_get_stats_driver
+ */
+int
+vxge_get_stats_driver(int vpath_num)
+{
+	int bufsize, err = 0;
+	char *buffer = NULL;
+
+	bufsize = VXGE_HAL_MGMT_STATS_COUNT_DRIVER * sizeof(u64) *
+	    VXGE_HAL_MAX_VIRTUAL_PATHS;
+
+	buffer = (char *) vxge_mem_alloc(bufsize);
+	if (!buffer) {
+		printf("Allocating memory for driver statistics failed\n");
+		goto _exit0;
+	}
+
+	*buffer = VXGE_GET_DRIVER_STATS;
+
+	ifr.ifr_data = (caddr_t) buffer;
+	err = ioctl(sockfd, SIOCGPRIVATE_0, &ifr);
+	if ((err < 0) || (err == EINVAL)) {
+		printf("Getting Driver Statistics failed\n");
+		goto _exit0;
+	}
+
+	vxge_print_stats_drv(buffer, vpath_num);
+
+_exit0:
+	vxge_mem_free(buffer);
+	return (err);
+}
+
+/*
+ * vxge_get_stats_common
+ */
+int
+vxge_get_stats_common(void)
+{
+	int bufsize, err = 0;
+	char *buffer = NULL;
+
+	bufsize = 1024 * 64 * sizeof(char);
+
+	buffer = (char *) vxge_mem_alloc(bufsize);
+	if (!buffer) {
+		printf("Allocating memory for statistics dump failed\n");
+		goto _exit0;
+	}
+
+	*buffer = VXGE_GET_DEVICE_STATS;
+
+	ifr.ifr_data = (caddr_t) buffer;
+	err = ioctl(sockfd, SIOCGPRIVATE_0, &ifr);
+	if ((err < 0) || (err == EINVAL)) {
+		printf("Getting statistics values failed\n");
+		goto _exit0;
+	}
+
+	vxge_print_stats(buffer, VXGE_GET_DEVICE_STATS);
+
+_exit0:
+	vxge_mem_free(buffer);
+	return (err);
+
+}
+
+/*
+ * vxge_get_stats_mrpcim
+ */
+int
+vxge_get_stats_mrpcim(void)
+{
+	int bufsize, err = 0;
+	char *buffer = NULL;
+
+	bufsize = 1024 * 64 * sizeof(char);
+
+	buffer = (char *) vxge_mem_alloc(bufsize);
+	if (!buffer) {
+		printf("Allocating memory for statistics dump failed\n");
+		goto _exit0;
+	}
+
+	*buffer = VXGE_GET_MRPCIM_STATS;
+
+	ifr.ifr_data = (caddr_t) buffer;
+	err = ioctl(sockfd, SIOCGPRIVATE_0, &ifr);
+	if ((err < 0) || (err == EINVAL)) {
+		printf("Getting statistics values failed\n");
+		goto _exit0;
+	}
+
+	vxge_print_stats(buffer, VXGE_GET_MRPCIM_STATS);
+
+_exit0:
+	vxge_mem_free(buffer);
+	return (err);
+}
+
+int
+vxge_get_pci_config(void)
+{
+	int bufsize, err = 0;
+	char *buffer = NULL;
+
+	bufsize = 64 * 1024 * sizeof(char);
+
+	buffer = (char *) vxge_mem_alloc(bufsize);
+	if (!buffer) {
+		printf("Allocating memory for pci config failed\n");
+		goto _exit0;
+	}
+
+	*buffer = VXGE_GET_PCI_CONF;
+
+	ifr.ifr_data = (caddr_t) buffer;
+	err = ioctl(sockfd, SIOCGPRIVATE_0, &ifr);
+	if ((err < 0) || (err == EINVAL)) {
+		printf("Getting pci config values failed\n");
+		goto _exit0;
+	}
+
+	vxge_print_pci_config(buffer);
+
+_exit0:
+	vxge_mem_free(buffer);
+	return (err);
+}
+
+/*
+ * vxge_get_hw_info
+ */
+int
+vxge_get_hw_info(void)
+{
+	int err = 0;
+	char *buffer = NULL;
+
+	buffer = (char *) vxge_mem_alloc(sizeof(vxge_device_hw_info_t));

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201104281629.p3SGTJdi030990>