Re: svn commit: r209241 - head/sys/dev/e1000

2010-06-16 Thread Jack Vogel
Awesome, look forward to checking this out, thanks much George!!

Jack


On Wed, Jun 16, 2010 at 10:36 AM, George V. Neville-Neil 
wrote:

> Author: gnn
> Date: Wed Jun 16 17:36:53 2010
> New Revision: 209241
> URL: http://svn.freebsd.org/changeset/base/209241
>
> Log:
>  Move statistics into the sysctl tree making it easier to find
>  and use them.
>  Add previously hidden statistics, some of which include interrupt
>  and host/card communication counters.
>
> Modified:
>  head/sys/dev/e1000/if_igb.c
>  head/sys/dev/e1000/if_igb.h
>
> Modified: head/sys/dev/e1000/if_igb.c
>
> ==
> --- head/sys/dev/e1000/if_igb.c Wed Jun 16 16:52:35 2010(r209240)
> +++ head/sys/dev/e1000/if_igb.c Wed Jun 16 17:36:53 2010(r209241)
> @@ -212,7 +212,6 @@ static bool igb_tso_setup(struct tx_ring
>  static voidigb_set_promisc(struct adapter *);
>  static voidigb_disable_promisc(struct adapter *);
>  static voidigb_set_multi(struct adapter *);
> -static voidigb_print_hw_stats(struct adapter *);
>  static voidigb_update_link_status(struct adapter *);
>  static voidigb_refresh_mbufs(struct rx_ring *, int);
>
> @@ -224,11 +223,10 @@ static intigb_xmit(struct tx_ring *, st
>  static int igb_dma_malloc(struct adapter *, bus_size_t,
>struct igb_dma_alloc *, int);
>  static voidigb_dma_free(struct adapter *, struct igb_dma_alloc *);
> -static voidigb_print_debug_info(struct adapter *);
> +static int igb_sysctl_nvm_info(SYSCTL_HANDLER_ARGS);
>  static voidigb_print_nvm_info(struct adapter *);
>  static int igb_is_valid_ether_addr(u8 *);
> -static int igb_sysctl_stats(SYSCTL_HANDLER_ARGS);
> -static int igb_sysctl_debug_info(SYSCTL_HANDLER_ARGS);
> +static void igb_add_hw_stats(struct adapter *adapter);
>  /* Management and WOL Support */
>  static voidigb_init_manageability(struct adapter *);
>  static voidigb_release_manageability(struct adapter *);
> @@ -411,13 +409,8 @@ igb_attach(device_t dev)
>/* SYSCTL stuff */
>SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
>SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
> -   OID_AUTO, "debug", CTLTYPE_INT|CTLFLAG_RW, adapter, 0,
> -   igb_sysctl_debug_info, "I", "Debug Information");
> -
> -   SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
> -   SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
> -   OID_AUTO, "stats", CTLTYPE_INT|CTLFLAG_RW, adapter, 0,
> -   igb_sysctl_stats, "I", "Statistics");
> +   OID_AUTO, "nvm", CTLTYPE_INT|CTLFLAG_RW, adapter, 0,
> +   igb_sysctl_nvm_info, "I", "NVM Information");
>
>SYSCTL_ADD_INT(device_get_sysctl_ctx(adapter->dev),
>SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)),
> @@ -583,6 +576,8 @@ igb_attach(device_t dev)
>adapter->vlan_detach = EVENTHANDLER_REGISTER(vlan_unconfig,
> igb_unregister_vlan, adapter, EVENTHANDLER_PRI_FIRST);
>
> +   igb_add_hw_stats(adapter);
> +
>/* Tell the stack that the interface is not active */
>adapter->ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
>
> @@ -1881,7 +1876,6 @@ static void
>  igb_local_timer(void *arg)
>  {
>struct adapter  *adapter = arg;
> -   struct ifnet*ifp = adapter->ifp;
>device_tdev = adapter->dev;
>struct tx_ring  *txr = adapter->tx_rings;
>
> @@ -1891,9 +1885,6 @@ igb_local_timer(void *arg)
>igb_update_link_status(adapter);
>igb_update_stats_counters(adapter);
>
> -   if (igb_display_debug_stats && ifp->if_drv_flags & IFF_DRV_RUNNING)
> -   igb_print_hw_stats(adapter);
> -
> /*
> ** Watchdog: check for time since any descriptor was cleaned
> */
> @@ -4741,8 +4732,10 @@ igb_update_stats_counters(struct adapter
>/* For the 64-bit byte counters the low dword must be read first. */
>/* Both registers clear on the read of the high dword */
>
> -   adapter->stats.gorc += E1000_READ_REG(&adapter->hw, E1000_GORCH);
> -   adapter->stats.gotc += E1000_READ_REG(&adapter->hw, E1000_GOTCH);
> +   adapter->stats.gorc += E1000_READ_REG(&adapter->hw, E1000_GORCL) +
> + ((u64)E1000_READ_REG(&adapter->hw, E1000_GORCH) << 32);
> +   adapter->stats.gotc += E1000_READ_REG(&adapter->hw, E1000_GOTCL) +
> + ((u64)E1000_READ_REG(&adapter->hw, E1000_GOTCH) << 32) ;
>
>adapter->stats.rnbc += E1000_READ_REG(&adapter->hw, E1000_RNBC);
>adapter->stats.ruc += E1000_READ_REG(&adapter->hw, E1000_RUC);
> @@ -4764,6 +4757,38 @@ igb_update_stats_counters(struct adapter
>adapter->stats.mptc += E1000_READ_REG(&adapter->hw, E1000_MPTC);
>adapter->stats.bptc += E1000_READ_REG(&adapter->hw, E1000_BPTC);
>
> +   /* Interrupt Counts */
> +
> +   adapter->stats.iac += E1000_READ_REG(&adapter->hw,

svn commit: r209241 - head/sys/dev/e1000

2010-06-16 Thread George V. Neville-Neil
Author: gnn
Date: Wed Jun 16 17:36:53 2010
New Revision: 209241
URL: http://svn.freebsd.org/changeset/base/209241

Log:
  Move statistics into the sysctl tree making it easier to find
  and use them.
  Add previously hidden statistics, some of which include interrupt
  and host/card communication counters.

Modified:
  head/sys/dev/e1000/if_igb.c
  head/sys/dev/e1000/if_igb.h

Modified: head/sys/dev/e1000/if_igb.c
==
--- head/sys/dev/e1000/if_igb.c Wed Jun 16 16:52:35 2010(r209240)
+++ head/sys/dev/e1000/if_igb.c Wed Jun 16 17:36:53 2010(r209241)
@@ -212,7 +212,6 @@ static bool igb_tso_setup(struct tx_ring
 static voidigb_set_promisc(struct adapter *);
 static voidigb_disable_promisc(struct adapter *);
 static voidigb_set_multi(struct adapter *);
-static voidigb_print_hw_stats(struct adapter *);
 static voidigb_update_link_status(struct adapter *);
 static voidigb_refresh_mbufs(struct rx_ring *, int);
 
@@ -224,11 +223,10 @@ static intigb_xmit(struct tx_ring *, st
 static int igb_dma_malloc(struct adapter *, bus_size_t,
struct igb_dma_alloc *, int);
 static voidigb_dma_free(struct adapter *, struct igb_dma_alloc *);
-static voidigb_print_debug_info(struct adapter *);
+static int igb_sysctl_nvm_info(SYSCTL_HANDLER_ARGS);
 static voidigb_print_nvm_info(struct adapter *);
 static int igb_is_valid_ether_addr(u8 *);
-static int igb_sysctl_stats(SYSCTL_HANDLER_ARGS);
-static int igb_sysctl_debug_info(SYSCTL_HANDLER_ARGS);
+static void igb_add_hw_stats(struct adapter *adapter);
 /* Management and WOL Support */
 static voidigb_init_manageability(struct adapter *);
 static voidigb_release_manageability(struct adapter *);
@@ -411,13 +409,8 @@ igb_attach(device_t dev)
/* SYSCTL stuff */
SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
-   OID_AUTO, "debug", CTLTYPE_INT|CTLFLAG_RW, adapter, 0,
-   igb_sysctl_debug_info, "I", "Debug Information");
-
-   SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev),
-   SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
-   OID_AUTO, "stats", CTLTYPE_INT|CTLFLAG_RW, adapter, 0,
-   igb_sysctl_stats, "I", "Statistics");
+   OID_AUTO, "nvm", CTLTYPE_INT|CTLFLAG_RW, adapter, 0,
+   igb_sysctl_nvm_info, "I", "NVM Information");
 
SYSCTL_ADD_INT(device_get_sysctl_ctx(adapter->dev),
SYSCTL_CHILDREN(device_get_sysctl_tree(adapter->dev)),
@@ -583,6 +576,8 @@ igb_attach(device_t dev)
adapter->vlan_detach = EVENTHANDLER_REGISTER(vlan_unconfig,
 igb_unregister_vlan, adapter, EVENTHANDLER_PRI_FIRST);
 
+   igb_add_hw_stats(adapter);
+
/* Tell the stack that the interface is not active */
adapter->ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
 
@@ -1881,7 +1876,6 @@ static void
 igb_local_timer(void *arg)
 {
struct adapter  *adapter = arg;
-   struct ifnet*ifp = adapter->ifp;
device_tdev = adapter->dev;
struct tx_ring  *txr = adapter->tx_rings;
 
@@ -1891,9 +1885,6 @@ igb_local_timer(void *arg)
igb_update_link_status(adapter);
igb_update_stats_counters(adapter);
 
-   if (igb_display_debug_stats && ifp->if_drv_flags & IFF_DRV_RUNNING)
-   igb_print_hw_stats(adapter);
-
 /*
 ** Watchdog: check for time since any descriptor was cleaned
 */
@@ -4741,8 +4732,10 @@ igb_update_stats_counters(struct adapter
/* For the 64-bit byte counters the low dword must be read first. */
/* Both registers clear on the read of the high dword */
 
-   adapter->stats.gorc += E1000_READ_REG(&adapter->hw, E1000_GORCH);
-   adapter->stats.gotc += E1000_READ_REG(&adapter->hw, E1000_GOTCH);
+   adapter->stats.gorc += E1000_READ_REG(&adapter->hw, E1000_GORCL) +
+ ((u64)E1000_READ_REG(&adapter->hw, E1000_GORCH) << 32);
+   adapter->stats.gotc += E1000_READ_REG(&adapter->hw, E1000_GOTCL) +
+ ((u64)E1000_READ_REG(&adapter->hw, E1000_GOTCH) << 32) ;
 
adapter->stats.rnbc += E1000_READ_REG(&adapter->hw, E1000_RNBC);
adapter->stats.ruc += E1000_READ_REG(&adapter->hw, E1000_RUC);
@@ -4764,6 +4757,38 @@ igb_update_stats_counters(struct adapter
adapter->stats.mptc += E1000_READ_REG(&adapter->hw, E1000_MPTC);
adapter->stats.bptc += E1000_READ_REG(&adapter->hw, E1000_BPTC);
 
+   /* Interrupt Counts */
+
+   adapter->stats.iac += E1000_READ_REG(&adapter->hw, E1000_IAC);
+   adapter->stats.icrxptc += E1000_READ_REG(&adapter->hw, E1000_ICRXPTC);
+   adapter->stats.icrxatc += E1000_READ_REG(&adapter->hw, E1000_ICRXATC);
+   adapter->stats.ictxptc += E1000_READ_REG(&adapter->hw, E1000_ICTXPTC);
+   adapter->stats.ictxatc += E1000_READ_REG