|  | /****************************************************************************** | 
|  | * This software may be used and distributed according to the terms of | 
|  | * the GNU General Public License (GPL), incorporated herein by reference. | 
|  | * Drivers based on or derived from this code fall under the GPL and must | 
|  | * retain the authorship, copyright and license notice.  This file is not | 
|  | * a complete program and may only be used when the entire operating | 
|  | * system is licensed under the GPL. | 
|  | * See the file COPYING in this distribution for more information. | 
|  | * | 
|  | * vxge-traffic.h: Driver for Exar Corp's X3100 Series 10GbE PCIe I/O | 
|  | *                 Virtualized Server Adapter. | 
|  | * Copyright(c) 2002-2010 Exar Corp. | 
|  | ******************************************************************************/ | 
|  | #ifndef VXGE_TRAFFIC_H | 
|  | #define VXGE_TRAFFIC_H | 
|  |  | 
|  | #include "vxge-reg.h" | 
|  | #include "vxge-version.h" | 
|  |  | 
|  | #define VXGE_HW_DTR_MAX_T_CODE		16 | 
|  | #define VXGE_HW_ALL_FOXES		0xFFFFFFFFFFFFFFFFULL | 
|  | #define VXGE_HW_INTR_MASK_ALL		0xFFFFFFFFFFFFFFFFULL | 
|  | #define	VXGE_HW_MAX_VIRTUAL_PATHS	17 | 
|  |  | 
|  | #define VXGE_HW_MAC_MAX_MAC_PORT_ID	2 | 
|  |  | 
|  | #define VXGE_HW_DEFAULT_32		0xffffffff | 
|  | /* frames sizes */ | 
|  | #define VXGE_HW_HEADER_802_2_SIZE	3 | 
|  | #define VXGE_HW_HEADER_SNAP_SIZE	5 | 
|  | #define VXGE_HW_HEADER_VLAN_SIZE	4 | 
|  | #define VXGE_HW_MAC_HEADER_MAX_SIZE \ | 
|  | (ETH_HLEN + \ | 
|  | VXGE_HW_HEADER_802_2_SIZE + \ | 
|  | VXGE_HW_HEADER_VLAN_SIZE + \ | 
|  | VXGE_HW_HEADER_SNAP_SIZE) | 
|  |  | 
|  | /* 32bit alignments */ | 
|  | #define VXGE_HW_HEADER_ETHERNET_II_802_3_ALIGN		2 | 
|  | #define VXGE_HW_HEADER_802_2_SNAP_ALIGN			2 | 
|  | #define VXGE_HW_HEADER_802_2_ALIGN			3 | 
|  | #define VXGE_HW_HEADER_SNAP_ALIGN			1 | 
|  |  | 
|  | #define VXGE_HW_L3_CKSUM_OK				0xFFFF | 
|  | #define VXGE_HW_L4_CKSUM_OK				0xFFFF | 
|  |  | 
|  | /* Forward declarations */ | 
|  | struct __vxge_hw_device; | 
|  | struct __vxge_hw_vpath_handle; | 
|  | struct vxge_hw_vp_config; | 
|  | struct __vxge_hw_virtualpath; | 
|  | struct __vxge_hw_channel; | 
|  | struct __vxge_hw_fifo; | 
|  | struct __vxge_hw_ring; | 
|  | struct vxge_hw_ring_attr; | 
|  | struct vxge_hw_mempool; | 
|  |  | 
|  | #ifndef TRUE | 
|  | #define TRUE 1 | 
|  | #endif | 
|  |  | 
|  | #ifndef FALSE | 
|  | #define FALSE 0 | 
|  | #endif | 
|  |  | 
|  | /*VXGE_HW_STATUS_H*/ | 
|  |  | 
|  | #define VXGE_HW_EVENT_BASE			0 | 
|  | #define VXGE_LL_EVENT_BASE			100 | 
|  |  | 
|  | /** | 
|  | * enum vxge_hw_event- Enumerates slow-path HW events. | 
|  | * @VXGE_HW_EVENT_UNKNOWN: Unknown (and invalid) event. | 
|  | * @VXGE_HW_EVENT_SERR: Serious vpath hardware error event. | 
|  | * @VXGE_HW_EVENT_ECCERR: vpath ECC error event. | 
|  | * @VXGE_HW_EVENT_VPATH_ERR: Error local to the respective vpath | 
|  | * @VXGE_HW_EVENT_FIFO_ERR: FIFO Doorbell fifo error. | 
|  | * @VXGE_HW_EVENT_SRPCIM_SERR: srpcim hardware error event. | 
|  | * @VXGE_HW_EVENT_MRPCIM_SERR: mrpcim hardware error event. | 
|  | * @VXGE_HW_EVENT_MRPCIM_ECCERR: mrpcim ecc error event. | 
|  | * @VXGE_HW_EVENT_RESET_START: Privileged entity is starting device reset | 
|  | * @VXGE_HW_EVENT_RESET_COMPLETE: Device reset has been completed | 
|  | * @VXGE_HW_EVENT_SLOT_FREEZE: Slot-freeze event. Driver tries to distinguish | 
|  | * slot-freeze from the rest critical events (e.g. ECC) when it is | 
|  | * impossible to PIO read "through" the bus, i.e. when getting all-foxes. | 
|  | * | 
|  | * enum vxge_hw_event enumerates slow-path HW eventis. | 
|  | * | 
|  | * See also: struct vxge_hw_uld_cbs{}, vxge_uld_link_up_f{}, | 
|  | * vxge_uld_link_down_f{}. | 
|  | */ | 
|  | enum vxge_hw_event { | 
|  | VXGE_HW_EVENT_UNKNOWN		= 0, | 
|  | /* HW events */ | 
|  | VXGE_HW_EVENT_RESET_START	= VXGE_HW_EVENT_BASE + 1, | 
|  | VXGE_HW_EVENT_RESET_COMPLETE	= VXGE_HW_EVENT_BASE + 2, | 
|  | VXGE_HW_EVENT_LINK_DOWN		= VXGE_HW_EVENT_BASE + 3, | 
|  | VXGE_HW_EVENT_LINK_UP		= VXGE_HW_EVENT_BASE + 4, | 
|  | VXGE_HW_EVENT_ALARM_CLEARED	= VXGE_HW_EVENT_BASE + 5, | 
|  | VXGE_HW_EVENT_ECCERR		= VXGE_HW_EVENT_BASE + 6, | 
|  | VXGE_HW_EVENT_MRPCIM_ECCERR	= VXGE_HW_EVENT_BASE + 7, | 
|  | VXGE_HW_EVENT_FIFO_ERR		= VXGE_HW_EVENT_BASE + 8, | 
|  | VXGE_HW_EVENT_VPATH_ERR		= VXGE_HW_EVENT_BASE + 9, | 
|  | VXGE_HW_EVENT_CRITICAL_ERR	= VXGE_HW_EVENT_BASE + 10, | 
|  | VXGE_HW_EVENT_SERR		= VXGE_HW_EVENT_BASE + 11, | 
|  | VXGE_HW_EVENT_SRPCIM_SERR	= VXGE_HW_EVENT_BASE + 12, | 
|  | VXGE_HW_EVENT_MRPCIM_SERR	= VXGE_HW_EVENT_BASE + 13, | 
|  | VXGE_HW_EVENT_SLOT_FREEZE	= VXGE_HW_EVENT_BASE + 14, | 
|  | }; | 
|  |  | 
|  | #define VXGE_HW_SET_LEVEL(a, b) (((a) > (b)) ? (a) : (b)) | 
|  |  | 
|  | /* | 
|  | * struct vxge_hw_mempool_dma - Represents DMA objects passed to the | 
|  | caller. | 
|  | */ | 
|  | struct vxge_hw_mempool_dma { | 
|  | dma_addr_t			addr; | 
|  | struct pci_dev *handle; | 
|  | struct pci_dev *acc_handle; | 
|  | }; | 
|  |  | 
|  | /* | 
|  | * vxge_hw_mempool_item_f  - Mempool item alloc/free callback | 
|  | * @mempoolh: Memory pool handle. | 
|  | * @memblock: Address of memory block | 
|  | * @memblock_index: Index of memory block | 
|  | * @item: Item that gets allocated or freed. | 
|  | * @index: Item's index in the memory pool. | 
|  | * @is_last: True, if this item is the last one in the pool; false - otherwise. | 
|  | * userdata: Per-pool user context. | 
|  | * | 
|  | * Memory pool allocation/deallocation callback. | 
|  | */ | 
|  |  | 
|  | /* | 
|  | * struct vxge_hw_mempool - Memory pool. | 
|  | */ | 
|  | struct vxge_hw_mempool { | 
|  |  | 
|  | void (*item_func_alloc)( | 
|  | struct vxge_hw_mempool *mempoolh, | 
|  | u32			memblock_index, | 
|  | struct vxge_hw_mempool_dma	*dma_object, | 
|  | u32			index, | 
|  | u32			is_last); | 
|  |  | 
|  | void		*userdata; | 
|  | void		**memblocks_arr; | 
|  | void		**memblocks_priv_arr; | 
|  | struct vxge_hw_mempool_dma	*memblocks_dma_arr; | 
|  | struct __vxge_hw_device *devh; | 
|  | u32			memblock_size; | 
|  | u32			memblocks_max; | 
|  | u32			memblocks_allocated; | 
|  | u32			item_size; | 
|  | u32			items_max; | 
|  | u32			items_initial; | 
|  | u32			items_current; | 
|  | u32			items_per_memblock; | 
|  | void		**items_arr; | 
|  | u32			items_priv_size; | 
|  | }; | 
|  |  | 
|  | #define	VXGE_HW_MAX_INTR_PER_VP				4 | 
|  | #define	VXGE_HW_VPATH_INTR_TX				0 | 
|  | #define	VXGE_HW_VPATH_INTR_RX				1 | 
|  | #define	VXGE_HW_VPATH_INTR_EINTA			2 | 
|  | #define	VXGE_HW_VPATH_INTR_BMAP				3 | 
|  |  | 
|  | #define VXGE_HW_BLOCK_SIZE				4096 | 
|  |  | 
|  | /** | 
|  | * struct vxge_hw_tim_intr_config - Titan Tim interrupt configuration. | 
|  | * @intr_enable: Set to 1, if interrupt is enabled. | 
|  | * @btimer_val: Boundary Timer Initialization value in units of 272 ns. | 
|  | * @timer_ac_en: Timer Automatic Cancel. 1 : Automatic Canceling Enable: when | 
|  | *             asserted, other interrupt-generating entities will cancel the | 
|  | *             scheduled timer interrupt. | 
|  | * @timer_ci_en: Timer Continuous Interrupt. 1 : Continuous Interrupting Enable: | 
|  | *             When asserted, an interrupt will be generated every time the | 
|  | *             boundary timer expires, even if no traffic has been transmitted | 
|  | *             on this interrupt. | 
|  | * @timer_ri_en: Timer Consecutive (Re-) Interrupt 1 : Consecutive | 
|  | *             (Re-) Interrupt Enable: When asserted, an interrupt will be | 
|  | *             generated the next time the timer expires, even if no traffic has | 
|  | *             been transmitted on this interrupt. (This will only happen once | 
|  | *             each time that this value is written to the TIM.) This bit is | 
|  | *             cleared by H/W at the end of the current-timer-interval when | 
|  | *             the interrupt is triggered. | 
|  | * @rtimer_val: Restriction Timer Initialization value in units of 272 ns. | 
|  | * @util_sel: Utilization Selector. Selects which of the workload approximations | 
|  | *             to use (e.g. legacy Tx utilization, Tx/Rx utilization, host | 
|  | *             specified utilization etc.), selects one of | 
|  | *             the 17 host configured values. | 
|  | *             0-Virtual Path 0 | 
|  | *             1-Virtual Path 1 | 
|  | *             ... | 
|  | *             16-Virtual Path 17 | 
|  | *             17-Legacy Tx network utilization, provided by TPA | 
|  | *             18-Legacy Rx network utilization, provided by FAU | 
|  | *             19-Average of legacy Rx and Tx utilization calculated from link | 
|  | *                utilization values. | 
|  | *             20-31-Invalid configurations | 
|  | *             32-Host utilization for Virtual Path 0 | 
|  | *             33-Host utilization for Virtual Path 1 | 
|  | *             ... | 
|  | *             48-Host utilization for Virtual Path 17 | 
|  | *             49-Legacy Tx network utilization, provided by TPA | 
|  | *             50-Legacy Rx network utilization, provided by FAU | 
|  | *             51-Average of legacy Rx and Tx utilization calculated from | 
|  | *                link utilization values. | 
|  | *             52-63-Invalid configurations | 
|  | * @ltimer_val: Latency Timer Initialization Value in units of 272 ns. | 
|  | * @txd_cnt_en: TxD Return Event Count Enable. This configuration bit when set | 
|  | *             to 1 enables counting of TxD0 returns (signalled by PCC's), | 
|  | *             towards utilization event count values. | 
|  | * @urange_a: Defines the upper limit (in percent) for this utilization range | 
|  | *             to be active. This range is considered active | 
|  | *             if 0 = UTIL = URNG_A | 
|  | *             and the UEC_A field (below) is non-zero. | 
|  | * @uec_a: Utilization Event Count A. If this range is active, the adapter will | 
|  | *             wait until UEC_A events have occurred on the interrupt before | 
|  | *             generating an interrupt. | 
|  | * @urange_b: Link utilization range B. | 
|  | * @uec_b: Utilization Event Count B. | 
|  | * @urange_c: Link utilization range C. | 
|  | * @uec_c: Utilization Event Count C. | 
|  | * @urange_d: Link utilization range D. | 
|  | * @uec_d: Utilization Event Count D. | 
|  | * Traffic Interrupt Controller Module interrupt configuration. | 
|  | */ | 
|  | struct vxge_hw_tim_intr_config { | 
|  |  | 
|  | u32				intr_enable; | 
|  | #define VXGE_HW_TIM_INTR_ENABLE				1 | 
|  | #define VXGE_HW_TIM_INTR_DISABLE				0 | 
|  | #define VXGE_HW_TIM_INTR_DEFAULT				0 | 
|  |  | 
|  | u32				btimer_val; | 
|  | #define VXGE_HW_MIN_TIM_BTIMER_VAL				0 | 
|  | #define VXGE_HW_MAX_TIM_BTIMER_VAL				67108864 | 
|  | #define VXGE_HW_USE_FLASH_DEFAULT				(~0) | 
|  |  | 
|  | u32				timer_ac_en; | 
|  | #define VXGE_HW_TIM_TIMER_AC_ENABLE				1 | 
|  | #define VXGE_HW_TIM_TIMER_AC_DISABLE				0 | 
|  |  | 
|  | u32				timer_ci_en; | 
|  | #define VXGE_HW_TIM_TIMER_CI_ENABLE				1 | 
|  | #define VXGE_HW_TIM_TIMER_CI_DISABLE				0 | 
|  |  | 
|  | u32				timer_ri_en; | 
|  | #define VXGE_HW_TIM_TIMER_RI_ENABLE				1 | 
|  | #define VXGE_HW_TIM_TIMER_RI_DISABLE				0 | 
|  |  | 
|  | u32				rtimer_val; | 
|  | #define VXGE_HW_MIN_TIM_RTIMER_VAL				0 | 
|  | #define VXGE_HW_MAX_TIM_RTIMER_VAL				67108864 | 
|  |  | 
|  | u32				util_sel; | 
|  | #define VXGE_HW_TIM_UTIL_SEL_LEGACY_TX_NET_UTIL		17 | 
|  | #define VXGE_HW_TIM_UTIL_SEL_LEGACY_RX_NET_UTIL		18 | 
|  | #define VXGE_HW_TIM_UTIL_SEL_LEGACY_TX_RX_AVE_NET_UTIL		19 | 
|  | #define VXGE_HW_TIM_UTIL_SEL_PER_VPATH				63 | 
|  |  | 
|  | u32				ltimer_val; | 
|  | #define VXGE_HW_MIN_TIM_LTIMER_VAL				0 | 
|  | #define VXGE_HW_MAX_TIM_LTIMER_VAL				67108864 | 
|  |  | 
|  | /* Line utilization interrupts */ | 
|  | u32				urange_a; | 
|  | #define VXGE_HW_MIN_TIM_URANGE_A				0 | 
|  | #define VXGE_HW_MAX_TIM_URANGE_A				100 | 
|  |  | 
|  | u32				uec_a; | 
|  | #define VXGE_HW_MIN_TIM_UEC_A					0 | 
|  | #define VXGE_HW_MAX_TIM_UEC_A					65535 | 
|  |  | 
|  | u32				urange_b; | 
|  | #define VXGE_HW_MIN_TIM_URANGE_B				0 | 
|  | #define VXGE_HW_MAX_TIM_URANGE_B				100 | 
|  |  | 
|  | u32				uec_b; | 
|  | #define VXGE_HW_MIN_TIM_UEC_B					0 | 
|  | #define VXGE_HW_MAX_TIM_UEC_B					65535 | 
|  |  | 
|  | u32				urange_c; | 
|  | #define VXGE_HW_MIN_TIM_URANGE_C				0 | 
|  | #define VXGE_HW_MAX_TIM_URANGE_C				100 | 
|  |  | 
|  | u32				uec_c; | 
|  | #define VXGE_HW_MIN_TIM_UEC_C					0 | 
|  | #define VXGE_HW_MAX_TIM_UEC_C					65535 | 
|  |  | 
|  | u32				uec_d; | 
|  | #define VXGE_HW_MIN_TIM_UEC_D					0 | 
|  | #define VXGE_HW_MAX_TIM_UEC_D					65535 | 
|  | }; | 
|  |  | 
|  | #define	VXGE_HW_STATS_OP_READ					0 | 
|  | #define	VXGE_HW_STATS_OP_CLEAR_STAT				1 | 
|  | #define	VXGE_HW_STATS_OP_CLEAR_ALL_VPATH_STATS			2 | 
|  | #define	VXGE_HW_STATS_OP_CLEAR_ALL_STATS_OF_LOC			2 | 
|  | #define	VXGE_HW_STATS_OP_CLEAR_ALL_STATS			3 | 
|  |  | 
|  | #define	VXGE_HW_STATS_LOC_AGGR					17 | 
|  | #define VXGE_HW_STATS_AGGRn_OFFSET				0x00720 | 
|  |  | 
|  | #define VXGE_HW_STATS_VPATH_TX_OFFSET				0x0 | 
|  | #define VXGE_HW_STATS_VPATH_RX_OFFSET				0x00090 | 
|  |  | 
|  | #define	VXGE_HW_STATS_VPATH_PROG_EVENT_VNUM0_OFFSET	   (0x001d0 >> 3) | 
|  | #define	VXGE_HW_STATS_GET_VPATH_PROG_EVENT_VNUM0(bits) \ | 
|  | vxge_bVALn(bits, 0, 32) | 
|  |  | 
|  | #define	VXGE_HW_STATS_GET_VPATH_PROG_EVENT_VNUM1(bits) \ | 
|  | vxge_bVALn(bits, 32, 32) | 
|  |  | 
|  | #define	VXGE_HW_STATS_VPATH_PROG_EVENT_VNUM2_OFFSET	   (0x001d8 >> 3) | 
|  | #define	VXGE_HW_STATS_GET_VPATH_PROG_EVENT_VNUM2(bits) \ | 
|  | vxge_bVALn(bits, 0, 32) | 
|  |  | 
|  | #define	VXGE_HW_STATS_GET_VPATH_PROG_EVENT_VNUM3(bits) \ | 
|  | vxge_bVALn(bits, 32, 32) | 
|  |  | 
|  | /** | 
|  | * struct vxge_hw_xmac_aggr_stats - Per-Aggregator XMAC Statistics | 
|  | * | 
|  | * @tx_frms: Count of data frames transmitted on this Aggregator on all | 
|  | *             its Aggregation ports. Does not include LACPDUs or Marker PDUs. | 
|  | *             However, does include frames discarded by the Distribution | 
|  | *             function. | 
|  | * @tx_data_octets: Count of data and padding octets of frames transmitted | 
|  | *             on this Aggregator on all its Aggregation ports. Does not include | 
|  | *             octets of LACPDUs or Marker PDUs. However, does include octets of | 
|  | *             frames discarded by the Distribution function. | 
|  | * @tx_mcast_frms: Count of data frames transmitted (to a group destination | 
|  | *             address other than the broadcast address) on this Aggregator on | 
|  | *             all its Aggregation ports. Does not include LACPDUs or Marker | 
|  | *             PDUs. However, does include frames discarded by the Distribution | 
|  | *             function. | 
|  | * @tx_bcast_frms: Count of broadcast data frames transmitted on this Aggregator | 
|  | *             on all its Aggregation ports. Does not include LACPDUs or Marker | 
|  | *             PDUs. However, does include frames discarded by the Distribution | 
|  | *             function. | 
|  | * @tx_discarded_frms: Count of data frames to be transmitted on this Aggregator | 
|  | *             that are discarded by the Distribution function. This occurs when | 
|  | *             conversation are allocated to different ports and have to be | 
|  | *             flushed on old ports | 
|  | * @tx_errored_frms: Count of data frames transmitted on this Aggregator that | 
|  | *             experience transmission errors on its Aggregation ports. | 
|  | * @rx_frms: Count of data frames received on this Aggregator on all its | 
|  | *             Aggregation ports. Does not include LACPDUs or Marker PDUs. | 
|  | *             Also, does not include frames discarded by the Collection | 
|  | *             function. | 
|  | * @rx_data_octets: Count of data and padding octets of frames received on this | 
|  | *             Aggregator on all its Aggregation ports. Does not include octets | 
|  | *             of LACPDUs or Marker PDUs. Also, does not include | 
|  | *             octets of frames | 
|  | *             discarded by the Collection function. | 
|  | * @rx_mcast_frms: Count of data frames received (from a group destination | 
|  | *             address other than the broadcast address) on this Aggregator on | 
|  | *             all its Aggregation ports. Does not include LACPDUs or Marker | 
|  | *             PDUs. Also, does not include frames discarded by the Collection | 
|  | *             function. | 
|  | * @rx_bcast_frms: Count of broadcast data frames received on this Aggregator on | 
|  | *             all its Aggregation ports. Does not include LACPDUs or Marker | 
|  | *             PDUs. Also, does not include frames discarded by the Collection | 
|  | *             function. | 
|  | * @rx_discarded_frms: Count of data frames received on this Aggregator that are | 
|  | *             discarded by the Collection function because the Collection | 
|  | *             function was disabled on the port which the frames are received. | 
|  | * @rx_errored_frms: Count of data frames received on this Aggregator that are | 
|  | *             discarded by its Aggregation ports, or are discarded by the | 
|  | *             Collection function of the Aggregator, or that are discarded by | 
|  | *             the Aggregator due to detection of an illegal Slow Protocols PDU. | 
|  | * @rx_unknown_slow_proto_frms: Count of data frames received on this Aggregator | 
|  | *             that are discarded by its Aggregation ports due to detection of | 
|  | *             an unknown Slow Protocols PDU. | 
|  | * | 
|  | * Per aggregator XMAC RX statistics. | 
|  | */ | 
|  | struct vxge_hw_xmac_aggr_stats { | 
|  | /*0x000*/		u64	tx_frms; | 
|  | /*0x008*/		u64	tx_data_octets; | 
|  | /*0x010*/		u64	tx_mcast_frms; | 
|  | /*0x018*/		u64	tx_bcast_frms; | 
|  | /*0x020*/		u64	tx_discarded_frms; | 
|  | /*0x028*/		u64	tx_errored_frms; | 
|  | /*0x030*/		u64	rx_frms; | 
|  | /*0x038*/		u64	rx_data_octets; | 
|  | /*0x040*/		u64	rx_mcast_frms; | 
|  | /*0x048*/		u64	rx_bcast_frms; | 
|  | /*0x050*/		u64	rx_discarded_frms; | 
|  | /*0x058*/		u64	rx_errored_frms; | 
|  | /*0x060*/		u64	rx_unknown_slow_proto_frms; | 
|  | } __packed; | 
|  |  | 
|  | /** | 
|  | * struct vxge_hw_xmac_port_stats - XMAC Port Statistics | 
|  | * | 
|  | * @tx_ttl_frms: Count of successfully transmitted MAC frames | 
|  | * @tx_ttl_octets: Count of total octets of transmitted frames, not including | 
|  | *            framing characters (i.e. less framing bits). To determine the | 
|  | *            total octets of transmitted frames, including framing characters, | 
|  | *            multiply PORTn_TX_TTL_FRMS by 8 and add it to this stat (unless | 
|  | *            otherwise configured, this stat only counts frames that have | 
|  | *            8 bytes of preamble for each frame). This stat can be configured | 
|  | *            (see XMAC_STATS_GLOBAL_CFG.TTL_FRMS_HANDLING) to count everything | 
|  | *            including the preamble octets. | 
|  | * @tx_data_octets: Count of data and padding octets of successfully transmitted | 
|  | *            frames. | 
|  | * @tx_mcast_frms: Count of successfully transmitted frames to a group address | 
|  | *            other than the broadcast address. | 
|  | * @tx_bcast_frms: Count of successfully transmitted frames to the broadcast | 
|  | *            group address. | 
|  | * @tx_ucast_frms: Count of transmitted frames containing a unicast address. | 
|  | *            Includes discarded frames that are not sent to the network. | 
|  | * @tx_tagged_frms: Count of transmitted frames containing a VLAN tag. | 
|  | * @tx_vld_ip: Count of transmitted IP datagrams that are passed to the network. | 
|  | * @tx_vld_ip_octets: Count of total octets of transmitted IP datagrams that | 
|  | *            are passed to the network. | 
|  | * @tx_icmp: Count of transmitted ICMP messages. Includes messages not sent | 
|  | *            due to problems within ICMP. | 
|  | * @tx_tcp: Count of transmitted TCP segments. Does not include segments | 
|  | *            containing retransmitted octets. | 
|  | * @tx_rst_tcp: Count of transmitted TCP segments containing the RST flag. | 
|  | * @tx_udp: Count of transmitted UDP datagrams. | 
|  | * @tx_parse_error: Increments when the TPA is unable to parse a packet. This | 
|  | *            generally occurs when a packet is corrupt somehow, including | 
|  | *            packets that have IP version mismatches, invalid Layer 2 control | 
|  | *            fields, etc. L3/L4 checksums are not offloaded, but the packet | 
|  | *            is still be transmitted. | 
|  | * @tx_unknown_protocol: Increments when the TPA encounters an unknown | 
|  | *            protocol, such as a new IPv6 extension header, or an unsupported | 
|  | *            Routing Type. The packet still has a checksum calculated but it | 
|  | *            may be incorrect. | 
|  | * @tx_pause_ctrl_frms: Count of MAC PAUSE control frames that are transmitted. | 
|  | *            Since, the only control frames supported by this device are | 
|  | *            PAUSE frames, this register is a count of all transmitted MAC | 
|  | *            control frames. | 
|  | * @tx_marker_pdu_frms: Count of Marker PDUs transmitted | 
|  | * on this Aggregation port. | 
|  | * @tx_lacpdu_frms: Count of LACPDUs transmitted on this Aggregation port. | 
|  | * @tx_drop_ip: Count of transmitted IP datagrams that could not be passed to | 
|  | *            the network. Increments because of: | 
|  | *            1) An internal processing error | 
|  | *            (such as an uncorrectable ECC error). 2) A frame parsing error | 
|  | *            during IP checksum calculation. | 
|  | * @tx_marker_resp_pdu_frms: Count of Marker Response PDUs transmitted on this | 
|  | *            Aggregation port. | 
|  | * @tx_xgmii_char2_match: Maintains a count of the number of transmitted XGMII | 
|  | *            characters that match a pattern that is programmable through | 
|  | *            register XMAC_STATS_TX_XGMII_CHAR_PORTn. By default, the pattern | 
|  | *            is set to /T/ (i.e. the terminate character), thus the statistic | 
|  | *            tracks the number of transmitted Terminate characters. | 
|  | * @tx_xgmii_char1_match: Maintains a count of the number of transmitted XGMII | 
|  | *            characters that match a pattern that is programmable through | 
|  | *            register XMAC_STATS_TX_XGMII_CHAR_PORTn. By default, the pattern | 
|  | *            is set to /S/ (i.e. the start character), | 
|  | *            thus the statistic tracks | 
|  | *            the number of transmitted Start characters. | 
|  | * @tx_xgmii_column2_match: Maintains a count of the number of transmitted XGMII | 
|  | *            columns that match a pattern that is programmable through register | 
|  | *            XMAC_STATS_TX_XGMII_COLUMN2_PORTn. By default, the pattern is set | 
|  | *            to 4 x /E/ (i.e. a column containing all error characters), thus | 
|  | *            the statistic tracks the number of Error columns transmitted at | 
|  | *            any time. If XMAC_STATS_TX_XGMII_BEHAV_COLUMN2_PORTn.NEAR_COL1 is | 
|  | *            set to 1, then this stat increments when COLUMN2 is found within | 
|  | *            'n' clocks after COLUMN1. Here, 'n' is defined by | 
|  | *            XMAC_STATS_TX_XGMII_BEHAV_COLUMN2_PORTn.NUM_COL (if 'n' is set | 
|  | *            to 0, then it means to search anywhere for COLUMN2). | 
|  | * @tx_xgmii_column1_match: Maintains a count of the number of transmitted XGMII | 
|  | *            columns that match a pattern that is programmable through register | 
|  | *            XMAC_STATS_TX_XGMII_COLUMN1_PORTn. By default, the pattern is set | 
|  | *            to 4 x /I/ (i.e. a column containing all idle characters), | 
|  | *            thus the statistic tracks the number of transmitted Idle columns. | 
|  | * @tx_any_err_frms: Count of transmitted frames containing any error that | 
|  | *            prevents them from being passed to the network. Increments if | 
|  | *            there is an ECC while reading the frame out of the transmit | 
|  | *            buffer. Also increments if the transmit protocol assist (TPA) | 
|  | *            block determines that the frame should not be sent. | 
|  | * @tx_drop_frms: Count of frames that could not be sent for no other reason | 
|  | *            than internal MAC processing. Increments once whenever the | 
|  | *            transmit buffer is flushed (due to an ECC error on a memory | 
|  | *            descriptor). | 
|  | * @rx_ttl_frms: Count of total received MAC frames, including frames received | 
|  | *            with frame-too-long, FCS, or length errors. This stat can be | 
|  | *            configured (see XMAC_STATS_GLOBAL_CFG.TTL_FRMS_HANDLING) to count | 
|  | *            everything, even "frames" as small one byte of preamble. | 
|  | * @rx_vld_frms: Count of successfully received MAC frames. Does not include | 
|  | *            frames received with frame-too-long, FCS, or length errors. | 
|  | * @rx_offload_frms: Count of offloaded received frames that are passed to | 
|  | *            the host. | 
|  | * @rx_ttl_octets: Count of total octets of received frames, not including | 
|  | *            framing characters (i.e. less framing bits). To determine the | 
|  | *            total octets of received frames, including framing characters, | 
|  | *            multiply PORTn_RX_TTL_FRMS by 8 and add it to this stat (unless | 
|  | *            otherwise configured, this stat only counts frames that have 8 | 
|  | *            bytes of preamble for each frame). This stat can be configured | 
|  | *            (see XMAC_STATS_GLOBAL_CFG.TTL_FRMS_HANDLING) to count everything, | 
|  | *            even the preamble octets of "frames" as small one byte of preamble | 
|  | * @rx_data_octets: Count of data and padding octets of successfully received | 
|  | *            frames. Does not include frames received with frame-too-long, | 
|  | *            FCS, or length errors. | 
|  | * @rx_offload_octets: Count of total octets, not including framing | 
|  | *            characters, of offloaded received frames that are passed | 
|  | *            to the host. | 
|  | * @rx_vld_mcast_frms: Count of successfully received MAC frames containing a | 
|  | *	      nonbroadcast group address. Does not include frames received | 
|  | *            with frame-too-long, FCS, or length errors. | 
|  | * @rx_vld_bcast_frms: Count of successfully received MAC frames containing | 
|  | *            the broadcast group address. Does not include frames received | 
|  | *            with frame-too-long, FCS, or length errors. | 
|  | * @rx_accepted_ucast_frms: Count of successfully received frames containing | 
|  | *            a unicast address. Only includes frames that are passed to | 
|  | *            the system. | 
|  | * @rx_accepted_nucast_frms: Count of successfully received frames containing | 
|  | *            a non-unicast (broadcast or multicast) address. Only includes | 
|  | *            frames that are passed to the system. Could include, for instance, | 
|  | *            non-unicast frames that contain FCS errors if the MAC_ERROR_CFG | 
|  | *            register is set to pass FCS-errored frames to the host. | 
|  | * @rx_tagged_frms: Count of received frames containing a VLAN tag. | 
|  | * @rx_long_frms: Count of received frames that are longer than RX_MAX_PYLD_LEN | 
|  | *            + 18 bytes (+ 22 bytes if VLAN-tagged). | 
|  | * @rx_usized_frms: Count of received frames of length (including FCS, but not | 
|  | *            framing bits) less than 64 octets, that are otherwise well-formed. | 
|  | *            In other words, counts runts. | 
|  | * @rx_osized_frms: Count of received frames of length (including FCS, but not | 
|  | *            framing bits) more than 1518 octets, that are otherwise | 
|  | *            well-formed. Note: If register XMAC_STATS_GLOBAL_CFG.VLAN_HANDLING | 
|  | *            is set to 1, then "more than 1518 octets" becomes "more than 1518 | 
|  | *            (1522 if VLAN-tagged) octets". | 
|  | * @rx_frag_frms: Count of received frames of length (including FCS, but not | 
|  | *            framing bits) less than 64 octets that had bad FCS. In other | 
|  | *            words, counts fragments. | 
|  | * @rx_jabber_frms: Count of received frames of length (including FCS, but not | 
|  | *            framing bits) more than 1518 octets that had bad FCS. In other | 
|  | *            words, counts jabbers. Note: If register | 
|  | *            XMAC_STATS_GLOBAL_CFG.VLAN_HANDLING is set to 1, then "more than | 
|  | *            1518 octets" becomes "more than 1518 (1522 if VLAN-tagged) | 
|  | *            octets". | 
|  | * @rx_ttl_64_frms: Count of total received MAC frames with length (including | 
|  | *            FCS, but not framing bits) of exactly 64 octets. Includes frames | 
|  | *            received with frame-too-long, FCS, or length errors. | 
|  | * @rx_ttl_65_127_frms: Count of total received MAC frames with length | 
|  | *            (including FCS, but not framing bits) of between 65 and 127 | 
|  | *            octets inclusive. Includes frames received with frame-too-long, | 
|  | *            FCS, or length errors. | 
|  | * @rx_ttl_128_255_frms: Count of total received MAC frames with length | 
|  | *            (including FCS, but not framing bits) of between 128 and 255 | 
|  | *            octets inclusive. Includes frames received with frame-too-long, | 
|  | *            FCS, or length errors. | 
|  | * @rx_ttl_256_511_frms: Count of total received MAC frames with length | 
|  | *            (including FCS, but not framing bits) of between 256 and 511 | 
|  | *            octets inclusive. Includes frames received with frame-too-long, | 
|  | *            FCS, or length errors. | 
|  | * @rx_ttl_512_1023_frms: Count of total received MAC frames with length | 
|  | *            (including FCS, but not framing bits) of between 512 and 1023 | 
|  | *            octets inclusive. Includes frames received with frame-too-long, | 
|  | *            FCS, or length errors. | 
|  | * @rx_ttl_1024_1518_frms: Count of total received MAC frames with length | 
|  | *            (including FCS, but not framing bits) of between 1024 and 1518 | 
|  | *            octets inclusive. Includes frames received with frame-too-long, | 
|  | *            FCS, or length errors. | 
|  | * @rx_ttl_1519_4095_frms: Count of total received MAC frames with length | 
|  | *            (including FCS, but not framing bits) of between 1519 and 4095 | 
|  | *            octets inclusive. Includes frames received with frame-too-long, | 
|  | *            FCS, or length errors. | 
|  | * @rx_ttl_4096_8191_frms: Count of total received MAC frames with length | 
|  | *            (including FCS, but not framing bits) of between 4096 and 8191 | 
|  | *            octets inclusive. Includes frames received with frame-too-long, | 
|  | *            FCS, or length errors. | 
|  | * @rx_ttl_8192_max_frms: Count of total received MAC frames with length | 
|  | *            (including FCS, but not framing bits) of between 8192 and | 
|  | *            RX_MAX_PYLD_LEN+18 octets inclusive. Includes frames received | 
|  | *            with frame-too-long, FCS, or length errors. | 
|  | * @rx_ttl_gt_max_frms: Count of total received MAC frames with length | 
|  | *            (including FCS, but not framing bits) exceeding | 
|  | *            RX_MAX_PYLD_LEN+18 (+22 bytes if VLAN-tagged) octets inclusive. | 
|  | *            Includes frames received with frame-too-long, | 
|  | *            FCS, or length errors. | 
|  | * @rx_ip: Count of received IP datagrams. Includes errored IP datagrams. | 
|  | * @rx_accepted_ip: Count of received IP datagrams that | 
|  | * 		are passed to the system. | 
|  | * @rx_ip_octets: Count of number of octets in received IP datagrams. Includes | 
|  | *            errored IP datagrams. | 
|  | * @rx_err_ip: 	Count of received IP datagrams containing errors. For example, | 
|  | *            bad IP checksum. | 
|  | * @rx_icmp: Count of received ICMP messages. Includes errored ICMP messages. | 
|  | * @rx_tcp: Count of received TCP segments. Includes errored TCP segments. | 
|  | *            Note: This stat contains a count of all received TCP segments, | 
|  | *            regardless of whether or not they pertain to an established | 
|  | *            connection. | 
|  | * @rx_udp: Count of received UDP datagrams. | 
|  | * @rx_err_tcp: Count of received TCP segments containing errors. For example, | 
|  | *            bad TCP checksum. | 
|  | * @rx_pause_count: Count of number of pause quanta that the MAC has been in | 
|  | *            the paused state. Recall, one pause quantum equates to 512 | 
|  | *            bit times. | 
|  | * @rx_pause_ctrl_frms: Count of received MAC PAUSE control frames. | 
|  | * @rx_unsup_ctrl_frms: Count of received MAC control frames that do not | 
|  | *            contain the PAUSE opcode. The sum of RX_PAUSE_CTRL_FRMS and | 
|  | *            this register is a count of all received MAC control frames. | 
|  | *            Note: This stat may be configured to count all layer 2 errors | 
|  | *            (i.e. length errors and FCS errors). | 
|  | * @rx_fcs_err_frms: Count of received MAC frames that do not pass FCS. Does | 
|  | *            not include frames received with frame-too-long or | 
|  | *            frame-too-short error. | 
|  | * @rx_in_rng_len_err_frms: Count of received frames with a length/type field | 
|  | *            value between 46 (42 for VLAN-tagged frames) and 1500 (also 1500 | 
|  | *            for VLAN-tagged frames), inclusive, that does not match the | 
|  | *            number of data octets (including pad) received. Also contains | 
|  | *            a count of received frames with a length/type field less than | 
|  | *            46 (42 for VLAN-tagged frames) and the number of data octets | 
|  | *            (including pad) received is greater than 46 (42 for VLAN-tagged | 
|  | *            frames). | 
|  | * @rx_out_rng_len_err_frms:  Count of received frames with length/type field | 
|  | *            between 1501 and 1535 decimal, inclusive. | 
|  | * @rx_drop_frms: Count of received frames that could not be passed to the host. | 
|  | *            See PORTn_RX_L2_MGMT_DISCARD, PORTn_RX_RPA_DISCARD, | 
|  | *            PORTn_RX_TRASH_DISCARD, PORTn_RX_RTS_DISCARD, PORTn_RX_RED_DISCARD | 
|  | *            for a list of reasons. Because the RMAC drops one frame at a time, | 
|  | *            this stat also indicates the number of drop events. | 
|  | * @rx_discarded_frms: Count of received frames containing | 
|  | * 		any error that prevents | 
|  | *            them from being passed to the system. See PORTn_RX_FCS_DISCARD, | 
|  | *            PORTn_RX_LEN_DISCARD, and PORTn_RX_SWITCH_DISCARD for a list of | 
|  | *            reasons. | 
|  | * @rx_drop_ip: Count of received IP datagrams that could not be passed to the | 
|  | *            host. See PORTn_RX_DROP_FRMS for a list of reasons. | 
|  | * @rx_drop_udp: Count of received UDP datagrams that are not delivered to the | 
|  | *            host. See PORTn_RX_DROP_FRMS for a list of reasons. | 
|  | * @rx_marker_pdu_frms: Count of valid Marker PDUs received on this Aggregation | 
|  | *            port. | 
|  | * @rx_lacpdu_frms: Count of valid LACPDUs received on this Aggregation port. | 
|  | * @rx_unknown_pdu_frms: Count of received frames (on this Aggregation port) | 
|  | *            that carry the Slow Protocols EtherType, but contain an unknown | 
|  | *            PDU. Or frames that contain the Slow Protocols group MAC address, | 
|  | *            but do not carry the Slow Protocols EtherType. | 
|  | * @rx_marker_resp_pdu_frms: Count of valid Marker Response PDUs received on | 
|  | *            this Aggregation port. | 
|  | * @rx_fcs_discard: Count of received frames that are discarded because the | 
|  | *            FCS check failed. | 
|  | * @rx_illegal_pdu_frms: Count of received frames (on this Aggregation port) | 
|  | *            that carry the Slow Protocols EtherType, but contain a badly | 
|  | *            formed PDU. Or frames that carry the Slow Protocols EtherType, | 
|  | *            but contain an illegal value of Protocol Subtype. | 
|  | * @rx_switch_discard: Count of received frames that are discarded by the | 
|  | *            internal switch because they did not have an entry in the | 
|  | *            Filtering Database. This includes frames that had an invalid | 
|  | *            destination MAC address or VLAN ID. It also includes frames are | 
|  | *            discarded because they did not satisfy the length requirements | 
|  | *            of the target VPATH. | 
|  | * @rx_len_discard: Count of received frames that are discarded because of an | 
|  | *            invalid frame length (includes fragments, oversized frames and | 
|  | *            mismatch between frame length and length/type field). This stat | 
|  | *            can be configured | 
|  | *            (see XMAC_STATS_GLOBAL_CFG.LEN_DISCARD_HANDLING). | 
|  | * @rx_rpa_discard: Count of received frames that were discarded because the | 
|  | *            receive protocol assist (RPA) discovered and error in the frame | 
|  | *            or was unable to parse the frame. | 
|  | * @rx_l2_mgmt_discard: Count of Layer 2 management frames (eg. pause frames, | 
|  | *            Link Aggregation Control Protocol (LACP) frames, etc.) that are | 
|  | *            discarded. | 
|  | * @rx_rts_discard: Count of received frames that are discarded by the receive | 
|  | *            traffic steering (RTS) logic. Includes those frame discarded | 
|  | *            because the SSC response contradicted the switch table, because | 
|  | *            the SSC timed out, or because the target queue could not fit the | 
|  | *            frame. | 
|  | * @rx_trash_discard: Count of received frames that are discarded because | 
|  | *            receive traffic steering (RTS) steered the frame to the trash | 
|  | *            queue. | 
|  | * @rx_buff_full_discard: Count of received frames that are discarded because | 
|  | *            internal buffers are full. Includes frames discarded because the | 
|  | *            RTS logic is waiting for an SSC lookup that has no timeout bound. | 
|  | *            Also, includes frames that are dropped because the MAC2FAU buffer | 
|  | *            is nearly full -- this can happen if the external receive buffer | 
|  | *            is full and the receive path is backing up. | 
|  | * @rx_red_discard: Count of received frames that are discarded because of RED | 
|  | *            (Random Early Discard). | 
|  | * @rx_xgmii_ctrl_err_cnt: Maintains a count of unexpected or misplaced control | 
|  | *            characters occurring between times of normal data transmission | 
|  | *            (i.e. not included in RX_XGMII_DATA_ERR_CNT). This counter is | 
|  | *            incremented when either - | 
|  | *            1) The Reconciliation Sublayer (RS) is expecting one control | 
|  | *               character and gets another (i.e. is expecting a Start | 
|  | *               character, but gets another control character). | 
|  | *            2) Start control character is not in lane 0 | 
|  | *            Only increments the count by one for each XGMII column. | 
|  | * @rx_xgmii_data_err_cnt: Maintains a count of unexpected control characters | 
|  | *            during normal data transmission. If the Reconciliation Sublayer | 
|  | *            (RS) receives a control character, other than a terminate control | 
|  | *            character, during receipt of data octets then this register is | 
|  | *            incremented. Also increments if the start frame delimiter is not | 
|  | *            found in the correct location. Only increments the count by one | 
|  | *            for each XGMII column. | 
|  | * @rx_xgmii_char1_match: Maintains a count of the number of XGMII characters | 
|  | *            that match a pattern that is programmable through register | 
|  | *            XMAC_STATS_RX_XGMII_CHAR_PORTn. By default, the pattern is set | 
|  | *            to /E/ (i.e. the error character), thus the statistic tracks the | 
|  | *            number of Error characters received at any time. | 
|  | * @rx_xgmii_err_sym: Count of the number of symbol errors in the received | 
|  | *            XGMII data (i.e. PHY indicates "Receive Error" on the XGMII). | 
|  | *            Only includes symbol errors that are observed between the XGMII | 
|  | *            Start Frame Delimiter and End Frame Delimiter, inclusive. And | 
|  | *            only increments the count by one for each frame. | 
|  | * @rx_xgmii_column1_match: Maintains a count of the number of XGMII columns | 
|  | *            that match a pattern that is programmable through register | 
|  | *            XMAC_STATS_RX_XGMII_COLUMN1_PORTn. By default, the pattern is set | 
|  | *            to 4 x /E/ (i.e. a column containing all error characters), thus | 
|  | *            the statistic tracks the number of Error columns received at any | 
|  | *            time. | 
|  | * @rx_xgmii_char2_match: Maintains a count of the number of XGMII characters | 
|  | *            that match a pattern that is programmable through register | 
|  | *            XMAC_STATS_RX_XGMII_CHAR_PORTn. By default, the pattern is set | 
|  | *            to /E/ (i.e. the error character), thus the statistic tracks the | 
|  | *            number of Error characters received at any time. | 
|  | * @rx_local_fault: Maintains a count of the number of times that link | 
|  | *            transitioned from "up" to "down" due to a local fault. | 
|  | * @rx_xgmii_column2_match: Maintains a count of the number of XGMII columns | 
|  | *            that match a pattern that is programmable through register | 
|  | *            XMAC_STATS_RX_XGMII_COLUMN2_PORTn. By default, the pattern is set | 
|  | *            to 4 x /E/ (i.e. a column containing all error characters), thus | 
|  | *            the statistic tracks the number of Error columns received at any | 
|  | *            time. If XMAC_STATS_RX_XGMII_BEHAV_COLUMN2_PORTn.NEAR_COL1 is set | 
|  | *            to 1, then this stat increments when COLUMN2 is found within 'n' | 
|  | *            clocks after COLUMN1. Here, 'n' is defined by | 
|  | *            XMAC_STATS_RX_XGMII_BEHAV_COLUMN2_PORTn.NUM_COL (if 'n' is set to | 
|  | *            0, then it means to search anywhere for COLUMN2). | 
|  | * @rx_jettison: Count of received frames that are jettisoned because internal | 
|  | *            buffers are full. | 
|  | * @rx_remote_fault: Maintains a count of the number of times that link | 
|  | *            transitioned from "up" to "down" due to a remote fault. | 
|  | * | 
|  | * XMAC Port Statistics. | 
|  | */ | 
|  | struct vxge_hw_xmac_port_stats { | 
|  | /*0x000*/		u64	tx_ttl_frms; | 
|  | /*0x008*/		u64	tx_ttl_octets; | 
|  | /*0x010*/		u64	tx_data_octets; | 
|  | /*0x018*/		u64	tx_mcast_frms; | 
|  | /*0x020*/		u64	tx_bcast_frms; | 
|  | /*0x028*/		u64	tx_ucast_frms; | 
|  | /*0x030*/		u64	tx_tagged_frms; | 
|  | /*0x038*/		u64	tx_vld_ip; | 
|  | /*0x040*/		u64	tx_vld_ip_octets; | 
|  | /*0x048*/		u64	tx_icmp; | 
|  | /*0x050*/		u64	tx_tcp; | 
|  | /*0x058*/		u64	tx_rst_tcp; | 
|  | /*0x060*/		u64	tx_udp; | 
|  | /*0x068*/		u32	tx_parse_error; | 
|  | /*0x06c*/		u32	tx_unknown_protocol; | 
|  | /*0x070*/		u64	tx_pause_ctrl_frms; | 
|  | /*0x078*/		u32	tx_marker_pdu_frms; | 
|  | /*0x07c*/		u32	tx_lacpdu_frms; | 
|  | /*0x080*/		u32	tx_drop_ip; | 
|  | /*0x084*/		u32	tx_marker_resp_pdu_frms; | 
|  | /*0x088*/		u32	tx_xgmii_char2_match; | 
|  | /*0x08c*/		u32	tx_xgmii_char1_match; | 
|  | /*0x090*/		u32	tx_xgmii_column2_match; | 
|  | /*0x094*/		u32	tx_xgmii_column1_match; | 
|  | /*0x098*/		u32	unused1; | 
|  | /*0x09c*/		u16	tx_any_err_frms; | 
|  | /*0x09e*/		u16	tx_drop_frms; | 
|  | /*0x0a0*/		u64	rx_ttl_frms; | 
|  | /*0x0a8*/		u64	rx_vld_frms; | 
|  | /*0x0b0*/		u64	rx_offload_frms; | 
|  | /*0x0b8*/		u64	rx_ttl_octets; | 
|  | /*0x0c0*/		u64	rx_data_octets; | 
|  | /*0x0c8*/		u64	rx_offload_octets; | 
|  | /*0x0d0*/		u64	rx_vld_mcast_frms; | 
|  | /*0x0d8*/		u64	rx_vld_bcast_frms; | 
|  | /*0x0e0*/		u64	rx_accepted_ucast_frms; | 
|  | /*0x0e8*/		u64	rx_accepted_nucast_frms; | 
|  | /*0x0f0*/		u64	rx_tagged_frms; | 
|  | /*0x0f8*/		u64	rx_long_frms; | 
|  | /*0x100*/		u64	rx_usized_frms; | 
|  | /*0x108*/		u64	rx_osized_frms; | 
|  | /*0x110*/		u64	rx_frag_frms; | 
|  | /*0x118*/		u64	rx_jabber_frms; | 
|  | /*0x120*/		u64	rx_ttl_64_frms; | 
|  | /*0x128*/		u64	rx_ttl_65_127_frms; | 
|  | /*0x130*/		u64	rx_ttl_128_255_frms; | 
|  | /*0x138*/		u64	rx_ttl_256_511_frms; | 
|  | /*0x140*/		u64	rx_ttl_512_1023_frms; | 
|  | /*0x148*/		u64	rx_ttl_1024_1518_frms; | 
|  | /*0x150*/		u64	rx_ttl_1519_4095_frms; | 
|  | /*0x158*/		u64	rx_ttl_4096_8191_frms; | 
|  | /*0x160*/		u64	rx_ttl_8192_max_frms; | 
|  | /*0x168*/		u64	rx_ttl_gt_max_frms; | 
|  | /*0x170*/		u64	rx_ip; | 
|  | /*0x178*/		u64	rx_accepted_ip; | 
|  | /*0x180*/		u64	rx_ip_octets; | 
|  | /*0x188*/		u64	rx_err_ip; | 
|  | /*0x190*/		u64	rx_icmp; | 
|  | /*0x198*/		u64	rx_tcp; | 
|  | /*0x1a0*/		u64	rx_udp; | 
|  | /*0x1a8*/		u64	rx_err_tcp; | 
|  | /*0x1b0*/		u64	rx_pause_count; | 
|  | /*0x1b8*/		u64	rx_pause_ctrl_frms; | 
|  | /*0x1c0*/		u64	rx_unsup_ctrl_frms; | 
|  | /*0x1c8*/		u64	rx_fcs_err_frms; | 
|  | /*0x1d0*/		u64	rx_in_rng_len_err_frms; | 
|  | /*0x1d8*/		u64	rx_out_rng_len_err_frms; | 
|  | /*0x1e0*/		u64	rx_drop_frms; | 
|  | /*0x1e8*/		u64	rx_discarded_frms; | 
|  | /*0x1f0*/		u64	rx_drop_ip; | 
|  | /*0x1f8*/		u64	rx_drop_udp; | 
|  | /*0x200*/		u32	rx_marker_pdu_frms; | 
|  | /*0x204*/		u32	rx_lacpdu_frms; | 
|  | /*0x208*/		u32	rx_unknown_pdu_frms; | 
|  | /*0x20c*/		u32	rx_marker_resp_pdu_frms; | 
|  | /*0x210*/		u32	rx_fcs_discard; | 
|  | /*0x214*/		u32	rx_illegal_pdu_frms; | 
|  | /*0x218*/		u32	rx_switch_discard; | 
|  | /*0x21c*/		u32	rx_len_discard; | 
|  | /*0x220*/		u32	rx_rpa_discard; | 
|  | /*0x224*/		u32	rx_l2_mgmt_discard; | 
|  | /*0x228*/		u32	rx_rts_discard; | 
|  | /*0x22c*/		u32	rx_trash_discard; | 
|  | /*0x230*/		u32	rx_buff_full_discard; | 
|  | /*0x234*/		u32	rx_red_discard; | 
|  | /*0x238*/		u32	rx_xgmii_ctrl_err_cnt; | 
|  | /*0x23c*/		u32	rx_xgmii_data_err_cnt; | 
|  | /*0x240*/		u32	rx_xgmii_char1_match; | 
|  | /*0x244*/		u32	rx_xgmii_err_sym; | 
|  | /*0x248*/		u32	rx_xgmii_column1_match; | 
|  | /*0x24c*/		u32	rx_xgmii_char2_match; | 
|  | /*0x250*/		u32	rx_local_fault; | 
|  | /*0x254*/		u32	rx_xgmii_column2_match; | 
|  | /*0x258*/		u32	rx_jettison; | 
|  | /*0x25c*/		u32	rx_remote_fault; | 
|  | } __packed; | 
|  |  | 
|  | /** | 
|  | * struct vxge_hw_xmac_vpath_tx_stats - XMAC Vpath Tx Statistics | 
|  | * | 
|  | * @tx_ttl_eth_frms: Count of successfully transmitted MAC frames. | 
|  | * @tx_ttl_eth_octets: Count of total octets of transmitted frames, | 
|  | *             not including framing characters (i.e. less framing bits). | 
|  | *             To determine the total octets of transmitted frames, including | 
|  | *             framing characters, multiply TX_TTL_ETH_FRMS by 8 and add it to | 
|  | *             this stat (the device always prepends 8 bytes of preamble for | 
|  | *             each frame) | 
|  | * @tx_data_octets: Count of data and padding octets of successfully transmitted | 
|  | *             frames. | 
|  | * @tx_mcast_frms: Count of successfully transmitted frames to a group address | 
|  | *             other than the broadcast address. | 
|  | * @tx_bcast_frms: Count of successfully transmitted frames to the broadcast | 
|  | *             group address. | 
|  | * @tx_ucast_frms: Count of transmitted frames containing a unicast address. | 
|  | *             Includes discarded frames that are not sent to the network. | 
|  | * @tx_tagged_frms: Count of transmitted frames containing a VLAN tag. | 
|  | * @tx_vld_ip: Count of transmitted IP datagrams that are passed to the network. | 
|  | * @tx_vld_ip_octets: Count of total octets of transmitted IP datagrams that | 
|  | *            are passed to the network. | 
|  | * @tx_icmp: Count of transmitted ICMP messages. Includes messages not sent due | 
|  | *            to problems within ICMP. | 
|  | * @tx_tcp: Count of transmitted TCP segments. Does not include segments | 
|  | *            containing retransmitted octets. | 
|  | * @tx_rst_tcp: Count of transmitted TCP segments containing the RST flag. | 
|  | * @tx_udp: Count of transmitted UDP datagrams. | 
|  | * @tx_unknown_protocol: Increments when the TPA encounters an unknown protocol, | 
|  | *            such as a new IPv6 extension header, or an unsupported Routing | 
|  | *            Type. The packet still has a checksum calculated but it may be | 
|  | *            incorrect. | 
|  | * @tx_lost_ip: Count of transmitted IP datagrams that could not be passed | 
|  | *            to the network. Increments because of: 1) An internal processing | 
|  | *            error (such as an uncorrectable ECC error). 2) A frame parsing | 
|  | *            error during IP checksum calculation. | 
|  | * @tx_parse_error: Increments when the TPA is unable to parse a packet. This | 
|  | *            generally occurs when a packet is corrupt somehow, including | 
|  | *            packets that have IP version mismatches, invalid Layer 2 control | 
|  | *            fields, etc. L3/L4 checksums are not offloaded, but the packet | 
|  | *            is still be transmitted. | 
|  | * @tx_tcp_offload: For frames belonging to offloaded sessions only, a count | 
|  | *            of transmitted TCP segments. Does not include segments containing | 
|  | *            retransmitted octets. | 
|  | * @tx_retx_tcp_offload: For frames belonging to offloaded sessions only, the | 
|  | *            total number of segments retransmitted. Retransmitted segments | 
|  | *            that are sourced by the host are counted by the host. | 
|  | * @tx_lost_ip_offload: For frames belonging to offloaded sessions only, a count | 
|  | *            of transmitted IP datagrams that could not be passed to the | 
|  | *            network. | 
|  | * | 
|  | * XMAC Vpath TX Statistics. | 
|  | */ | 
|  | struct vxge_hw_xmac_vpath_tx_stats { | 
|  | u64	tx_ttl_eth_frms; | 
|  | u64	tx_ttl_eth_octets; | 
|  | u64	tx_data_octets; | 
|  | u64	tx_mcast_frms; | 
|  | u64	tx_bcast_frms; | 
|  | u64	tx_ucast_frms; | 
|  | u64	tx_tagged_frms; | 
|  | u64	tx_vld_ip; | 
|  | u64	tx_vld_ip_octets; | 
|  | u64	tx_icmp; | 
|  | u64	tx_tcp; | 
|  | u64	tx_rst_tcp; | 
|  | u64	tx_udp; | 
|  | u32	tx_unknown_protocol; | 
|  | u32	tx_lost_ip; | 
|  | u32	unused1; | 
|  | u32	tx_parse_error; | 
|  | u64	tx_tcp_offload; | 
|  | u64	tx_retx_tcp_offload; | 
|  | u64	tx_lost_ip_offload; | 
|  | } __packed; | 
|  |  | 
|  | /** | 
|  | * struct vxge_hw_xmac_vpath_rx_stats - XMAC Vpath RX Statistics | 
|  | * | 
|  | * @rx_ttl_eth_frms: Count of successfully received MAC frames. | 
|  | * @rx_vld_frms: Count of successfully received MAC frames. Does not include | 
|  | *            frames received with frame-too-long, FCS, or length errors. | 
|  | * @rx_offload_frms: Count of offloaded received frames that are passed to | 
|  | *            the host. | 
|  | * @rx_ttl_eth_octets: Count of total octets of received frames, not including | 
|  | *            framing characters (i.e. less framing bits). Only counts octets | 
|  | *            of frames that are at least 14 bytes (18 bytes for VLAN-tagged) | 
|  | *            before FCS. To determine the total octets of received frames, | 
|  | *            including framing characters, multiply RX_TTL_ETH_FRMS by 8 and | 
|  | *            add it to this stat (the stat RX_TTL_ETH_FRMS only counts frames | 
|  | *            that have the required 8 bytes of preamble). | 
|  | * @rx_data_octets: Count of data and padding octets of successfully received | 
|  | *            frames. Does not include frames received with frame-too-long, | 
|  | *            FCS, or length errors. | 
|  | * @rx_offload_octets: Count of total octets, not including framing characters, | 
|  | *            of offloaded received frames that are passed to the host. | 
|  | * @rx_vld_mcast_frms: Count of successfully received MAC frames containing a | 
|  | *            nonbroadcast group address. Does not include frames received with | 
|  | *            frame-too-long, FCS, or length errors. | 
|  | * @rx_vld_bcast_frms: Count of successfully received MAC frames containing the | 
|  | *            broadcast group address. Does not include frames received with | 
|  | *            frame-too-long, FCS, or length errors. | 
|  | * @rx_accepted_ucast_frms: Count of successfully received frames containing | 
|  | *            a unicast address. Only includes frames that are passed to the | 
|  | *            system. | 
|  | * @rx_accepted_nucast_frms: Count of successfully received frames containing | 
|  | *            a non-unicast (broadcast or multicast) address. Only includes | 
|  | *            frames that are passed to the system. Could include, for instance, | 
|  | *            non-unicast frames that contain FCS errors if the MAC_ERROR_CFG | 
|  | *            register is set to pass FCS-errored frames to the host. | 
|  | * @rx_tagged_frms: Count of received frames containing a VLAN tag. | 
|  | * @rx_long_frms: Count of received frames that are longer than RX_MAX_PYLD_LEN | 
|  | *            + 18 bytes (+ 22 bytes if VLAN-tagged). | 
|  | * @rx_usized_frms: Count of received frames of length (including FCS, but not | 
|  | *            framing bits) less than 64 octets, that are otherwise well-formed. | 
|  | *            In other words, counts runts. | 
|  | * @rx_osized_frms: Count of received frames of length (including FCS, but not | 
|  | *            framing bits) more than 1518 octets, that are otherwise | 
|  | *            well-formed. | 
|  | * @rx_frag_frms: Count of received frames of length (including FCS, but not | 
|  | *            framing bits) less than 64 octets that had bad FCS. | 
|  | *            In other words, counts fragments. | 
|  | * @rx_jabber_frms: Count of received frames of length (including FCS, but not | 
|  | *            framing bits) more than 1518 octets that had bad FCS. In other | 
|  | *            words, counts jabbers. | 
|  | * @rx_ttl_64_frms: Count of total received MAC frames with length (including | 
|  | *            FCS, but not framing bits) of exactly 64 octets. Includes frames | 
|  | *            received with frame-too-long, FCS, or length errors. | 
|  | * @rx_ttl_65_127_frms: Count of total received MAC frames | 
|  | * 		with length (including | 
|  | *            FCS, but not framing bits) of between 65 and 127 octets inclusive. | 
|  | *            Includes frames received with frame-too-long, FCS, | 
|  | *            or length errors. | 
|  | * @rx_ttl_128_255_frms: Count of total received MAC frames with length | 
|  | *            (including FCS, but not framing bits) | 
|  | *            of between 128 and 255 octets | 
|  | *            inclusive. Includes frames received with frame-too-long, FCS, | 
|  | *            or length errors. | 
|  | * @rx_ttl_256_511_frms: Count of total received MAC frames with length | 
|  | *            (including FCS, but not framing bits) | 
|  | *            of between 256 and 511 octets | 
|  | *            inclusive. Includes frames received with frame-too-long, FCS, or | 
|  | *            length errors. | 
|  | * @rx_ttl_512_1023_frms: Count of total received MAC frames with length | 
|  | *            (including FCS, but not framing bits) of between 512 and 1023 | 
|  | *            octets inclusive. Includes frames received with frame-too-long, | 
|  | *            FCS, or length errors. | 
|  | * @rx_ttl_1024_1518_frms: Count of total received MAC frames with length | 
|  | *            (including FCS, but not framing bits) of between 1024 and 1518 | 
|  | *            octets inclusive. Includes frames received with frame-too-long, | 
|  | *            FCS, or length errors. | 
|  | * @rx_ttl_1519_4095_frms: Count of total received MAC frames with length | 
|  | *            (including FCS, but not framing bits) of between 1519 and 4095 | 
|  | *            octets inclusive. Includes frames received with frame-too-long, | 
|  | *            FCS, or length errors. | 
|  | * @rx_ttl_4096_8191_frms: Count of total received MAC frames with length | 
|  | *            (including FCS, but not framing bits) of between 4096 and 8191 | 
|  | *            octets inclusive. Includes frames received with frame-too-long, | 
|  | *            FCS, or length errors. | 
|  | * @rx_ttl_8192_max_frms: Count of total received MAC frames with length | 
|  | *            (including FCS, but not framing bits) of between 8192 and | 
|  | *            RX_MAX_PYLD_LEN+18 octets inclusive. Includes frames received | 
|  | *            with frame-too-long, FCS, or length errors. | 
|  | * @rx_ttl_gt_max_frms: Count of total received MAC frames with length | 
|  | *            (including FCS, but not framing bits) exceeding RX_MAX_PYLD_LEN+18 | 
|  | *            (+22 bytes if VLAN-tagged) octets inclusive. Includes frames | 
|  | *            received with frame-too-long, FCS, or length errors. | 
|  | * @rx_ip: Count of received IP datagrams. Includes errored IP datagrams. | 
|  | * @rx_accepted_ip: Count of received IP datagrams that | 
|  | * 		are passed to the system. | 
|  | * @rx_ip_octets: Count of number of octets in received IP datagrams. | 
|  | *            Includes errored IP datagrams. | 
|  | * @rx_err_ip: Count of received IP datagrams containing errors. For example, | 
|  | *            bad IP checksum. | 
|  | * @rx_icmp: Count of received ICMP messages. Includes errored ICMP messages. | 
|  | * @rx_tcp: Count of received TCP segments. Includes errored TCP segments. | 
|  | *             Note: This stat contains a count of all received TCP segments, | 
|  | *             regardless of whether or not they pertain to an established | 
|  | *             connection. | 
|  | * @rx_udp: Count of received UDP datagrams. | 
|  | * @rx_err_tcp: Count of received TCP segments containing errors. For example, | 
|  | *             bad TCP checksum. | 
|  | * @rx_lost_frms: Count of received frames that could not be passed to the host. | 
|  | *             See RX_QUEUE_FULL_DISCARD and RX_RED_DISCARD | 
|  | *             for a list of reasons. | 
|  | * @rx_lost_ip: Count of received IP datagrams that could not be passed to | 
|  | *             the host. See RX_LOST_FRMS for a list of reasons. | 
|  | * @rx_lost_ip_offload: For frames belonging to offloaded sessions only, a count | 
|  | *             of received IP datagrams that could not be passed to the host. | 
|  | *             See RX_LOST_FRMS for a list of reasons. | 
|  | * @rx_various_discard: Count of received frames that are discarded because | 
|  | *             the target receive queue is full. | 
|  | * @rx_sleep_discard: Count of received frames that are discarded because the | 
|  | *            target VPATH is asleep (a Wake-on-LAN magic packet can be used | 
|  | *            to awaken the VPATH). | 
|  | * @rx_red_discard: Count of received frames that are discarded because of RED | 
|  | *            (Random Early Discard). | 
|  | * @rx_queue_full_discard: Count of received frames that are discarded because | 
|  | *             the target receive queue is full. | 
|  | * @rx_mpa_ok_frms: Count of received frames that pass the MPA checks. | 
|  | * | 
|  | * XMAC Vpath RX Statistics. | 
|  | */ | 
|  | struct vxge_hw_xmac_vpath_rx_stats { | 
|  | u64	rx_ttl_eth_frms; | 
|  | u64	rx_vld_frms; | 
|  | u64	rx_offload_frms; | 
|  | u64	rx_ttl_eth_octets; | 
|  | u64	rx_data_octets; | 
|  | u64	rx_offload_octets; | 
|  | u64	rx_vld_mcast_frms; | 
|  | u64	rx_vld_bcast_frms; | 
|  | u64	rx_accepted_ucast_frms; | 
|  | u64	rx_accepted_nucast_frms; | 
|  | u64	rx_tagged_frms; | 
|  | u64	rx_long_frms; | 
|  | u64	rx_usized_frms; | 
|  | u64	rx_osized_frms; | 
|  | u64	rx_frag_frms; | 
|  | u64	rx_jabber_frms; | 
|  | u64	rx_ttl_64_frms; | 
|  | u64	rx_ttl_65_127_frms; | 
|  | u64	rx_ttl_128_255_frms; | 
|  | u64	rx_ttl_256_511_frms; | 
|  | u64	rx_ttl_512_1023_frms; | 
|  | u64	rx_ttl_1024_1518_frms; | 
|  | u64	rx_ttl_1519_4095_frms; | 
|  | u64	rx_ttl_4096_8191_frms; | 
|  | u64	rx_ttl_8192_max_frms; | 
|  | u64	rx_ttl_gt_max_frms; | 
|  | u64	rx_ip; | 
|  | u64	rx_accepted_ip; | 
|  | u64	rx_ip_octets; | 
|  | u64	rx_err_ip; | 
|  | u64	rx_icmp; | 
|  | u64	rx_tcp; | 
|  | u64	rx_udp; | 
|  | u64	rx_err_tcp; | 
|  | u64	rx_lost_frms; | 
|  | u64	rx_lost_ip; | 
|  | u64	rx_lost_ip_offload; | 
|  | u16	rx_various_discard; | 
|  | u16	rx_sleep_discard; | 
|  | u16	rx_red_discard; | 
|  | u16	rx_queue_full_discard; | 
|  | u64	rx_mpa_ok_frms; | 
|  | } __packed; | 
|  |  | 
|  | /** | 
|  | * struct vxge_hw_xmac_stats - XMAC Statistics | 
|  | * | 
|  | * @aggr_stats: Statistics on aggregate port(port 0, port 1) | 
|  | * @port_stats: Staticstics on ports(wire 0, wire 1, lag) | 
|  | * @vpath_tx_stats: Per vpath XMAC TX stats | 
|  | * @vpath_rx_stats: Per vpath XMAC RX stats | 
|  | * | 
|  | * XMAC Statistics. | 
|  | */ | 
|  | struct vxge_hw_xmac_stats { | 
|  | struct vxge_hw_xmac_aggr_stats | 
|  | aggr_stats[VXGE_HW_MAC_MAX_MAC_PORT_ID]; | 
|  | struct vxge_hw_xmac_port_stats | 
|  | port_stats[VXGE_HW_MAC_MAX_MAC_PORT_ID+1]; | 
|  | struct vxge_hw_xmac_vpath_tx_stats | 
|  | vpath_tx_stats[VXGE_HW_MAX_VIRTUAL_PATHS]; | 
|  | struct vxge_hw_xmac_vpath_rx_stats | 
|  | vpath_rx_stats[VXGE_HW_MAX_VIRTUAL_PATHS]; | 
|  | }; | 
|  |  | 
|  | /** | 
|  | * struct vxge_hw_vpath_stats_hw_info - Titan vpath hardware statistics. | 
|  | * @ini_num_mwr_sent: The number of PCI memory writes initiated by the PIC block | 
|  | *             for the given VPATH | 
|  | * @ini_num_mrd_sent: The number of PCI memory reads initiated by the PIC block | 
|  | * @ini_num_cpl_rcvd: The number of PCI read completions received by the | 
|  | *             PIC block | 
|  | * @ini_num_mwr_byte_sent: The number of PCI memory write bytes sent by the PIC | 
|  | *             block to the host | 
|  | * @ini_num_cpl_byte_rcvd: The number of PCI read completion bytes received by | 
|  | *             the PIC block | 
|  | * @wrcrdtarb_xoff: TBD | 
|  | * @rdcrdtarb_xoff: TBD | 
|  | * @vpath_genstats_count0: TBD | 
|  | * @vpath_genstats_count1: TBD | 
|  | * @vpath_genstats_count2: TBD | 
|  | * @vpath_genstats_count3: TBD | 
|  | * @vpath_genstats_count4: TBD | 
|  | * @vpath_gennstats_count5: TBD | 
|  | * @tx_stats: Transmit stats | 
|  | * @rx_stats: Receive stats | 
|  | * @prog_event_vnum1: Programmable statistic. Increments when internal logic | 
|  | *             detects a certain event. See register | 
|  | *             XMAC_STATS_CFG.EVENT_VNUM1_CFG for more information. | 
|  | * @prog_event_vnum0: Programmable statistic. Increments when internal logic | 
|  | *             detects a certain event. See register | 
|  | *             XMAC_STATS_CFG.EVENT_VNUM0_CFG for more information. | 
|  | * @prog_event_vnum3: Programmable statistic. Increments when internal logic | 
|  | *             detects a certain event. See register | 
|  | *             XMAC_STATS_CFG.EVENT_VNUM3_CFG for more information. | 
|  | * @prog_event_vnum2: Programmable statistic. Increments when internal logic | 
|  | *             detects a certain event. See register | 
|  | *             XMAC_STATS_CFG.EVENT_VNUM2_CFG for more information. | 
|  | * @rx_multi_cast_frame_discard: TBD | 
|  | * @rx_frm_transferred: TBD | 
|  | * @rxd_returned: TBD | 
|  | * @rx_mpa_len_fail_frms: Count of received frames | 
|  | * 		that fail the MPA length check | 
|  | * @rx_mpa_mrk_fail_frms: Count of received frames | 
|  | * 		that fail the MPA marker check | 
|  | * @rx_mpa_crc_fail_frms: Count of received frames that fail the MPA CRC check | 
|  | * @rx_permitted_frms: Count of frames that pass through the FAU and on to the | 
|  | *             frame buffer (and subsequently to the host). | 
|  | * @rx_vp_reset_discarded_frms: Count of receive frames that are discarded | 
|  | *             because the VPATH is in reset | 
|  | * @rx_wol_frms: Count of received "magic packet" frames. Stat increments | 
|  | *             whenever the received frame matches the VPATH's Wake-on-LAN | 
|  | *             signature(s) CRC. | 
|  | * @tx_vp_reset_discarded_frms: Count of transmit frames that are discarded | 
|  | *             because the VPATH is in reset. Includes frames that are discarded | 
|  | *             because the current VPIN does not match that VPIN of the frame | 
|  | * | 
|  | * Titan vpath hardware statistics. | 
|  | */ | 
|  | struct vxge_hw_vpath_stats_hw_info { | 
|  | /*0x000*/	u32 ini_num_mwr_sent; | 
|  | /*0x004*/	u32 unused1; | 
|  | /*0x008*/	u32 ini_num_mrd_sent; | 
|  | /*0x00c*/	u32 unused2; | 
|  | /*0x010*/	u32 ini_num_cpl_rcvd; | 
|  | /*0x014*/	u32 unused3; | 
|  | /*0x018*/	u64 ini_num_mwr_byte_sent; | 
|  | /*0x020*/	u64 ini_num_cpl_byte_rcvd; | 
|  | /*0x028*/	u32 wrcrdtarb_xoff; | 
|  | /*0x02c*/	u32 unused4; | 
|  | /*0x030*/	u32 rdcrdtarb_xoff; | 
|  | /*0x034*/	u32 unused5; | 
|  | /*0x038*/	u32 vpath_genstats_count0; | 
|  | /*0x03c*/	u32 vpath_genstats_count1; | 
|  | /*0x040*/	u32 vpath_genstats_count2; | 
|  | /*0x044*/	u32 vpath_genstats_count3; | 
|  | /*0x048*/	u32 vpath_genstats_count4; | 
|  | /*0x04c*/	u32 unused6; | 
|  | /*0x050*/	u32 vpath_genstats_count5; | 
|  | /*0x054*/	u32 unused7; | 
|  | /*0x058*/	struct vxge_hw_xmac_vpath_tx_stats tx_stats; | 
|  | /*0x0e8*/	struct vxge_hw_xmac_vpath_rx_stats rx_stats; | 
|  | /*0x220*/	u64 unused9; | 
|  | /*0x228*/	u32 prog_event_vnum1; | 
|  | /*0x22c*/	u32 prog_event_vnum0; | 
|  | /*0x230*/	u32 prog_event_vnum3; | 
|  | /*0x234*/	u32 prog_event_vnum2; | 
|  | /*0x238*/	u16 rx_multi_cast_frame_discard; | 
|  | /*0x23a*/	u8 unused10[6]; | 
|  | /*0x240*/	u32 rx_frm_transferred; | 
|  | /*0x244*/	u32 unused11; | 
|  | /*0x248*/	u16 rxd_returned; | 
|  | /*0x24a*/	u8 unused12[6]; | 
|  | /*0x252*/	u16 rx_mpa_len_fail_frms; | 
|  | /*0x254*/	u16 rx_mpa_mrk_fail_frms; | 
|  | /*0x256*/	u16 rx_mpa_crc_fail_frms; | 
|  | /*0x258*/	u16 rx_permitted_frms; | 
|  | /*0x25c*/	u64 rx_vp_reset_discarded_frms; | 
|  | /*0x25e*/	u64 rx_wol_frms; | 
|  | /*0x260*/	u64 tx_vp_reset_discarded_frms; | 
|  | } __packed; | 
|  |  | 
|  |  | 
|  | /** | 
|  | * struct vxge_hw_device_stats_mrpcim_info - Titan mrpcim hardware statistics. | 
|  | * @pic.ini_rd_drop  	 0x0000  	 4  	 Number of DMA reads initiated | 
|  | *  by the adapter that were discarded because the VPATH is out of service | 
|  | * @pic.ini_wr_drop 	0x0004 	4 	Number of DMA writes initiated by the | 
|  | *  adapter that were discared because the VPATH is out of service | 
|  | * @pic.wrcrdtarb_ph_crdt_depleted[vplane0] 	0x0008 	4 	Number of times | 
|  | *  the posted header credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_ph_crdt_depleted[vplane1] 	0x0010 	4 	Number of times | 
|  | *  the posted header credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_ph_crdt_depleted[vplane2] 	0x0018 	4 	Number of times | 
|  | *  the posted header credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_ph_crdt_depleted[vplane3] 	0x0020 	4 	Number of times | 
|  | *  the posted header credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_ph_crdt_depleted[vplane4] 	0x0028 	4 	Number of times | 
|  | *  the posted header credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_ph_crdt_depleted[vplane5] 	0x0030 	4 	Number of times | 
|  | *  the posted header credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_ph_crdt_depleted[vplane6] 	0x0038 	4 	Number of times | 
|  | *  the posted header credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_ph_crdt_depleted[vplane7] 	0x0040 	4 	Number of times | 
|  | *  the posted header credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_ph_crdt_depleted[vplane8] 	0x0048 	4 	Number of times | 
|  | *  the posted header credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_ph_crdt_depleted[vplane9] 	0x0050 	4 	Number of times | 
|  | *  the posted header credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_ph_crdt_depleted[vplane10] 	0x0058 	4 	Number of times | 
|  | *  the posted header credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_ph_crdt_depleted[vplane11] 	0x0060 	4 	Number of times | 
|  | *  the posted header credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_ph_crdt_depleted[vplane12] 	0x0068 	4 	Number of times | 
|  | *  the posted header credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_ph_crdt_depleted[vplane13] 	0x0070 	4 	Number of times | 
|  | *  the posted header credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_ph_crdt_depleted[vplane14] 	0x0078 	4 	Number of times | 
|  | *  the posted header credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_ph_crdt_depleted[vplane15] 	0x0080 	4 	Number of times | 
|  | *  the posted header credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_ph_crdt_depleted[vplane16] 	0x0088 	4 	Number of times | 
|  | *  the posted header credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_pd_crdt_depleted[vplane0] 	0x0090 	4 	Number of times | 
|  | *  the posted data credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_pd_crdt_depleted[vplane1] 	0x0098 	4 	Number of times | 
|  | *  the posted data credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_pd_crdt_depleted[vplane2] 	0x00a0 	4 	Number of times | 
|  | *  the posted data credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_pd_crdt_depleted[vplane3] 	0x00a8 	4 	Number of times | 
|  | *  the posted data credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_pd_crdt_depleted[vplane4] 	0x00b0 	4 	Number of times | 
|  | *  the posted data credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_pd_crdt_depleted[vplane5] 	0x00b8 	4 	Number of times | 
|  | *  the posted data credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_pd_crdt_depleted[vplane6] 	0x00c0 	4 	Number of times | 
|  | *  the posted data credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_pd_crdt_depleted[vplane7] 	0x00c8 	4 	Number of times | 
|  | *  the posted data credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_pd_crdt_depleted[vplane8] 	0x00d0 	4 	Number of times | 
|  | *  the posted data credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_pd_crdt_depleted[vplane9] 	0x00d8 	4 	Number of times | 
|  | *  the posted data credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_pd_crdt_depleted[vplane10] 	0x00e0 	4 	Number of times | 
|  | *  the posted data credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_pd_crdt_depleted[vplane11] 	0x00e8 	4 	Number of times | 
|  | *  the posted data credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_pd_crdt_depleted[vplane12] 	0x00f0 	4 	Number of times | 
|  | *  the posted data credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_pd_crdt_depleted[vplane13] 	0x00f8 	4 	Number of times | 
|  | *  the posted data credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_pd_crdt_depleted[vplane14] 	0x0100 	4 	Number of times | 
|  | *  the posted data credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_pd_crdt_depleted[vplane15] 	0x0108 	4 	Number of times | 
|  | *  the posted data credits for upstream PCI writes were depleted | 
|  | * @pic.wrcrdtarb_pd_crdt_depleted[vplane16] 	0x0110 	4 	Number of times | 
|  | *  the posted data credits for upstream PCI writes were depleted | 
|  | * @pic.rdcrdtarb_nph_crdt_depleted[vplane0] 	0x0118 	4 	Number of times | 
|  | *  the non-posted header credits for upstream PCI reads were depleted | 
|  | * @pic.rdcrdtarb_nph_crdt_depleted[vplane1] 	0x0120 	4 	Number of times | 
|  | *  the non-posted header credits for upstream PCI reads were depleted | 
|  | * @pic.rdcrdtarb_nph_crdt_depleted[vplane2] 	0x0128 	4 	Number of times | 
|  | *  the non-posted header credits for upstream PCI reads were depleted | 
|  | * @pic.rdcrdtarb_nph_crdt_depleted[vplane3] 	0x0130 	4 	Number of times | 
|  | *  the non-posted header credits for upstream PCI reads were depleted | 
|  | * @pic.rdcrdtarb_nph_crdt_depleted[vplane4] 	0x0138 	4 	Number of times | 
|  | *  the non-posted header credits for upstream PCI reads were depleted | 
|  | * @pic.rdcrdtarb_nph_crdt_depleted[vplane5] 	0x0140 	4 	Number of times | 
|  | *  the non-posted header credits for upstream PCI reads were depleted | 
|  | * @pic.rdcrdtarb_nph_crdt_depleted[vplane6] 	0x0148 	4 	Number of times | 
|  | *  the non-posted header credits for upstream PCI reads were depleted | 
|  | * @pic.rdcrdtarb_nph_crdt_depleted[vplane7] 	0x0150 	4 	Number of times | 
|  | *  the non-posted header credits for upstream PCI reads were depleted | 
|  | * @pic.rdcrdtarb_nph_crdt_depleted[vplane8] 	0x0158 	4 	Number of times | 
|  | *  the non-posted header credits for upstream PCI reads were depleted | 
|  | * @pic.rdcrdtarb_nph_crdt_depleted[vplane9] 	0x0160 	4 	Number of times | 
|  | *  the non-posted header credits for upstream PCI reads were depleted | 
|  | * @pic.rdcrdtarb_nph_crdt_depleted[vplane10] 	0x0168 	4 	Number of times | 
|  | *  the non-posted header credits for upstream PCI reads were depleted | 
|  | * @pic.rdcrdtarb_nph_crdt_depleted[vplane11] 	0x0170 	4 	Number of times | 
|  | *  the non-posted header credits for upstream PCI reads were depleted | 
|  | * @pic.rdcrdtarb_nph_crdt_depleted[vplane12] 	0x0178 	4 	Number of times | 
|  | *  the non-posted header credits for upstream PCI reads were depleted | 
|  | * @pic.rdcrdtarb_nph_crdt_depleted[vplane13] 	0x0180 	4 	Number of times | 
|  | *  the non-posted header credits for upstream PCI reads were depleted | 
|  | * @pic.rdcrdtarb_nph_crdt_depleted[vplane14] 	0x0188 	4 	Number of times | 
|  | *  the non-posted header credits for upstream PCI reads were depleted | 
|  | * @pic.rdcrdtarb_nph_crdt_depleted[vplane15] 	0x0190 	4 	Number of times | 
|  | *  the non-posted header credits for upstream PCI reads were depleted | 
|  | * @pic.rdcrdtarb_nph_crdt_depleted[vplane16] 	0x0198 	4 	Number of times | 
|  | *  the non-posted header credits for upstream PCI reads were depleted | 
|  | * @pic.ini_rd_vpin_drop 	0x01a0 	4 	Number of DMA reads initiated by | 
|  | *  the adapter that were discarded because the VPATH instance number does | 
|  | *  not match | 
|  | * @pic.ini_wr_vpin_drop 	0x01a4 	4 	Number of DMA writes initiated | 
|  | *  by the adapter that were discarded because the VPATH instance number | 
|  | *  does not match | 
|  | * @pic.genstats_count0 	0x01a8 	4 	Configurable statistic #1. Refer | 
|  | *  to the GENSTATS0_CFG for information on configuring this statistic | 
|  | * @pic.genstats_count1 	0x01ac 	4 	Configurable statistic #2. Refer | 
|  | *  to the GENSTATS1_CFG for information on configuring this statistic | 
|  | * @pic.genstats_count2 	0x01b0 	4 	Configurable statistic #3. Refer | 
|  | *  to the GENSTATS2_CFG for information on configuring this statistic | 
|  | * @pic.genstats_count3 	0x01b4 	4 	Configurable statistic #4. Refer | 
|  | *  to the GENSTATS3_CFG for information on configuring this statistic | 
|  | * @pic.genstats_count4 	0x01b8 	4 	Configurable statistic #5. Refer | 
|  | *  to the GENSTATS4_CFG for information on configuring this statistic | 
|  | * @pic.genstats_count5 	0x01c0 	4 	Configurable statistic #6. Refer | 
|  | *  to the GENSTATS5_CFG for information on configuring this statistic | 
|  | * @pci.rstdrop_cpl 	0x01c8 	4 | 
|  | * @pci.rstdrop_msg 	0x01cc 	4 | 
|  | * @pci.rstdrop_client1 	0x01d0 	4 | 
|  | * @pci.rstdrop_client0 	0x01d4 	4 | 
|  | * @pci.rstdrop_client2 	0x01d8 	4 | 
|  | * @pci.depl_cplh[vplane0] 	0x01e2 	2 	Number of times completion | 
|  | *  header credits were depleted | 
|  | * @pci.depl_nph[vplane0] 	0x01e4 	2 	Number of times non posted | 
|  | *  header credits were depleted | 
|  | * @pci.depl_ph[vplane0] 	0x01e6 	2 	Number of times the posted | 
|  | *  header credits were depleted | 
|  | * @pci.depl_cplh[vplane1] 	0x01ea 	2 | 
|  | * @pci.depl_nph[vplane1] 	0x01ec 	2 | 
|  | * @pci.depl_ph[vplane1] 	0x01ee 	2 | 
|  | * @pci.depl_cplh[vplane2] 	0x01f2 	2 | 
|  | * @pci.depl_nph[vplane2] 	0x01f4 	2 | 
|  | * @pci.depl_ph[vplane2] 	0x01f6 	2 | 
|  | * @pci.depl_cplh[vplane3] 	0x01fa 	2 | 
|  | * @pci.depl_nph[vplane3] 	0x01fc 	2 | 
|  | * @pci.depl_ph[vplane3] 	0x01fe 	2 | 
|  | * @pci.depl_cplh[vplane4] 	0x0202 	2 | 
|  | * @pci.depl_nph[vplane4] 	0x0204 	2 | 
|  | * @pci.depl_ph[vplane4] 	0x0206 	2 | 
|  | * @pci.depl_cplh[vplane5] 	0x020a 	2 | 
|  | * @pci.depl_nph[vplane5] 	0x020c 	2 | 
|  | * @pci.depl_ph[vplane5] 	0x020e 	2 | 
|  | * @pci.depl_cplh[vplane6] 	0x0212 	2 | 
|  | * @pci.depl_nph[vplane6] 	0x0214 	2 | 
|  | * @pci.depl_ph[vplane6] 	0x0216 	2 | 
|  | * @pci.depl_cplh[vplane7] 	0x021a 	2 | 
|  | * @pci.depl_nph[vplane7] 	0x021c 	2 | 
|  | * @pci.depl_ph[vplane7] 	0x021e 	2 | 
|  | * @pci.depl_cplh[vplane8] 	0x0222 	2 | 
|  | * @pci.depl_nph[vplane8] 	0x0224 	2 | 
|  | * @pci.depl_ph[vplane8] 	0x0226 	2 | 
|  | * @pci.depl_cplh[vplane9] 	0x022a 	2 | 
|  | * @pci.depl_nph[vplane9] 	0x022c 	2 | 
|  | * @pci.depl_ph[vplane9] 	0x022e 	2 | 
|  | * @pci.depl_cplh[vplane10] 	0x0232 	2 | 
|  | * @pci.depl_nph[vplane10] 	0x0234 	2 | 
|  | * @pci.depl_ph[vplane10] 	0x0236 	2 | 
|  | * @pci.depl_cplh[vplane11] 	0x023a 	2 | 
|  | * @pci.depl_nph[vplane11] 	0x023c 	2 | 
|  | * @pci.depl_ph[vplane11] 	0x023e 	2 | 
|  | * @pci.depl_cplh[vplane12] 	0x0242 	2 | 
|  | * @pci.depl_nph[vplane12] 	0x0244 	2 | 
|  | * @pci.depl_ph[vplane12] 	0x0246 	2 | 
|  | * @pci.depl_cplh[vplane13] 	0x024a 	2 | 
|  | * @pci.depl_nph[vplane13] 	0x024c 	2 | 
|  | * @pci.depl_ph[vplane13] 	0x024e 	2 | 
|  | * @pci.depl_cplh[vplane14] 	0x0252 	2 | 
|  | * @pci.depl_nph[vplane14] 	0x0254 	2 | 
|  | * @pci.depl_ph[vplane14] 	0x0256 	2 | 
|  | * @pci.depl_cplh[vplane15] 	0x025a 	2 | 
|  | * @pci.depl_nph[vplane15] 	0x025c 	2 | 
|  | * @pci.depl_ph[vplane15] 	0x025e 	2 | 
|  | * @pci.depl_cplh[vplane16] 	0x0262 	2 | 
|  | * @pci.depl_nph[vplane16] 	0x0264 	2 | 
|  | * @pci.depl_ph[vplane16] 	0x0266 	2 | 
|  | * @pci.depl_cpld[vplane0] 	0x026a 	2 	Number of times completion data | 
|  | *  credits were depleted | 
|  | * @pci.depl_npd[vplane0] 	0x026c 	2 	Number of times non posted data | 
|  | *  credits were depleted | 
|  | * @pci.depl_pd[vplane0] 	0x026e 	2 	Number of times the posted data | 
|  | *  credits were depleted | 
|  | * @pci.depl_cpld[vplane1] 	0x0272 	2 | 
|  | * @pci.depl_npd[vplane1] 	0x0274 	2 | 
|  | * @pci.depl_pd[vplane1] 	0x0276 	2 | 
|  | * @pci.depl_cpld[vplane2] 	0x027a 	2 | 
|  | * @pci.depl_npd[vplane2] 	0x027c 	2 | 
|  | * @pci.depl_pd[vplane2] 	0x027e 	2 | 
|  | * @pci.depl_cpld[vplane3] 	0x0282 	2 | 
|  | * @pci.depl_npd[vplane3] 	0x0284 	2 | 
|  | * @pci.depl_pd[vplane3] 	0x0286 	2 | 
|  | * @pci.depl_cpld[vplane4] 	0x028a 	2 | 
|  | * @pci.depl_npd[vplane4] 	0x028c 	2 | 
|  | * @pci.depl_pd[vplane4] 	0x028e 	2 | 
|  | * @pci.depl_cpld[vplane5] 	0x0292 	2 | 
|  | * @pci.depl_npd[vplane5] 	0x0294 	2 | 
|  | * @pci.depl_pd[vplane5] 	0x0296 	2 | 
|  | * @pci.depl_cpld[vplane6] 	0x029a 	2 | 
|  | * @pci.depl_npd[vplane6] 	0x029c 	2 | 
|  | * @pci.depl_pd[vplane6] 	0x029e 	2 | 
|  | * @pci.depl_cpld[vplane7] 	0x02a2 	2 | 
|  | * @pci.depl_npd[vplane7] 	0x02a4 	2 | 
|  | * @pci.depl_pd[vplane7] 	0x02a6 	2 | 
|  | * @pci.depl_cpld[vplane8] 	0x02aa 	2 | 
|  | * @pci.depl_npd[vplane8] 	0x02ac 	2 | 
|  | * @pci.depl_pd[vplane8] 	0x02ae 	2 | 
|  | * @pci.depl_cpld[vplane9] 	0x02b2 	2 | 
|  | * @pci.depl_npd[vplane9] 	0x02b4 	2 | 
|  | * @pci.depl_pd[vplane9] 	0x02b6 	2 | 
|  | * @pci.depl_cpld[vplane10] 	0x02ba 	2 | 
|  | * @pci.depl_npd[vplane10] 	0x02bc 	2 | 
|  | * @pci.depl_pd[vplane10] 	0x02be 	2 | 
|  | * @pci.depl_cpld[vplane11] 	0x02c2 	2 | 
|  | * @pci.depl_npd[vplane11] 	0x02c4 	2 | 
|  | * @pci.depl_pd[vplane11] 	0x02c6 	2 | 
|  | * @pci.depl_cpld[vplane12] 	0x02ca 	2 | 
|  | * @pci.depl_npd[vplane12] 	0x02cc 	2 | 
|  | * @pci.depl_pd[vplane12] 	0x02ce 	2 | 
|  | * @pci.depl_cpld[vplane13] 	0x02d2 	2 | 
|  | * @pci.depl_npd[vplane13] 	0x02d4 	2 | 
|  | * @pci.depl_pd[vplane13] 	0x02d6 	2 | 
|  | * @pci.depl_cpld[vplane14] 	0x02da 	2 | 
|  | * @pci.depl_npd[vplane14] 	0x02dc 	2 | 
|  | * @pci.depl_pd[vplane14] 	0x02de 	2 | 
|  | * @pci.depl_cpld[vplane15] 	0x02e2 	2 | 
|  | * @pci.depl_npd[vplane15] 	0x02e4 	2 | 
|  | * @pci.depl_pd[vplane15] 	0x02e6 	2 | 
|  | * @pci.depl_cpld[vplane16] 	0x02ea 	2 | 
|  | * @pci.depl_npd[vplane16] 	0x02ec 	2 | 
|  | * @pci.depl_pd[vplane16] 	0x02ee 	2 | 
|  | * @xgmac_port[3]; | 
|  | * @xgmac_aggr[2]; | 
|  | * @xgmac.global_prog_event_gnum0 	0x0ae0 	8 	Programmable statistic. | 
|  | *  Increments when internal logic detects a certain event. See register | 
|  | *  XMAC_STATS_GLOBAL_CFG.EVENT_GNUM0_CFG for more information. | 
|  | * @xgmac.global_prog_event_gnum1 	0x0ae8 	8 	Programmable statistic. | 
|  | *  Increments when internal logic detects a certain event. See register | 
|  | *  XMAC_STATS_GLOBAL_CFG.EVENT_GNUM1_CFG for more information. | 
|  | * @xgmac.orp_lro_events 	0x0af8 	8 | 
|  | * @xgmac.orp_bs_events 	0x0b00 	8 | 
|  | * @xgmac.orp_iwarp_events 	0x0b08 	8 | 
|  | * @xgmac.tx_permitted_frms 	0x0b14 	4 | 
|  | * @xgmac.port2_tx_any_frms 	0x0b1d 	1 | 
|  | * @xgmac.port1_tx_any_frms 	0x0b1e 	1 | 
|  | * @xgmac.port0_tx_any_frms 	0x0b1f 	1 | 
|  | * @xgmac.port2_rx_any_frms 	0x0b25 	1 | 
|  | * @xgmac.port1_rx_any_frms 	0x0b26 	1 | 
|  | * @xgmac.port0_rx_any_frms 	0x0b27 	1 | 
|  | * | 
|  | * Titan mrpcim hardware statistics. | 
|  | */ | 
|  | struct vxge_hw_device_stats_mrpcim_info { | 
|  | /*0x0000*/	u32	pic_ini_rd_drop; | 
|  | /*0x0004*/	u32	pic_ini_wr_drop; | 
|  | /*0x0008*/	struct { | 
|  | /*0x0000*/	u32	pic_wrcrdtarb_ph_crdt_depleted; | 
|  | /*0x0004*/	u32	unused1; | 
|  | } pic_wrcrdtarb_ph_crdt_depleted_vplane[17]; | 
|  | /*0x0090*/	struct { | 
|  | /*0x0000*/	u32	pic_wrcrdtarb_pd_crdt_depleted; | 
|  | /*0x0004*/	u32	unused2; | 
|  | } pic_wrcrdtarb_pd_crdt_depleted_vplane[17]; | 
|  | /*0x0118*/	struct { | 
|  | /*0x0000*/	u32	pic_rdcrdtarb_nph_crdt_depleted; | 
|  | /*0x0004*/	u32	unused3; | 
|  | } pic_rdcrdtarb_nph_crdt_depleted_vplane[17]; | 
|  | /*0x01a0*/	u32	pic_ini_rd_vpin_drop; | 
|  | /*0x01a4*/	u32	pic_ini_wr_vpin_drop; | 
|  | /*0x01a8*/	u32	pic_genstats_count0; | 
|  | /*0x01ac*/	u32	pic_genstats_count1; | 
|  | /*0x01b0*/	u32	pic_genstats_count2; | 
|  | /*0x01b4*/	u32	pic_genstats_count3; | 
|  | /*0x01b8*/	u32	pic_genstats_count4; | 
|  | /*0x01bc*/	u32	unused4; | 
|  | /*0x01c0*/	u32	pic_genstats_count5; | 
|  | /*0x01c4*/	u32	unused5; | 
|  | /*0x01c8*/	u32	pci_rstdrop_cpl; | 
|  | /*0x01cc*/	u32	pci_rstdrop_msg; | 
|  | /*0x01d0*/	u32	pci_rstdrop_client1; | 
|  | /*0x01d4*/	u32	pci_rstdrop_client0; | 
|  | /*0x01d8*/	u32	pci_rstdrop_client2; | 
|  | /*0x01dc*/	u32	unused6; | 
|  | /*0x01e0*/	struct { | 
|  | /*0x0000*/	u16	unused7; | 
|  | /*0x0002*/	u16	pci_depl_cplh; | 
|  | /*0x0004*/	u16	pci_depl_nph; | 
|  | /*0x0006*/	u16	pci_depl_ph; | 
|  | } pci_depl_h_vplane[17]; | 
|  | /*0x0268*/	struct { | 
|  | /*0x0000*/	u16	unused8; | 
|  | /*0x0002*/	u16	pci_depl_cpld; | 
|  | /*0x0004*/	u16	pci_depl_npd; | 
|  | /*0x0006*/	u16	pci_depl_pd; | 
|  | } pci_depl_d_vplane[17]; | 
|  | /*0x02f0*/	struct vxge_hw_xmac_port_stats xgmac_port[3]; | 
|  | /*0x0a10*/	struct vxge_hw_xmac_aggr_stats xgmac_aggr[2]; | 
|  | /*0x0ae0*/	u64	xgmac_global_prog_event_gnum0; | 
|  | /*0x0ae8*/	u64	xgmac_global_prog_event_gnum1; | 
|  | /*0x0af0*/	u64	unused7; | 
|  | /*0x0af8*/	u64	unused8; | 
|  | /*0x0b00*/	u64	unused9; | 
|  | /*0x0b08*/	u64	unused10; | 
|  | /*0x0b10*/	u32	unused11; | 
|  | /*0x0b14*/	u32	xgmac_tx_permitted_frms; | 
|  | /*0x0b18*/	u32	unused12; | 
|  | /*0x0b1c*/	u8	unused13; | 
|  | /*0x0b1d*/	u8	xgmac_port2_tx_any_frms; | 
|  | /*0x0b1e*/	u8	xgmac_port1_tx_any_frms; | 
|  | /*0x0b1f*/	u8	xgmac_port0_tx_any_frms; | 
|  | /*0x0b20*/	u32	unused14; | 
|  | /*0x0b24*/	u8	unused15; | 
|  | /*0x0b25*/	u8	xgmac_port2_rx_any_frms; | 
|  | /*0x0b26*/	u8	xgmac_port1_rx_any_frms; | 
|  | /*0x0b27*/	u8	xgmac_port0_rx_any_frms; | 
|  | } __packed; | 
|  |  | 
|  | /** | 
|  | * struct vxge_hw_device_stats_hw_info - Titan hardware statistics. | 
|  | * @vpath_info: VPath statistics | 
|  | * @vpath_info_sav: Vpath statistics saved | 
|  | * | 
|  | * Titan hardware statistics. | 
|  | */ | 
|  | struct vxge_hw_device_stats_hw_info { | 
|  | struct vxge_hw_vpath_stats_hw_info | 
|  | *vpath_info[VXGE_HW_MAX_VIRTUAL_PATHS]; | 
|  | struct vxge_hw_vpath_stats_hw_info | 
|  | vpath_info_sav[VXGE_HW_MAX_VIRTUAL_PATHS]; | 
|  | }; | 
|  |  | 
|  | /** | 
|  | * struct vxge_hw_vpath_stats_sw_common_info - HW common | 
|  | * statistics for queues. | 
|  | * @full_cnt: Number of times the queue was full | 
|  | * @usage_cnt: usage count. | 
|  | * @usage_max: Maximum usage | 
|  | * @reserve_free_swaps_cnt: Reserve/free swap counter. Internal usage. | 
|  | * @total_compl_cnt: Total descriptor completion count. | 
|  | * | 
|  | * Hw queue counters | 
|  | * See also: struct vxge_hw_vpath_stats_sw_fifo_info{}, | 
|  | * struct vxge_hw_vpath_stats_sw_ring_info{}, | 
|  | */ | 
|  | struct vxge_hw_vpath_stats_sw_common_info { | 
|  | u32	full_cnt; | 
|  | u32	usage_cnt; | 
|  | u32	usage_max; | 
|  | u32	reserve_free_swaps_cnt; | 
|  | u32 total_compl_cnt; | 
|  | }; | 
|  |  | 
|  | /** | 
|  | * struct vxge_hw_vpath_stats_sw_fifo_info - HW fifo statistics | 
|  | * @common_stats: Common counters for all queues | 
|  | * @total_posts: Total number of postings on the queue. | 
|  | * @total_buffers: Total number of buffers posted. | 
|  | * @txd_t_code_err_cnt: Array of transmit transfer codes. The position | 
|  | * (index) in this array reflects the transfer code type, for instance | 
|  | * 0xA - "loss of link". | 
|  | * Value txd_t_code_err_cnt[i] reflects the | 
|  | * number of times the corresponding transfer code was encountered. | 
|  | * | 
|  | * HW fifo counters | 
|  | * See also: struct vxge_hw_vpath_stats_sw_common_info{}, | 
|  | * struct vxge_hw_vpath_stats_sw_ring_info{}, | 
|  | */ | 
|  | struct vxge_hw_vpath_stats_sw_fifo_info { | 
|  | struct vxge_hw_vpath_stats_sw_common_info common_stats; | 
|  | u32 total_posts; | 
|  | u32 total_buffers; | 
|  | u32 txd_t_code_err_cnt[VXGE_HW_DTR_MAX_T_CODE]; | 
|  | }; | 
|  |  | 
|  | /** | 
|  | * struct vxge_hw_vpath_stats_sw_ring_info - HW ring statistics | 
|  | * @common_stats: Common counters for all queues | 
|  | * @rxd_t_code_err_cnt: Array of receive transfer codes. The position | 
|  | *             (index) in this array reflects the transfer code type, | 
|  | *             for instance | 
|  | *             0x7 - for "invalid receive buffer size", or 0x8 - for ECC. | 
|  | *             Value rxd_t_code_err_cnt[i] reflects the | 
|  | *             number of times the corresponding transfer code was encountered. | 
|  | * | 
|  | * HW ring counters | 
|  | * See also: struct vxge_hw_vpath_stats_sw_common_info{}, | 
|  | * struct vxge_hw_vpath_stats_sw_fifo_info{}, | 
|  | */ | 
|  | struct vxge_hw_vpath_stats_sw_ring_info { | 
|  | struct vxge_hw_vpath_stats_sw_common_info common_stats; | 
|  | u32 rxd_t_code_err_cnt[VXGE_HW_DTR_MAX_T_CODE]; | 
|  |  | 
|  | }; | 
|  |  | 
|  | /** | 
|  | * struct vxge_hw_vpath_stats_sw_err - HW vpath error statistics | 
|  | * @unknown_alarms: | 
|  | * @network_sustained_fault: | 
|  | * @network_sustained_ok: | 
|  | * @kdfcctl_fifo0_overwrite: | 
|  | * @kdfcctl_fifo0_poison: | 
|  | * @kdfcctl_fifo0_dma_error: | 
|  | * @dblgen_fifo0_overflow: | 
|  | * @statsb_pif_chain_error: | 
|  | * @statsb_drop_timeout: | 
|  | * @target_illegal_access: | 
|  | * @ini_serr_det: | 
|  | * @prc_ring_bumps: | 
|  | * @prc_rxdcm_sc_err: | 
|  | * @prc_rxdcm_sc_abort: | 
|  | * @prc_quanta_size_err: | 
|  | * | 
|  | * HW vpath error statistics | 
|  | */ | 
|  | struct vxge_hw_vpath_stats_sw_err { | 
|  | u32	unknown_alarms; | 
|  | u32	network_sustained_fault; | 
|  | u32	network_sustained_ok; | 
|  | u32	kdfcctl_fifo0_overwrite; | 
|  | u32	kdfcctl_fifo0_poison; | 
|  | u32	kdfcctl_fifo0_dma_error; | 
|  | u32	dblgen_fifo0_overflow; | 
|  | u32	statsb_pif_chain_error; | 
|  | u32	statsb_drop_timeout; | 
|  | u32	target_illegal_access; | 
|  | u32	ini_serr_det; | 
|  | u32	prc_ring_bumps; | 
|  | u32	prc_rxdcm_sc_err; | 
|  | u32	prc_rxdcm_sc_abort; | 
|  | u32	prc_quanta_size_err; | 
|  | }; | 
|  |  | 
|  | /** | 
|  | * struct vxge_hw_vpath_stats_sw_info - HW vpath sw statistics | 
|  | * @soft_reset_cnt: Number of times soft reset is done on this vpath. | 
|  | * @error_stats: error counters for the vpath | 
|  | * @ring_stats: counters for ring belonging to the vpath | 
|  | * @fifo_stats: counters for fifo belonging to the vpath | 
|  | * | 
|  | * HW vpath sw statistics | 
|  | * See also: struct vxge_hw_device_info{} }. | 
|  | */ | 
|  | struct vxge_hw_vpath_stats_sw_info { | 
|  | u32    soft_reset_cnt; | 
|  | struct vxge_hw_vpath_stats_sw_err	error_stats; | 
|  | struct vxge_hw_vpath_stats_sw_ring_info	ring_stats; | 
|  | struct vxge_hw_vpath_stats_sw_fifo_info	fifo_stats; | 
|  | }; | 
|  |  | 
|  | /** | 
|  | * struct vxge_hw_device_stats_sw_info - HW own per-device statistics. | 
|  | * | 
|  | * @not_traffic_intr_cnt: Number of times the host was interrupted | 
|  | *                        without new completions. | 
|  | *                        "Non-traffic interrupt counter". | 
|  | * @traffic_intr_cnt: Number of traffic interrupts for the device. | 
|  | * @total_intr_cnt: Total number of traffic interrupts for the device. | 
|  | *                  @total_intr_cnt == @traffic_intr_cnt + | 
|  | *                              @not_traffic_intr_cnt | 
|  | * @soft_reset_cnt: Number of times soft reset is done on this device. | 
|  | * @vpath_info: please see struct vxge_hw_vpath_stats_sw_info{} | 
|  | * HW per-device statistics. | 
|  | */ | 
|  | struct vxge_hw_device_stats_sw_info { | 
|  | u32	not_traffic_intr_cnt; | 
|  | u32	traffic_intr_cnt; | 
|  | u32	total_intr_cnt; | 
|  | u32	soft_reset_cnt; | 
|  | struct vxge_hw_vpath_stats_sw_info | 
|  | vpath_info[VXGE_HW_MAX_VIRTUAL_PATHS]; | 
|  | }; | 
|  |  | 
|  | /** | 
|  | * struct vxge_hw_device_stats_sw_err - HW device error statistics. | 
|  | * @vpath_alarms: Number of vpath alarms | 
|  | * | 
|  | * HW Device error stats | 
|  | */ | 
|  | struct vxge_hw_device_stats_sw_err { | 
|  | u32     vpath_alarms; | 
|  | }; | 
|  |  | 
|  | /** | 
|  | * struct vxge_hw_device_stats - Contains HW per-device statistics, | 
|  | * including hw. | 
|  | * @devh: HW device handle. | 
|  | * @dma_addr: DMA address of the %hw_info. Given to device to fill-in the stats. | 
|  | * @hw_info_dmah: DMA handle used to map hw statistics onto the device memory | 
|  | *                space. | 
|  | * @hw_info_dma_acch: One more DMA handle used subsequently to free the | 
|  | *                    DMA object. Note that this and the previous handle have | 
|  | *                    physical meaning for Solaris; on Windows and Linux the | 
|  | *                    corresponding value will be simply pointer to PCI device. | 
|  | * | 
|  | * @hw_dev_info_stats: Titan statistics maintained by the hardware. | 
|  | * @sw_dev_info_stats: HW's "soft" device informational statistics, e.g. number | 
|  | *                     of completions per interrupt. | 
|  | * @sw_dev_err_stats: HW's "soft" device error statistics. | 
|  | * | 
|  | * Structure-container of HW per-device statistics. Note that per-channel | 
|  | * statistics are kept in separate structures under HW's fifo and ring | 
|  | * channels. | 
|  | */ | 
|  | struct vxge_hw_device_stats { | 
|  | /* handles */ | 
|  | struct __vxge_hw_device *devh; | 
|  |  | 
|  | /* HW device hardware statistics */ | 
|  | struct vxge_hw_device_stats_hw_info	hw_dev_info_stats; | 
|  |  | 
|  | /* HW device "soft" stats */ | 
|  | struct vxge_hw_device_stats_sw_err   sw_dev_err_stats; | 
|  | struct vxge_hw_device_stats_sw_info  sw_dev_info_stats; | 
|  |  | 
|  | }; | 
|  |  | 
|  | enum vxge_hw_status vxge_hw_device_hw_stats_enable( | 
|  | struct __vxge_hw_device *devh); | 
|  |  | 
|  | enum vxge_hw_status vxge_hw_device_stats_get( | 
|  | struct __vxge_hw_device *devh, | 
|  | struct vxge_hw_device_stats_hw_info *hw_stats); | 
|  |  | 
|  | enum vxge_hw_status vxge_hw_driver_stats_get( | 
|  | struct __vxge_hw_device *devh, | 
|  | struct vxge_hw_device_stats_sw_info *sw_stats); | 
|  |  | 
|  | enum vxge_hw_status vxge_hw_mrpcim_stats_enable(struct __vxge_hw_device *devh); | 
|  |  | 
|  | enum vxge_hw_status vxge_hw_mrpcim_stats_disable(struct __vxge_hw_device *devh); | 
|  |  | 
|  | enum vxge_hw_status | 
|  | vxge_hw_mrpcim_stats_access( | 
|  | struct __vxge_hw_device *devh, | 
|  | u32 operation, | 
|  | u32 location, | 
|  | u32 offset, | 
|  | u64 *stat); | 
|  |  | 
|  | enum vxge_hw_status | 
|  | vxge_hw_device_xmac_stats_get(struct __vxge_hw_device *devh, | 
|  | struct vxge_hw_xmac_stats *xmac_stats); | 
|  |  | 
|  | /** | 
|  | * enum enum vxge_hw_mgmt_reg_type - Register types. | 
|  | * | 
|  | * @vxge_hw_mgmt_reg_type_legacy: Legacy registers | 
|  | * @vxge_hw_mgmt_reg_type_toc: TOC Registers | 
|  | * @vxge_hw_mgmt_reg_type_common: Common Registers | 
|  | * @vxge_hw_mgmt_reg_type_mrpcim: mrpcim registers | 
|  | * @vxge_hw_mgmt_reg_type_srpcim: srpcim registers | 
|  | * @vxge_hw_mgmt_reg_type_vpmgmt: vpath management registers | 
|  | * @vxge_hw_mgmt_reg_type_vpath: vpath registers | 
|  | * | 
|  | * Register type enumaration | 
|  | */ | 
|  | enum vxge_hw_mgmt_reg_type { | 
|  | vxge_hw_mgmt_reg_type_legacy = 0, | 
|  | vxge_hw_mgmt_reg_type_toc = 1, | 
|  | vxge_hw_mgmt_reg_type_common = 2, | 
|  | vxge_hw_mgmt_reg_type_mrpcim = 3, | 
|  | vxge_hw_mgmt_reg_type_srpcim = 4, | 
|  | vxge_hw_mgmt_reg_type_vpmgmt = 5, | 
|  | vxge_hw_mgmt_reg_type_vpath = 6 | 
|  | }; | 
|  |  | 
|  | enum vxge_hw_status | 
|  | vxge_hw_mgmt_reg_read(struct __vxge_hw_device *devh, | 
|  | enum vxge_hw_mgmt_reg_type type, | 
|  | u32 index, | 
|  | u32 offset, | 
|  | u64 *value); | 
|  |  | 
|  | enum vxge_hw_status | 
|  | vxge_hw_mgmt_reg_write(struct __vxge_hw_device *devh, | 
|  | enum vxge_hw_mgmt_reg_type type, | 
|  | u32 index, | 
|  | u32 offset, | 
|  | u64 value); | 
|  |  | 
|  | /** | 
|  | * enum enum vxge_hw_rxd_state - Descriptor (RXD) state. | 
|  | * @VXGE_HW_RXD_STATE_NONE: Invalid state. | 
|  | * @VXGE_HW_RXD_STATE_AVAIL: Descriptor is available for reservation. | 
|  | * @VXGE_HW_RXD_STATE_POSTED: Descriptor is posted for processing by the | 
|  | * device. | 
|  | * @VXGE_HW_RXD_STATE_FREED: Descriptor is free and can be reused for | 
|  | * filling-in and posting later. | 
|  | * | 
|  | * Titan/HW descriptor states. | 
|  | * | 
|  | */ | 
|  | enum vxge_hw_rxd_state { | 
|  | VXGE_HW_RXD_STATE_NONE		= 0, | 
|  | VXGE_HW_RXD_STATE_AVAIL		= 1, | 
|  | VXGE_HW_RXD_STATE_POSTED	= 2, | 
|  | VXGE_HW_RXD_STATE_FREED		= 3 | 
|  | }; | 
|  |  | 
|  | /** | 
|  | * struct vxge_hw_ring_rxd_info - Extended information associated with a | 
|  | * completed ring descriptor. | 
|  | * @syn_flag: SYN flag | 
|  | * @is_icmp: Is ICMP | 
|  | * @fast_path_eligible: Fast Path Eligible flag | 
|  | * @l3_cksum: in L3 checksum is valid | 
|  | * @l3_cksum: Result of IP checksum check (by Titan hardware). | 
|  | *            This field containing VXGE_HW_L3_CKSUM_OK would mean that | 
|  | *            the checksum is correct, otherwise - the datagram is | 
|  | *            corrupted. | 
|  | * @l4_cksum: in L4 checksum is valid | 
|  | * @l4_cksum: Result of TCP/UDP checksum check (by Titan hardware). | 
|  | *            This field containing VXGE_HW_L4_CKSUM_OK would mean that | 
|  | *            the checksum is correct. Otherwise - the packet is | 
|  | *            corrupted. | 
|  | * @frame: Zero or more of enum vxge_hw_frame_type flags. | 
|  | * 		See enum vxge_hw_frame_type{}. | 
|  | * @proto: zero or more of enum vxge_hw_frame_proto flags.  Reporting bits for | 
|  | *            various higher-layer protocols, including (but note restricted to) | 
|  | *            TCP and UDP. See enum vxge_hw_frame_proto{}. | 
|  | * @is_vlan: If vlan tag is valid | 
|  | * @vlan: VLAN tag extracted from the received frame. | 
|  | * @rth_bucket: RTH bucket | 
|  | * @rth_it_hit: Set, If RTH hash value calculated by the Titan hardware | 
|  | *             has a matching entry in the Indirection table. | 
|  | * @rth_spdm_hit: Set, If RTH hash value calculated by the Titan hardware | 
|  | *             has a matching entry in the Socket Pair Direct Match table. | 
|  | * @rth_hash_type: RTH hash code of the function used to calculate the hash. | 
|  | * @rth_value: Receive Traffic Hashing(RTH) hash value. Produced by Titan | 
|  | *             hardware if RTH is enabled. | 
|  | */ | 
|  | struct vxge_hw_ring_rxd_info { | 
|  | u32	syn_flag; | 
|  | u32	is_icmp; | 
|  | u32	fast_path_eligible; | 
|  | u32	l3_cksum_valid; | 
|  | u32	l3_cksum; | 
|  | u32	l4_cksum_valid; | 
|  | u32	l4_cksum; | 
|  | u32	frame; | 
|  | u32	proto; | 
|  | u32	is_vlan; | 
|  | u32	vlan; | 
|  | u32	rth_bucket; | 
|  | u32	rth_it_hit; | 
|  | u32	rth_spdm_hit; | 
|  | u32	rth_hash_type; | 
|  | u32	rth_value; | 
|  | }; | 
|  | /** | 
|  | * enum vxge_hw_ring_tcode - Transfer codes returned by adapter | 
|  | * @VXGE_HW_RING_T_CODE_OK: Transfer ok. | 
|  | * @VXGE_HW_RING_T_CODE_L3_CKSUM_MISMATCH: Layer 3 checksum presentation | 
|  | *		configuration mismatch. | 
|  | * @VXGE_HW_RING_T_CODE_L4_CKSUM_MISMATCH: Layer 4 checksum presentation | 
|  | *		configuration mismatch. | 
|  | * @VXGE_HW_RING_T_CODE_L3_L4_CKSUM_MISMATCH: Layer 3 and Layer 4 checksum | 
|  | *		presentation configuration mismatch. | 
|  | * @VXGE_HW_RING_T_CODE_L3_PKT_ERR: Layer 3 error unparseable packet, | 
|  | *		such as unknown IPv6 header. | 
|  | * @VXGE_HW_RING_T_CODE_L2_FRM_ERR: Layer 2 error frame integrity | 
|  | *		error, such as FCS or ECC). | 
|  | * @VXGE_HW_RING_T_CODE_BUF_SIZE_ERR: Buffer size error the RxD buffer( | 
|  | *		s) were not appropriately sized and data loss occurred. | 
|  | * @VXGE_HW_RING_T_CODE_INT_ECC_ERR: Internal ECC error RxD corrupted. | 
|  | * @VXGE_HW_RING_T_CODE_BENIGN_OVFLOW: Benign overflow the contents of | 
|  | *		Segment1 exceeded the capacity of Buffer1 and the remainder | 
|  | *		was placed in Buffer2. Segment2 now starts in Buffer3. | 
|  | *		No data loss or errors occurred. | 
|  | * @VXGE_HW_RING_T_CODE_ZERO_LEN_BUFF: Buffer size 0 one of the RxDs | 
|  | *		assigned buffers has a size of 0 bytes. | 
|  | * @VXGE_HW_RING_T_CODE_FRM_DROP: Frame dropped either due to | 
|  | *		VPath Reset or because of a VPIN mismatch. | 
|  | * @VXGE_HW_RING_T_CODE_UNUSED: Unused | 
|  | * @VXGE_HW_RING_T_CODE_MULTI_ERR: Multiple errors more than one | 
|  | *		transfer code condition occurred. | 
|  | * | 
|  | * Transfer codes returned by adapter. | 
|  | */ | 
|  | enum vxge_hw_ring_tcode { | 
|  | VXGE_HW_RING_T_CODE_OK				= 0x0, | 
|  | VXGE_HW_RING_T_CODE_L3_CKSUM_MISMATCH		= 0x1, | 
|  | VXGE_HW_RING_T_CODE_L4_CKSUM_MISMATCH		= 0x2, | 
|  | VXGE_HW_RING_T_CODE_L3_L4_CKSUM_MISMATCH	= 0x3, | 
|  | VXGE_HW_RING_T_CODE_L3_PKT_ERR			= 0x5, | 
|  | VXGE_HW_RING_T_CODE_L2_FRM_ERR			= 0x6, | 
|  | VXGE_HW_RING_T_CODE_BUF_SIZE_ERR		= 0x7, | 
|  | VXGE_HW_RING_T_CODE_INT_ECC_ERR			= 0x8, | 
|  | VXGE_HW_RING_T_CODE_BENIGN_OVFLOW		= 0x9, | 
|  | VXGE_HW_RING_T_CODE_ZERO_LEN_BUFF		= 0xA, | 
|  | VXGE_HW_RING_T_CODE_FRM_DROP			= 0xC, | 
|  | VXGE_HW_RING_T_CODE_UNUSED			= 0xE, | 
|  | VXGE_HW_RING_T_CODE_MULTI_ERR			= 0xF | 
|  | }; | 
|  |  | 
|  | enum vxge_hw_status vxge_hw_ring_rxd_reserve( | 
|  | struct __vxge_hw_ring *ring_handle, | 
|  | void **rxdh); | 
|  |  | 
|  | void | 
|  | vxge_hw_ring_rxd_pre_post( | 
|  | struct __vxge_hw_ring *ring_handle, | 
|  | void *rxdh); | 
|  |  | 
|  | void | 
|  | vxge_hw_ring_rxd_post_post( | 
|  | struct __vxge_hw_ring *ring_handle, | 
|  | void *rxdh); | 
|  |  | 
|  | enum vxge_hw_status | 
|  | vxge_hw_ring_replenish(struct __vxge_hw_ring *ring_handle); | 
|  |  | 
|  | void | 
|  | vxge_hw_ring_rxd_post_post_wmb( | 
|  | struct __vxge_hw_ring *ring_handle, | 
|  | void *rxdh); | 
|  |  | 
|  | void vxge_hw_ring_rxd_post( | 
|  | struct __vxge_hw_ring *ring_handle, | 
|  | void *rxdh); | 
|  |  | 
|  | enum vxge_hw_status vxge_hw_ring_rxd_next_completed( | 
|  | struct __vxge_hw_ring *ring_handle, | 
|  | void **rxdh, | 
|  | u8 *t_code); | 
|  |  | 
|  | enum vxge_hw_status vxge_hw_ring_handle_tcode( | 
|  | struct __vxge_hw_ring *ring_handle, | 
|  | void *rxdh, | 
|  | u8 t_code); | 
|  |  | 
|  | void vxge_hw_ring_rxd_free( | 
|  | struct __vxge_hw_ring *ring_handle, | 
|  | void *rxdh); | 
|  |  | 
|  | /** | 
|  | * enum enum vxge_hw_frame_proto - Higher-layer ethernet protocols. | 
|  | * @VXGE_HW_FRAME_PROTO_VLAN_TAGGED: VLAN. | 
|  | * @VXGE_HW_FRAME_PROTO_IPV4: IPv4. | 
|  | * @VXGE_HW_FRAME_PROTO_IPV6: IPv6. | 
|  | * @VXGE_HW_FRAME_PROTO_IP_FRAG: IP fragmented. | 
|  | * @VXGE_HW_FRAME_PROTO_TCP: TCP. | 
|  | * @VXGE_HW_FRAME_PROTO_UDP: UDP. | 
|  | * @VXGE_HW_FRAME_PROTO_TCP_OR_UDP: TCP or UDP. | 
|  | * | 
|  | * Higher layer ethernet protocols and options. | 
|  | */ | 
|  | enum vxge_hw_frame_proto { | 
|  | VXGE_HW_FRAME_PROTO_VLAN_TAGGED = 0x80, | 
|  | VXGE_HW_FRAME_PROTO_IPV4		= 0x10, | 
|  | VXGE_HW_FRAME_PROTO_IPV6		= 0x08, | 
|  | VXGE_HW_FRAME_PROTO_IP_FRAG		= 0x04, | 
|  | VXGE_HW_FRAME_PROTO_TCP			= 0x02, | 
|  | VXGE_HW_FRAME_PROTO_UDP			= 0x01, | 
|  | VXGE_HW_FRAME_PROTO_TCP_OR_UDP	= (VXGE_HW_FRAME_PROTO_TCP | \ | 
|  | VXGE_HW_FRAME_PROTO_UDP) | 
|  | }; | 
|  |  | 
|  | /** | 
|  | * enum enum vxge_hw_fifo_gather_code - Gather codes used in fifo TxD | 
|  | * @VXGE_HW_FIFO_GATHER_CODE_FIRST: First TxDL | 
|  | * @VXGE_HW_FIFO_GATHER_CODE_MIDDLE: Middle TxDL | 
|  | * @VXGE_HW_FIFO_GATHER_CODE_LAST: Last TxDL | 
|  | * @VXGE_HW_FIFO_GATHER_CODE_FIRST_LAST: First and Last TxDL. | 
|  | * | 
|  | * These gather codes are used to indicate the position of a TxD in a TxD list | 
|  | */ | 
|  | enum vxge_hw_fifo_gather_code { | 
|  | VXGE_HW_FIFO_GATHER_CODE_FIRST		= 0x2, | 
|  | VXGE_HW_FIFO_GATHER_CODE_MIDDLE		= 0x0, | 
|  | VXGE_HW_FIFO_GATHER_CODE_LAST		= 0x1, | 
|  | VXGE_HW_FIFO_GATHER_CODE_FIRST_LAST	= 0x3 | 
|  | }; | 
|  |  | 
|  | /** | 
|  | * enum enum vxge_hw_fifo_tcode - tcodes used in fifo | 
|  | * @VXGE_HW_FIFO_T_CODE_OK: Transfer OK | 
|  | * @VXGE_HW_FIFO_T_CODE_PCI_READ_CORRUPT: PCI read transaction (either TxD or | 
|  | *             frame data) returned with corrupt data. | 
|  | * @VXGE_HW_FIFO_T_CODE_PCI_READ_FAIL:PCI read transaction was returned | 
|  | *             with no data. | 
|  | * @VXGE_HW_FIFO_T_CODE_INVALID_MSS: The host attempted to send either a | 
|  | *             frame or LSO MSS that was too long (>9800B). | 
|  | * @VXGE_HW_FIFO_T_CODE_LSO_ERROR: Error detected during TCP/UDP Large Send | 
|  | *	       Offload operation, due to improper header template, | 
|  | *	       unsupported protocol, etc. | 
|  | * @VXGE_HW_FIFO_T_CODE_UNUSED: Unused | 
|  | * @VXGE_HW_FIFO_T_CODE_MULTI_ERROR: Set to 1 by the adapter if multiple | 
|  | *             data buffer transfer errors are encountered (see below). | 
|  | *             Otherwise it is set to 0. | 
|  | * | 
|  | * These tcodes are returned in various API for TxD status | 
|  | */ | 
|  | enum vxge_hw_fifo_tcode { | 
|  | VXGE_HW_FIFO_T_CODE_OK			= 0x0, | 
|  | VXGE_HW_FIFO_T_CODE_PCI_READ_CORRUPT	= 0x1, | 
|  | VXGE_HW_FIFO_T_CODE_PCI_READ_FAIL	= 0x2, | 
|  | VXGE_HW_FIFO_T_CODE_INVALID_MSS		= 0x3, | 
|  | VXGE_HW_FIFO_T_CODE_LSO_ERROR		= 0x4, | 
|  | VXGE_HW_FIFO_T_CODE_UNUSED		= 0x7, | 
|  | VXGE_HW_FIFO_T_CODE_MULTI_ERROR		= 0x8 | 
|  | }; | 
|  |  | 
|  | enum vxge_hw_status vxge_hw_fifo_txdl_reserve( | 
|  | struct __vxge_hw_fifo *fifoh, | 
|  | void **txdlh, | 
|  | void **txdl_priv); | 
|  |  | 
|  | void vxge_hw_fifo_txdl_buffer_set( | 
|  | struct __vxge_hw_fifo *fifo_handle, | 
|  | void *txdlh, | 
|  | u32 frag_idx, | 
|  | dma_addr_t dma_pointer, | 
|  | u32 size); | 
|  |  | 
|  | void vxge_hw_fifo_txdl_post( | 
|  | struct __vxge_hw_fifo *fifo_handle, | 
|  | void *txdlh); | 
|  |  | 
|  | u32 vxge_hw_fifo_free_txdl_count_get( | 
|  | struct __vxge_hw_fifo *fifo_handle); | 
|  |  | 
|  | enum vxge_hw_status vxge_hw_fifo_txdl_next_completed( | 
|  | struct __vxge_hw_fifo *fifoh, | 
|  | void **txdlh, | 
|  | enum vxge_hw_fifo_tcode *t_code); | 
|  |  | 
|  | enum vxge_hw_status vxge_hw_fifo_handle_tcode( | 
|  | struct __vxge_hw_fifo *fifoh, | 
|  | void *txdlh, | 
|  | enum vxge_hw_fifo_tcode t_code); | 
|  |  | 
|  | void vxge_hw_fifo_txdl_free( | 
|  | struct __vxge_hw_fifo *fifoh, | 
|  | void *txdlh); | 
|  |  | 
|  | /* | 
|  | * Device | 
|  | */ | 
|  |  | 
|  | #define VXGE_HW_RING_NEXT_BLOCK_POINTER_OFFSET	(VXGE_HW_BLOCK_SIZE-8) | 
|  | #define VXGE_HW_RING_MEMBLOCK_IDX_OFFSET		(VXGE_HW_BLOCK_SIZE-16) | 
|  |  | 
|  | /* | 
|  | * struct __vxge_hw_ring_rxd_priv - Receive descriptor HW-private data. | 
|  | * @dma_addr: DMA (mapped) address of _this_ descriptor. | 
|  | * @dma_handle: DMA handle used to map the descriptor onto device. | 
|  | * @dma_offset: Descriptor's offset in the memory block. HW allocates | 
|  | *              descriptors in memory blocks of %VXGE_HW_BLOCK_SIZE | 
|  | *              bytes. Each memblock is contiguous DMA-able memory. Each | 
|  | *              memblock contains 1 or more 4KB RxD blocks visible to the | 
|  | *              Titan hardware. | 
|  | * @dma_object: DMA address and handle of the memory block that contains | 
|  | *              the descriptor. This member is used only in the "checked" | 
|  | *              version of the HW (to enforce certain assertions); | 
|  | *              otherwise it gets compiled out. | 
|  | * @allocated: True if the descriptor is reserved, 0 otherwise. Internal usage. | 
|  | * | 
|  | * Per-receive decsriptor HW-private data. HW uses the space to keep DMA | 
|  | * information associated with the descriptor. Note that driver can ask HW | 
|  | * to allocate additional per-descriptor space for its own (driver-specific) | 
|  | * purposes. | 
|  | */ | 
|  | struct __vxge_hw_ring_rxd_priv { | 
|  | dma_addr_t	dma_addr; | 
|  | struct pci_dev *dma_handle; | 
|  | ptrdiff_t	dma_offset; | 
|  | #ifdef VXGE_DEBUG_ASSERT | 
|  | struct vxge_hw_mempool_dma	*dma_object; | 
|  | #endif | 
|  | }; | 
|  |  | 
|  | struct vxge_hw_mempool_cbs { | 
|  | void (*item_func_alloc)( | 
|  | struct vxge_hw_mempool *mempoolh, | 
|  | u32			memblock_index, | 
|  | struct vxge_hw_mempool_dma	*dma_object, | 
|  | u32			index, | 
|  | u32			is_last); | 
|  | }; | 
|  |  | 
|  | #define VXGE_HW_VIRTUAL_PATH_HANDLE(vpath)				\ | 
|  | ((struct __vxge_hw_vpath_handle *)(vpath)->vpath_handles.next) | 
|  |  | 
|  | enum vxge_hw_status | 
|  | __vxge_hw_vpath_rts_table_get( | 
|  | struct __vxge_hw_vpath_handle *vpath_handle, | 
|  | u32			action, | 
|  | u32			rts_table, | 
|  | u32			offset, | 
|  | u64			*data1, | 
|  | u64			*data2); | 
|  |  | 
|  | enum vxge_hw_status | 
|  | __vxge_hw_vpath_rts_table_set( | 
|  | struct __vxge_hw_vpath_handle *vpath_handle, | 
|  | u32			action, | 
|  | u32			rts_table, | 
|  | u32			offset, | 
|  | u64			data1, | 
|  | u64			data2); | 
|  |  | 
|  | enum vxge_hw_status | 
|  | __vxge_hw_vpath_enable( | 
|  | struct __vxge_hw_device *devh, | 
|  | u32			vp_id); | 
|  |  | 
|  | void vxge_hw_device_intr_enable( | 
|  | struct __vxge_hw_device *devh); | 
|  |  | 
|  | u32 vxge_hw_device_set_intr_type(struct __vxge_hw_device *devh, u32 intr_mode); | 
|  |  | 
|  | void vxge_hw_device_intr_disable( | 
|  | struct __vxge_hw_device *devh); | 
|  |  | 
|  | void vxge_hw_device_mask_all( | 
|  | struct __vxge_hw_device *devh); | 
|  |  | 
|  | void vxge_hw_device_unmask_all( | 
|  | struct __vxge_hw_device *devh); | 
|  |  | 
|  | enum vxge_hw_status vxge_hw_device_begin_irq( | 
|  | struct __vxge_hw_device *devh, | 
|  | u32 skip_alarms, | 
|  | u64 *reason); | 
|  |  | 
|  | void vxge_hw_device_clear_tx_rx( | 
|  | struct __vxge_hw_device *devh); | 
|  |  | 
|  | /* | 
|  | *  Virtual Paths | 
|  | */ | 
|  |  | 
|  | void vxge_hw_vpath_dynamic_rti_rtimer_set(struct __vxge_hw_ring *ring); | 
|  |  | 
|  | void vxge_hw_vpath_dynamic_tti_rtimer_set(struct __vxge_hw_fifo *fifo); | 
|  |  | 
|  | u32 vxge_hw_vpath_id( | 
|  | struct __vxge_hw_vpath_handle *vpath_handle); | 
|  |  | 
|  | enum vxge_hw_vpath_mac_addr_add_mode { | 
|  | VXGE_HW_VPATH_MAC_ADDR_ADD_DUPLICATE = 0, | 
|  | VXGE_HW_VPATH_MAC_ADDR_DISCARD_DUPLICATE = 1, | 
|  | VXGE_HW_VPATH_MAC_ADDR_REPLACE_DUPLICATE = 2 | 
|  | }; | 
|  |  | 
|  | enum vxge_hw_status | 
|  | vxge_hw_vpath_mac_addr_add( | 
|  | struct __vxge_hw_vpath_handle *vpath_handle, | 
|  | u8 *macaddr, | 
|  | u8 *macaddr_mask, | 
|  | enum vxge_hw_vpath_mac_addr_add_mode duplicate_mode); | 
|  |  | 
|  | enum vxge_hw_status | 
|  | vxge_hw_vpath_mac_addr_get( | 
|  | struct __vxge_hw_vpath_handle *vpath_handle, | 
|  | u8 *macaddr, | 
|  | u8 *macaddr_mask); | 
|  |  | 
|  | enum vxge_hw_status | 
|  | vxge_hw_vpath_mac_addr_get_next( | 
|  | struct __vxge_hw_vpath_handle *vpath_handle, | 
|  | u8 *macaddr, | 
|  | u8 *macaddr_mask); | 
|  |  | 
|  | enum vxge_hw_status | 
|  | vxge_hw_vpath_mac_addr_delete( | 
|  | struct __vxge_hw_vpath_handle *vpath_handle, | 
|  | u8 *macaddr, | 
|  | u8 *macaddr_mask); | 
|  |  | 
|  | enum vxge_hw_status | 
|  | vxge_hw_vpath_vid_add( | 
|  | struct __vxge_hw_vpath_handle *vpath_handle, | 
|  | u64			vid); | 
|  |  | 
|  | enum vxge_hw_status | 
|  | vxge_hw_vpath_vid_get( | 
|  | struct __vxge_hw_vpath_handle *vpath_handle, | 
|  | u64			*vid); | 
|  |  | 
|  | enum vxge_hw_status | 
|  | vxge_hw_vpath_vid_delete( | 
|  | struct __vxge_hw_vpath_handle *vpath_handle, | 
|  | u64			vid); | 
|  |  | 
|  | enum vxge_hw_status | 
|  | vxge_hw_vpath_etype_add( | 
|  | struct __vxge_hw_vpath_handle *vpath_handle, | 
|  | u64			etype); | 
|  |  | 
|  | enum vxge_hw_status | 
|  | vxge_hw_vpath_etype_get( | 
|  | struct __vxge_hw_vpath_handle *vpath_handle, | 
|  | u64			*etype); | 
|  |  | 
|  | enum vxge_hw_status | 
|  | vxge_hw_vpath_etype_get_next( | 
|  | struct __vxge_hw_vpath_handle *vpath_handle, | 
|  | u64			*etype); | 
|  |  | 
|  | enum vxge_hw_status | 
|  | vxge_hw_vpath_etype_delete( | 
|  | struct __vxge_hw_vpath_handle *vpath_handle, | 
|  | u64			etype); | 
|  |  | 
|  | enum vxge_hw_status vxge_hw_vpath_promisc_enable( | 
|  | struct __vxge_hw_vpath_handle *vpath_handle); | 
|  |  | 
|  | enum vxge_hw_status vxge_hw_vpath_promisc_disable( | 
|  | struct __vxge_hw_vpath_handle *vpath_handle); | 
|  |  | 
|  | enum vxge_hw_status vxge_hw_vpath_bcast_enable( | 
|  | struct __vxge_hw_vpath_handle *vpath_handle); | 
|  |  | 
|  | enum vxge_hw_status vxge_hw_vpath_mcast_enable( | 
|  | struct __vxge_hw_vpath_handle *vpath_handle); | 
|  |  | 
|  | enum vxge_hw_status vxge_hw_vpath_mcast_disable( | 
|  | struct __vxge_hw_vpath_handle *vpath_handle); | 
|  |  | 
|  | enum vxge_hw_status vxge_hw_vpath_poll_rx( | 
|  | struct __vxge_hw_ring *ringh); | 
|  |  | 
|  | enum vxge_hw_status vxge_hw_vpath_poll_tx( | 
|  | struct __vxge_hw_fifo *fifoh, | 
|  | struct sk_buff ***skb_ptr, int nr_skb, int *more); | 
|  |  | 
|  | enum vxge_hw_status vxge_hw_vpath_alarm_process( | 
|  | struct __vxge_hw_vpath_handle *vpath_handle, | 
|  | u32 skip_alarms); | 
|  |  | 
|  | void | 
|  | vxge_hw_vpath_msix_set(struct __vxge_hw_vpath_handle *vpath_handle, | 
|  | int *tim_msix_id, int alarm_msix_id); | 
|  |  | 
|  | void | 
|  | vxge_hw_vpath_msix_mask(struct __vxge_hw_vpath_handle *vpath_handle, | 
|  | int msix_id); | 
|  |  | 
|  | void vxge_hw_vpath_msix_clear(struct __vxge_hw_vpath_handle *vp, int msix_id); | 
|  |  | 
|  | void vxge_hw_device_flush_io(struct __vxge_hw_device *devh); | 
|  |  | 
|  | void | 
|  | vxge_hw_vpath_msix_unmask(struct __vxge_hw_vpath_handle *vpath_handle, | 
|  | int msix_id); | 
|  |  | 
|  | enum vxge_hw_status vxge_hw_vpath_intr_enable( | 
|  | struct __vxge_hw_vpath_handle *vpath_handle); | 
|  |  | 
|  | enum vxge_hw_status vxge_hw_vpath_intr_disable( | 
|  | struct __vxge_hw_vpath_handle *vpath_handle); | 
|  |  | 
|  | void vxge_hw_vpath_inta_mask_tx_rx( | 
|  | struct __vxge_hw_vpath_handle *vpath_handle); | 
|  |  | 
|  | void vxge_hw_vpath_inta_unmask_tx_rx( | 
|  | struct __vxge_hw_vpath_handle *vpath_handle); | 
|  |  | 
|  | void | 
|  | vxge_hw_channel_msix_mask(struct __vxge_hw_channel *channelh, int msix_id); | 
|  |  | 
|  | void | 
|  | vxge_hw_channel_msix_unmask(struct __vxge_hw_channel *channelh, int msix_id); | 
|  |  | 
|  | void | 
|  | vxge_hw_channel_msix_clear(struct __vxge_hw_channel *channelh, int msix_id); | 
|  |  | 
|  | void | 
|  | vxge_hw_channel_dtr_try_complete(struct __vxge_hw_channel *channel, | 
|  | void **dtrh); | 
|  |  | 
|  | void | 
|  | vxge_hw_channel_dtr_complete(struct __vxge_hw_channel *channel); | 
|  |  | 
|  | void | 
|  | vxge_hw_channel_dtr_free(struct __vxge_hw_channel *channel, void *dtrh); | 
|  |  | 
|  | int | 
|  | vxge_hw_channel_dtr_count(struct __vxge_hw_channel *channel); | 
|  |  | 
|  | void vxge_hw_vpath_tti_ci_set(struct __vxge_hw_fifo *fifo); | 
|  |  | 
|  | void vxge_hw_vpath_dynamic_rti_ci_set(struct __vxge_hw_ring *ring); | 
|  |  | 
|  | #endif |