Merge branch 'locking-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / drivers / net / vxge / vxge-traffic.h
1 /******************************************************************************
2  * This software may be used and distributed according to the terms of
3  * the GNU General Public License (GPL), incorporated herein by reference.
4  * Drivers based on or derived from this code fall under the GPL and must
5  * retain the authorship, copyright and license notice.  This file is not
6  * a complete program and may only be used when the entire operating
7  * system is licensed under the GPL.
8  * See the file COPYING in this distribution for more information.
9  *
10  * vxge-traffic.h: Driver for Neterion Inc's X3100 Series 10GbE PCIe I/O
11  *                 Virtualized Server Adapter.
12  * Copyright(c) 2002-2009 Neterion Inc.
13  ******************************************************************************/
14 #ifndef VXGE_TRAFFIC_H
15 #define VXGE_TRAFFIC_H
16
17 #include "vxge-reg.h"
18 #include "vxge-version.h"
19
20 #define VXGE_HW_DTR_MAX_T_CODE          16
21 #define VXGE_HW_ALL_FOXES               0xFFFFFFFFFFFFFFFFULL
22 #define VXGE_HW_INTR_MASK_ALL           0xFFFFFFFFFFFFFFFFULL
23 #define VXGE_HW_MAX_VIRTUAL_PATHS       17
24
25 #define VXGE_HW_MAC_MAX_MAC_PORT_ID     2
26
27 #define VXGE_HW_DEFAULT_32              0xffffffff
28 /* frames sizes */
29 #define VXGE_HW_HEADER_802_2_SIZE       3
30 #define VXGE_HW_HEADER_SNAP_SIZE        5
31 #define VXGE_HW_HEADER_VLAN_SIZE        4
32 #define VXGE_HW_MAC_HEADER_MAX_SIZE \
33                         (ETH_HLEN + \
34                         VXGE_HW_HEADER_802_2_SIZE + \
35                         VXGE_HW_HEADER_VLAN_SIZE + \
36                         VXGE_HW_HEADER_SNAP_SIZE)
37
38 #define VXGE_HW_TCPIP_HEADER_MAX_SIZE   (64 + 64)
39
40 /* 32bit alignments */
41 #define VXGE_HW_HEADER_ETHERNET_II_802_3_ALIGN          2
42 #define VXGE_HW_HEADER_802_2_SNAP_ALIGN                 2
43 #define VXGE_HW_HEADER_802_2_ALIGN                      3
44 #define VXGE_HW_HEADER_SNAP_ALIGN                       1
45
46 #define VXGE_HW_L3_CKSUM_OK                             0xFFFF
47 #define VXGE_HW_L4_CKSUM_OK                             0xFFFF
48
49 /* Forward declarations */
50 struct __vxge_hw_device;
51 struct __vxge_hw_vpath_handle;
52 struct vxge_hw_vp_config;
53 struct __vxge_hw_virtualpath;
54 struct __vxge_hw_channel;
55 struct __vxge_hw_fifo;
56 struct __vxge_hw_ring;
57 struct vxge_hw_ring_attr;
58 struct vxge_hw_mempool;
59
60 #ifndef TRUE
61 #define TRUE 1
62 #endif
63
64 #ifndef FALSE
65 #define FALSE 0
66 #endif
67
68 /*VXGE_HW_STATUS_H*/
69
70 #define VXGE_HW_EVENT_BASE                      0
71 #define VXGE_LL_EVENT_BASE                      100
72
73 /**
74  * enum vxge_hw_event- Enumerates slow-path HW events.
75  * @VXGE_HW_EVENT_UNKNOWN: Unknown (and invalid) event.
76  * @VXGE_HW_EVENT_SERR: Serious vpath hardware error event.
77  * @VXGE_HW_EVENT_ECCERR: vpath ECC error event.
78  * @VXGE_HW_EVENT_VPATH_ERR: Error local to the respective vpath
79  * @VXGE_HW_EVENT_FIFO_ERR: FIFO Doorbell fifo error.
80  * @VXGE_HW_EVENT_SRPCIM_SERR: srpcim hardware error event.
81  * @VXGE_HW_EVENT_MRPCIM_SERR: mrpcim hardware error event.
82  * @VXGE_HW_EVENT_MRPCIM_ECCERR: mrpcim ecc error event.
83  * @VXGE_HW_EVENT_RESET_START: Privileged entity is starting device reset
84  * @VXGE_HW_EVENT_RESET_COMPLETE: Device reset has been completed
85  * @VXGE_HW_EVENT_SLOT_FREEZE: Slot-freeze event. Driver tries to distinguish
86  * slot-freeze from the rest critical events (e.g. ECC) when it is
87  * impossible to PIO read "through" the bus, i.e. when getting all-foxes.
88  *
89  * enum vxge_hw_event enumerates slow-path HW eventis.
90  *
91  * See also: struct vxge_hw_uld_cbs{}, vxge_uld_link_up_f{},
92  * vxge_uld_link_down_f{}.
93  */
94 enum vxge_hw_event {
95         VXGE_HW_EVENT_UNKNOWN           = 0,
96         /* HW events */
97         VXGE_HW_EVENT_RESET_START       = VXGE_HW_EVENT_BASE + 1,
98         VXGE_HW_EVENT_RESET_COMPLETE    = VXGE_HW_EVENT_BASE + 2,
99         VXGE_HW_EVENT_LINK_DOWN         = VXGE_HW_EVENT_BASE + 3,
100         VXGE_HW_EVENT_LINK_UP           = VXGE_HW_EVENT_BASE + 4,
101         VXGE_HW_EVENT_ALARM_CLEARED     = VXGE_HW_EVENT_BASE + 5,
102         VXGE_HW_EVENT_ECCERR            = VXGE_HW_EVENT_BASE + 6,
103         VXGE_HW_EVENT_MRPCIM_ECCERR     = VXGE_HW_EVENT_BASE + 7,
104         VXGE_HW_EVENT_FIFO_ERR          = VXGE_HW_EVENT_BASE + 8,
105         VXGE_HW_EVENT_VPATH_ERR         = VXGE_HW_EVENT_BASE + 9,
106         VXGE_HW_EVENT_CRITICAL_ERR      = VXGE_HW_EVENT_BASE + 10,
107         VXGE_HW_EVENT_SERR              = VXGE_HW_EVENT_BASE + 11,
108         VXGE_HW_EVENT_SRPCIM_SERR       = VXGE_HW_EVENT_BASE + 12,
109         VXGE_HW_EVENT_MRPCIM_SERR       = VXGE_HW_EVENT_BASE + 13,
110         VXGE_HW_EVENT_SLOT_FREEZE       = VXGE_HW_EVENT_BASE + 14,
111 };
112
113 #define VXGE_HW_SET_LEVEL(a, b) (((a) > (b)) ? (a) : (b))
114
115 /*
116  * struct vxge_hw_mempool_dma - Represents DMA objects passed to the
117         caller.
118  */
119 struct vxge_hw_mempool_dma {
120         dma_addr_t                      addr;
121         struct pci_dev *handle;
122         struct pci_dev *acc_handle;
123 };
124
125 /*
126  * vxge_hw_mempool_item_f  - Mempool item alloc/free callback
127  * @mempoolh: Memory pool handle.
128  * @memblock: Address of memory block
129  * @memblock_index: Index of memory block
130  * @item: Item that gets allocated or freed.
131  * @index: Item's index in the memory pool.
132  * @is_last: True, if this item is the last one in the pool; false - otherwise.
133  * userdata: Per-pool user context.
134  *
135  * Memory pool allocation/deallocation callback.
136  */
137
138 /*
139  * struct vxge_hw_mempool - Memory pool.
140  */
141 struct vxge_hw_mempool {
142
143         void (*item_func_alloc)(
144         struct vxge_hw_mempool *mempoolh,
145         u32                     memblock_index,
146         struct vxge_hw_mempool_dma      *dma_object,
147         u32                     index,
148         u32                     is_last);
149
150         void            *userdata;
151         void            **memblocks_arr;
152         void            **memblocks_priv_arr;
153         struct vxge_hw_mempool_dma      *memblocks_dma_arr;
154         struct __vxge_hw_device *devh;
155         u32                     memblock_size;
156         u32                     memblocks_max;
157         u32                     memblocks_allocated;
158         u32                     item_size;
159         u32                     items_max;
160         u32                     items_initial;
161         u32                     items_current;
162         u32                     items_per_memblock;
163         void            **items_arr;
164         u32                     items_priv_size;
165 };
166
167 #define VXGE_HW_MAX_INTR_PER_VP                         4
168 #define VXGE_HW_VPATH_INTR_TX                           0
169 #define VXGE_HW_VPATH_INTR_RX                           1
170 #define VXGE_HW_VPATH_INTR_EINTA                        2
171 #define VXGE_HW_VPATH_INTR_BMAP                         3
172
173 #define VXGE_HW_BLOCK_SIZE                              4096
174
175 /**
176  * struct vxge_hw_tim_intr_config - Titan Tim interrupt configuration.
177  * @intr_enable: Set to 1, if interrupt is enabled.
178  * @btimer_val: Boundary Timer Initialization value in units of 272 ns.
179  * @timer_ac_en: Timer Automatic Cancel. 1 : Automatic Canceling Enable: when
180  *             asserted, other interrupt-generating entities will cancel the
181  *             scheduled timer interrupt.
182  * @timer_ci_en: Timer Continuous Interrupt. 1 : Continuous Interrupting Enable:
183  *             When asserted, an interrupt will be generated every time the
184  *             boundary timer expires, even if no traffic has been transmitted
185  *             on this interrupt.
186  * @timer_ri_en: Timer Consecutive (Re-) Interrupt 1 : Consecutive
187  *             (Re-) Interrupt Enable: When asserted, an interrupt will be
188  *             generated the next time the timer expires, even if no traffic has
189  *             been transmitted on this interrupt. (This will only happen once
190  *             each time that this value is written to the TIM.) This bit is
191  *             cleared by H/W at the end of the current-timer-interval when
192  *             the interrupt is triggered.
193  * @rtimer_val: Restriction Timer Initialization value in units of 272 ns.
194  * @util_sel: Utilization Selector. Selects which of the workload approximations
195  *             to use (e.g. legacy Tx utilization, Tx/Rx utilization, host
196  *             specified utilization etc.), selects one of
197  *             the 17 host configured values.
198  *             0-Virtual Path 0
199  *             1-Virtual Path 1
200  *             ...
201  *             16-Virtual Path 17
202  *             17-Legacy Tx network utilization, provided by TPA
203  *             18-Legacy Rx network utilization, provided by FAU
204  *             19-Average of legacy Rx and Tx utilization calculated from link
205  *                utilization values.
206  *             20-31-Invalid configurations
207  *             32-Host utilization for Virtual Path 0
208  *             33-Host utilization for Virtual Path 1
209  *             ...
210  *             48-Host utilization for Virtual Path 17
211  *             49-Legacy Tx network utilization, provided by TPA
212  *             50-Legacy Rx network utilization, provided by FAU
213  *             51-Average of legacy Rx and Tx utilization calculated from
214  *                link utilization values.
215  *             52-63-Invalid configurations
216  * @ltimer_val: Latency Timer Initialization Value in units of 272 ns.
217  * @txd_cnt_en: TxD Return Event Count Enable. This configuration bit when set
218  *             to 1 enables counting of TxD0 returns (signalled by PCC's),
219  *             towards utilization event count values.
220  * @urange_a: Defines the upper limit (in percent) for this utilization range
221  *             to be active. This range is considered active
222  *             if 0 = UTIL = URNG_A
223  *             and the UEC_A field (below) is non-zero.
224  * @uec_a: Utilization Event Count A. If this range is active, the adapter will
225  *             wait until UEC_A events have occurred on the interrupt before
226  *             generating an interrupt.
227  * @urange_b: Link utilization range B.
228  * @uec_b: Utilization Event Count B.
229  * @urange_c: Link utilization range C.
230  * @uec_c: Utilization Event Count C.
231  * @urange_d: Link utilization range D.
232  * @uec_d: Utilization Event Count D.
233  * Traffic Interrupt Controller Module interrupt configuration.
234  */
235 struct vxge_hw_tim_intr_config {
236
237         u32                             intr_enable;
238 #define VXGE_HW_TIM_INTR_ENABLE                         1
239 #define VXGE_HW_TIM_INTR_DISABLE                                0
240 #define VXGE_HW_TIM_INTR_DEFAULT                                0
241
242         u32                             btimer_val;
243 #define VXGE_HW_MIN_TIM_BTIMER_VAL                              0
244 #define VXGE_HW_MAX_TIM_BTIMER_VAL                              67108864
245 #define VXGE_HW_USE_FLASH_DEFAULT                               0xffffffff
246
247         u32                             timer_ac_en;
248 #define VXGE_HW_TIM_TIMER_AC_ENABLE                             1
249 #define VXGE_HW_TIM_TIMER_AC_DISABLE                            0
250
251         u32                             timer_ci_en;
252 #define VXGE_HW_TIM_TIMER_CI_ENABLE                             1
253 #define VXGE_HW_TIM_TIMER_CI_DISABLE                            0
254
255         u32                             timer_ri_en;
256 #define VXGE_HW_TIM_TIMER_RI_ENABLE                             1
257 #define VXGE_HW_TIM_TIMER_RI_DISABLE                            0
258
259         u32                             rtimer_val;
260 #define VXGE_HW_MIN_TIM_RTIMER_VAL                              0
261 #define VXGE_HW_MAX_TIM_RTIMER_VAL                              67108864
262
263         u32                             util_sel;
264 #define VXGE_HW_TIM_UTIL_SEL_LEGACY_TX_NET_UTIL         17
265 #define VXGE_HW_TIM_UTIL_SEL_LEGACY_RX_NET_UTIL         18
266 #define VXGE_HW_TIM_UTIL_SEL_LEGACY_TX_RX_AVE_NET_UTIL          19
267 #define VXGE_HW_TIM_UTIL_SEL_PER_VPATH                          63
268
269         u32                             ltimer_val;
270 #define VXGE_HW_MIN_TIM_LTIMER_VAL                              0
271 #define VXGE_HW_MAX_TIM_LTIMER_VAL                              67108864
272
273         /* Line utilization interrupts */
274         u32                             urange_a;
275 #define VXGE_HW_MIN_TIM_URANGE_A                                0
276 #define VXGE_HW_MAX_TIM_URANGE_A                                100
277
278         u32                             uec_a;
279 #define VXGE_HW_MIN_TIM_UEC_A                                   0
280 #define VXGE_HW_MAX_TIM_UEC_A                                   65535
281
282         u32                             urange_b;
283 #define VXGE_HW_MIN_TIM_URANGE_B                                0
284 #define VXGE_HW_MAX_TIM_URANGE_B                                100
285
286         u32                             uec_b;
287 #define VXGE_HW_MIN_TIM_UEC_B                                   0
288 #define VXGE_HW_MAX_TIM_UEC_B                                   65535
289
290         u32                             urange_c;
291 #define VXGE_HW_MIN_TIM_URANGE_C                                0
292 #define VXGE_HW_MAX_TIM_URANGE_C                                100
293
294         u32                             uec_c;
295 #define VXGE_HW_MIN_TIM_UEC_C                                   0
296 #define VXGE_HW_MAX_TIM_UEC_C                                   65535
297
298         u32                             uec_d;
299 #define VXGE_HW_MIN_TIM_UEC_D                                   0
300 #define VXGE_HW_MAX_TIM_UEC_D                                   65535
301 };
302
303 #define VXGE_HW_STATS_OP_READ                                   0
304 #define VXGE_HW_STATS_OP_CLEAR_STAT                             1
305 #define VXGE_HW_STATS_OP_CLEAR_ALL_VPATH_STATS                  2
306 #define VXGE_HW_STATS_OP_CLEAR_ALL_STATS_OF_LOC                 2
307 #define VXGE_HW_STATS_OP_CLEAR_ALL_STATS                        3
308
309 #define VXGE_HW_STATS_LOC_AGGR                                  17
310 #define VXGE_HW_STATS_AGGRn_OFFSET                              0x00720
311
312 #define VXGE_HW_STATS_VPATH_TX_OFFSET                           0x0
313 #define VXGE_HW_STATS_VPATH_RX_OFFSET                           0x00090
314
315 #define VXGE_HW_STATS_VPATH_PROG_EVENT_VNUM0_OFFSET        (0x001d0 >> 3)
316 #define VXGE_HW_STATS_GET_VPATH_PROG_EVENT_VNUM0(bits) \
317                                                 vxge_bVALn(bits, 0, 32)
318
319 #define VXGE_HW_STATS_GET_VPATH_PROG_EVENT_VNUM1(bits) \
320                                                 vxge_bVALn(bits, 32, 32)
321
322 #define VXGE_HW_STATS_VPATH_PROG_EVENT_VNUM2_OFFSET        (0x001d8 >> 3)
323 #define VXGE_HW_STATS_GET_VPATH_PROG_EVENT_VNUM2(bits) \
324                                                 vxge_bVALn(bits, 0, 32)
325
326 #define VXGE_HW_STATS_GET_VPATH_PROG_EVENT_VNUM3(bits) \
327                                                 vxge_bVALn(bits, 32, 32)
328
329 /**
330  * struct vxge_hw_xmac_aggr_stats - Per-Aggregator XMAC Statistics
331  *
332  * @tx_frms: Count of data frames transmitted on this Aggregator on all
333  *             its Aggregation ports. Does not include LACPDUs or Marker PDUs.
334  *             However, does include frames discarded by the Distribution
335  *             function.
336  * @tx_data_octets: Count of data and padding octets of frames transmitted
337  *             on this Aggregator on all its Aggregation ports. Does not include
338  *             octets of LACPDUs or Marker PDUs. However, does include octets of
339  *             frames discarded by the Distribution function.
340  * @tx_mcast_frms: Count of data frames transmitted (to a group destination
341  *             address other than the broadcast address) on this Aggregator on
342  *             all its Aggregation ports. Does not include LACPDUs or Marker
343  *             PDUs. However, does include frames discarded by the Distribution
344  *             function.
345  * @tx_bcast_frms: Count of broadcast data frames transmitted on this Aggregator
346  *             on all its Aggregation ports. Does not include LACPDUs or Marker
347  *             PDUs. However, does include frames discarded by the Distribution
348  *             function.
349  * @tx_discarded_frms: Count of data frames to be transmitted on this Aggregator
350  *             that are discarded by the Distribution function. This occurs when
351  *             conversation are allocated to different ports and have to be
352  *             flushed on old ports
353  * @tx_errored_frms: Count of data frames transmitted on this Aggregator that
354  *             experience transmission errors on its Aggregation ports.
355  * @rx_frms: Count of data frames received on this Aggregator on all its
356  *             Aggregation ports. Does not include LACPDUs or Marker PDUs.
357  *             Also, does not include frames discarded by the Collection
358  *             function.
359  * @rx_data_octets: Count of data and padding octets of frames received on this
360  *             Aggregator on all its Aggregation ports. Does not include octets
361  *             of LACPDUs or Marker PDUs. Also, does not include
362  *             octets of frames
363  *             discarded by the Collection function.
364  * @rx_mcast_frms: Count of data frames received (from a group destination
365  *             address other than the broadcast address) on this Aggregator on
366  *             all its Aggregation ports. Does not include LACPDUs or Marker
367  *             PDUs. Also, does not include frames discarded by the Collection
368  *             function.
369  * @rx_bcast_frms: Count of broadcast data frames received on this Aggregator on
370  *             all its Aggregation ports. Does not include LACPDUs or Marker
371  *             PDUs. Also, does not include frames discarded by the Collection
372  *             function.
373  * @rx_discarded_frms: Count of data frames received on this Aggregator that are
374  *             discarded by the Collection function because the Collection
375  *             function was disabled on the port which the frames are received.
376  * @rx_errored_frms: Count of data frames received on this Aggregator that are
377  *             discarded by its Aggregation ports, or are discarded by the
378  *             Collection function of the Aggregator, or that are discarded by
379  *             the Aggregator due to detection of an illegal Slow Protocols PDU.
380  * @rx_unknown_slow_proto_frms: Count of data frames received on this Aggregator
381  *             that are discarded by its Aggregation ports due to detection of
382  *             an unknown Slow Protocols PDU.
383  *
384  * Per aggregator XMAC RX statistics.
385  */
386 struct vxge_hw_xmac_aggr_stats {
387 /*0x000*/               u64     tx_frms;
388 /*0x008*/               u64     tx_data_octets;
389 /*0x010*/               u64     tx_mcast_frms;
390 /*0x018*/               u64     tx_bcast_frms;
391 /*0x020*/               u64     tx_discarded_frms;
392 /*0x028*/               u64     tx_errored_frms;
393 /*0x030*/               u64     rx_frms;
394 /*0x038*/               u64     rx_data_octets;
395 /*0x040*/               u64     rx_mcast_frms;
396 /*0x048*/               u64     rx_bcast_frms;
397 /*0x050*/               u64     rx_discarded_frms;
398 /*0x058*/               u64     rx_errored_frms;
399 /*0x060*/               u64     rx_unknown_slow_proto_frms;
400 } __packed;
401
402 /**
403  * struct vxge_hw_xmac_port_stats - XMAC Port Statistics
404  *
405  * @tx_ttl_frms: Count of successfully transmitted MAC frames
406  * @tx_ttl_octets: Count of total octets of transmitted frames, not including
407  *            framing characters (i.e. less framing bits). To determine the
408  *            total octets of transmitted frames, including framing characters,
409  *            multiply PORTn_TX_TTL_FRMS by 8 and add it to this stat (unless
410  *            otherwise configured, this stat only counts frames that have
411  *            8 bytes of preamble for each frame). This stat can be configured
412  *            (see XMAC_STATS_GLOBAL_CFG.TTL_FRMS_HANDLING) to count everything
413  *            including the preamble octets.
414  * @tx_data_octets: Count of data and padding octets of successfully transmitted
415  *            frames.
416  * @tx_mcast_frms: Count of successfully transmitted frames to a group address
417  *            other than the broadcast address.
418  * @tx_bcast_frms: Count of successfully transmitted frames to the broadcast
419  *            group address.
420  * @tx_ucast_frms: Count of transmitted frames containing a unicast address.
421  *            Includes discarded frames that are not sent to the network.
422  * @tx_tagged_frms: Count of transmitted frames containing a VLAN tag.
423  * @tx_vld_ip: Count of transmitted IP datagrams that are passed to the network.
424  * @tx_vld_ip_octets: Count of total octets of transmitted IP datagrams that
425  *            are passed to the network.
426  * @tx_icmp: Count of transmitted ICMP messages. Includes messages not sent
427  *            due to problems within ICMP.
428  * @tx_tcp: Count of transmitted TCP segments. Does not include segments
429  *            containing retransmitted octets.
430  * @tx_rst_tcp: Count of transmitted TCP segments containing the RST flag.
431  * @tx_udp: Count of transmitted UDP datagrams.
432  * @tx_parse_error: Increments when the TPA is unable to parse a packet. This
433  *            generally occurs when a packet is corrupt somehow, including
434  *            packets that have IP version mismatches, invalid Layer 2 control
435  *            fields, etc. L3/L4 checksums are not offloaded, but the packet
436  *            is still be transmitted.
437  * @tx_unknown_protocol: Increments when the TPA encounters an unknown
438  *            protocol, such as a new IPv6 extension header, or an unsupported
439  *            Routing Type. The packet still has a checksum calculated but it
440  *            may be incorrect.
441  * @tx_pause_ctrl_frms: Count of MAC PAUSE control frames that are transmitted.
442  *            Since, the only control frames supported by this device are
443  *            PAUSE frames, this register is a count of all transmitted MAC
444  *            control frames.
445  * @tx_marker_pdu_frms: Count of Marker PDUs transmitted
446  * on this Aggregation port.
447  * @tx_lacpdu_frms: Count of LACPDUs transmitted on this Aggregation port.
448  * @tx_drop_ip: Count of transmitted IP datagrams that could not be passed to
449  *            the network. Increments because of:
450  *            1) An internal processing error
451  *            (such as an uncorrectable ECC error). 2) A frame parsing error
452  *            during IP checksum calculation.
453  * @tx_marker_resp_pdu_frms: Count of Marker Response PDUs transmitted on this
454  *            Aggregation port.
455  * @tx_xgmii_char2_match: Maintains a count of the number of transmitted XGMII
456  *            characters that match a pattern that is programmable through
457  *            register XMAC_STATS_TX_XGMII_CHAR_PORTn. By default, the pattern
458  *            is set to /T/ (i.e. the terminate character), thus the statistic
459  *            tracks the number of transmitted Terminate characters.
460  * @tx_xgmii_char1_match: Maintains a count of the number of transmitted XGMII
461  *            characters that match a pattern that is programmable through
462  *            register XMAC_STATS_TX_XGMII_CHAR_PORTn. By default, the pattern
463  *            is set to /S/ (i.e. the start character),
464  *            thus the statistic tracks
465  *            the number of transmitted Start characters.
466  * @tx_xgmii_column2_match: Maintains a count of the number of transmitted XGMII
467  *            columns that match a pattern that is programmable through register
468  *            XMAC_STATS_TX_XGMII_COLUMN2_PORTn. By default, the pattern is set
469  *            to 4 x /E/ (i.e. a column containing all error characters), thus
470  *            the statistic tracks the number of Error columns transmitted at
471  *            any time. If XMAC_STATS_TX_XGMII_BEHAV_COLUMN2_PORTn.NEAR_COL1 is
472  *            set to 1, then this stat increments when COLUMN2 is found within
473  *            'n' clocks after COLUMN1. Here, 'n' is defined by
474  *            XMAC_STATS_TX_XGMII_BEHAV_COLUMN2_PORTn.NUM_COL (if 'n' is set
475  *            to 0, then it means to search anywhere for COLUMN2).
476  * @tx_xgmii_column1_match: Maintains a count of the number of transmitted XGMII
477  *            columns that match a pattern that is programmable through register
478  *            XMAC_STATS_TX_XGMII_COLUMN1_PORTn. By default, the pattern is set
479  *            to 4 x /I/ (i.e. a column containing all idle characters),
480  *            thus the statistic tracks the number of transmitted Idle columns.
481  * @tx_any_err_frms: Count of transmitted frames containing any error that
482  *            prevents them from being passed to the network. Increments if
483  *            there is an ECC while reading the frame out of the transmit
484  *            buffer. Also increments if the transmit protocol assist (TPA)
485  *            block determines that the frame should not be sent.
486  * @tx_drop_frms: Count of frames that could not be sent for no other reason
487  *            than internal MAC processing. Increments once whenever the
488  *            transmit buffer is flushed (due to an ECC error on a memory
489  *            descriptor).
490  * @rx_ttl_frms: Count of total received MAC frames, including frames received
491  *            with frame-too-long, FCS, or length errors. This stat can be
492  *            configured (see XMAC_STATS_GLOBAL_CFG.TTL_FRMS_HANDLING) to count
493  *            everything, even "frames" as small one byte of preamble.
494  * @rx_vld_frms: Count of successfully received MAC frames. Does not include
495  *            frames received with frame-too-long, FCS, or length errors.
496  * @rx_offload_frms: Count of offloaded received frames that are passed to
497  *            the host.
498  * @rx_ttl_octets: Count of total octets of received frames, not including
499  *            framing characters (i.e. less framing bits). To determine the
500  *            total octets of received frames, including framing characters,
501  *            multiply PORTn_RX_TTL_FRMS by 8 and add it to this stat (unless
502  *            otherwise configured, this stat only counts frames that have 8
503  *            bytes of preamble for each frame). This stat can be configured
504  *            (see XMAC_STATS_GLOBAL_CFG.TTL_FRMS_HANDLING) to count everything,
505  *            even the preamble octets of "frames" as small one byte of preamble
506  * @rx_data_octets: Count of data and padding octets of successfully received
507  *            frames. Does not include frames received with frame-too-long,
508  *            FCS, or length errors.
509  * @rx_offload_octets: Count of total octets, not including framing
510  *            characters, of offloaded received frames that are passed
511  *            to the host.
512  * @rx_vld_mcast_frms: Count of successfully received MAC frames containing a
513  *            nonbroadcast group address. Does not include frames received
514  *            with frame-too-long, FCS, or length errors.
515  * @rx_vld_bcast_frms: Count of successfully received MAC frames containing
516  *            the broadcast group address. Does not include frames received
517  *            with frame-too-long, FCS, or length errors.
518  * @rx_accepted_ucast_frms: Count of successfully received frames containing
519  *            a unicast address. Only includes frames that are passed to
520  *            the system.
521  * @rx_accepted_nucast_frms: Count of successfully received frames containing
522  *            a non-unicast (broadcast or multicast) address. Only includes
523  *            frames that are passed to the system. Could include, for instance,
524  *            non-unicast frames that contain FCS errors if the MAC_ERROR_CFG
525  *            register is set to pass FCS-errored frames to the host.
526  * @rx_tagged_frms: Count of received frames containing a VLAN tag.
527  * @rx_long_frms: Count of received frames that are longer than RX_MAX_PYLD_LEN
528  *            + 18 bytes (+ 22 bytes if VLAN-tagged).
529  * @rx_usized_frms: Count of received frames of length (including FCS, but not
530  *            framing bits) less than 64 octets, that are otherwise well-formed.
531  *            In other words, counts runts.
532  * @rx_osized_frms: Count of received frames of length (including FCS, but not
533  *            framing bits) more than 1518 octets, that are otherwise
534  *            well-formed. Note: If register XMAC_STATS_GLOBAL_CFG.VLAN_HANDLING
535  *            is set to 1, then "more than 1518 octets" becomes "more than 1518
536  *            (1522 if VLAN-tagged) octets".
537  * @rx_frag_frms: Count of received frames of length (including FCS, but not
538  *            framing bits) less than 64 octets that had bad FCS. In other
539  *            words, counts fragments.
540  * @rx_jabber_frms: Count of received frames of length (including FCS, but not
541  *            framing bits) more than 1518 octets that had bad FCS. In other
542  *            words, counts jabbers. Note: If register
543  *            XMAC_STATS_GLOBAL_CFG.VLAN_HANDLING is set to 1, then "more than
544  *            1518 octets" becomes "more than 1518 (1522 if VLAN-tagged)
545  *            octets".
546  * @rx_ttl_64_frms: Count of total received MAC frames with length (including
547  *            FCS, but not framing bits) of exactly 64 octets. Includes frames
548  *            received with frame-too-long, FCS, or length errors.
549  * @rx_ttl_65_127_frms: Count of total received MAC frames with length
550  *            (including FCS, but not framing bits) of between 65 and 127
551  *            octets inclusive. Includes frames received with frame-too-long,
552  *            FCS, or length errors.
553  * @rx_ttl_128_255_frms: Count of total received MAC frames with length
554  *            (including FCS, but not framing bits) of between 128 and 255
555  *            octets inclusive. Includes frames received with frame-too-long,
556  *            FCS, or length errors.
557  * @rx_ttl_256_511_frms: Count of total received MAC frames with length
558  *            (including FCS, but not framing bits) of between 256 and 511
559  *            octets inclusive. Includes frames received with frame-too-long,
560  *            FCS, or length errors.
561  * @rx_ttl_512_1023_frms: Count of total received MAC frames with length
562  *            (including FCS, but not framing bits) of between 512 and 1023
563  *            octets inclusive. Includes frames received with frame-too-long,
564  *            FCS, or length errors.
565  * @rx_ttl_1024_1518_frms: Count of total received MAC frames with length
566  *            (including FCS, but not framing bits) of between 1024 and 1518
567  *            octets inclusive. Includes frames received with frame-too-long,
568  *            FCS, or length errors.
569  * @rx_ttl_1519_4095_frms: Count of total received MAC frames with length
570  *            (including FCS, but not framing bits) of between 1519 and 4095
571  *            octets inclusive. Includes frames received with frame-too-long,
572  *            FCS, or length errors.
573  * @rx_ttl_4096_8191_frms: Count of total received MAC frames with length
574  *            (including FCS, but not framing bits) of between 4096 and 8191
575  *            octets inclusive. Includes frames received with frame-too-long,
576  *            FCS, or length errors.
577  * @rx_ttl_8192_max_frms: Count of total received MAC frames with length
578  *            (including FCS, but not framing bits) of between 8192 and
579  *            RX_MAX_PYLD_LEN+18 octets inclusive. Includes frames received
580  *            with frame-too-long, FCS, or length errors.
581  * @rx_ttl_gt_max_frms: Count of total received MAC frames with length
582  *            (including FCS, but not framing bits) exceeding
583  *            RX_MAX_PYLD_LEN+18 (+22 bytes if VLAN-tagged) octets inclusive.
584  *            Includes frames received with frame-too-long,
585  *            FCS, or length errors.
586  * @rx_ip: Count of received IP datagrams. Includes errored IP datagrams.
587  * @rx_accepted_ip: Count of received IP datagrams that
588  *              are passed to the system.
589  * @rx_ip_octets: Count of number of octets in received IP datagrams. Includes
590  *            errored IP datagrams.
591  * @rx_err_ip:  Count of received IP datagrams containing errors. For example,
592  *            bad IP checksum.
593  * @rx_icmp: Count of received ICMP messages. Includes errored ICMP messages.
594  * @rx_tcp: Count of received TCP segments. Includes errored TCP segments.
595  *            Note: This stat contains a count of all received TCP segments,
596  *            regardless of whether or not they pertain to an established
597  *            connection.
598  * @rx_udp: Count of received UDP datagrams.
599  * @rx_err_tcp: Count of received TCP segments containing errors. For example,
600  *            bad TCP checksum.
601  * @rx_pause_count: Count of number of pause quanta that the MAC has been in
602  *            the paused state. Recall, one pause quantum equates to 512
603  *            bit times.
604  * @rx_pause_ctrl_frms: Count of received MAC PAUSE control frames.
605  * @rx_unsup_ctrl_frms: Count of received MAC control frames that do not
606  *            contain the PAUSE opcode. The sum of RX_PAUSE_CTRL_FRMS and
607  *            this register is a count of all received MAC control frames.
608  *            Note: This stat may be configured to count all layer 2 errors
609  *            (i.e. length errors and FCS errors).
610  * @rx_fcs_err_frms: Count of received MAC frames that do not pass FCS. Does
611  *            not include frames received with frame-too-long or
612  *            frame-too-short error.
613  * @rx_in_rng_len_err_frms: Count of received frames with a length/type field
614  *            value between 46 (42 for VLAN-tagged frames) and 1500 (also 1500
615  *            for VLAN-tagged frames), inclusive, that does not match the
616  *            number of data octets (including pad) received. Also contains
617  *            a count of received frames with a length/type field less than
618  *            46 (42 for VLAN-tagged frames) and the number of data octets
619  *            (including pad) received is greater than 46 (42 for VLAN-tagged
620  *            frames).
621  * @rx_out_rng_len_err_frms:  Count of received frames with length/type field
622  *            between 1501 and 1535 decimal, inclusive.
623  * @rx_drop_frms: Count of received frames that could not be passed to the host.
624  *            See PORTn_RX_L2_MGMT_DISCARD, PORTn_RX_RPA_DISCARD,
625  *            PORTn_RX_TRASH_DISCARD, PORTn_RX_RTS_DISCARD, PORTn_RX_RED_DISCARD
626  *            for a list of reasons. Because the RMAC drops one frame at a time,
627  *            this stat also indicates the number of drop events.
628  * @rx_discarded_frms: Count of received frames containing
629  *              any error that prevents
630  *            them from being passed to the system. See PORTn_RX_FCS_DISCARD,
631  *            PORTn_RX_LEN_DISCARD, and PORTn_RX_SWITCH_DISCARD for a list of
632  *            reasons.
633  * @rx_drop_ip: Count of received IP datagrams that could not be passed to the
634  *            host. See PORTn_RX_DROP_FRMS for a list of reasons.
635  * @rx_drop_udp: Count of received UDP datagrams that are not delivered to the
636  *            host. See PORTn_RX_DROP_FRMS for a list of reasons.
637  * @rx_marker_pdu_frms: Count of valid Marker PDUs received on this Aggregation
638  *            port.
639  * @rx_lacpdu_frms: Count of valid LACPDUs received on this Aggregation port.
640  * @rx_unknown_pdu_frms: Count of received frames (on this Aggregation port)
641  *            that carry the Slow Protocols EtherType, but contain an unknown
642  *            PDU. Or frames that contain the Slow Protocols group MAC address,
643  *            but do not carry the Slow Protocols EtherType.
644  * @rx_marker_resp_pdu_frms: Count of valid Marker Response PDUs received on
645  *            this Aggregation port.
646  * @rx_fcs_discard: Count of received frames that are discarded because the
647  *            FCS check failed.
648  * @rx_illegal_pdu_frms: Count of received frames (on this Aggregation port)
649  *            that carry the Slow Protocols EtherType, but contain a badly
650  *            formed PDU. Or frames that carry the Slow Protocols EtherType,
651  *            but contain an illegal value of Protocol Subtype.
652  * @rx_switch_discard: Count of received frames that are discarded by the
653  *            internal switch because they did not have an entry in the
654  *            Filtering Database. This includes frames that had an invalid
655  *            destination MAC address or VLAN ID. It also includes frames are
656  *            discarded because they did not satisfy the length requirements
657  *            of the target VPATH.
658  * @rx_len_discard: Count of received frames that are discarded because of an
659  *            invalid frame length (includes fragments, oversized frames and
660  *            mismatch between frame length and length/type field). This stat
661  *            can be configured
662  *            (see XMAC_STATS_GLOBAL_CFG.LEN_DISCARD_HANDLING).
663  * @rx_rpa_discard: Count of received frames that were discarded because the
664  *            receive protocol assist (RPA) discovered and error in the frame
665  *            or was unable to parse the frame.
666  * @rx_l2_mgmt_discard: Count of Layer 2 management frames (eg. pause frames,
667  *            Link Aggregation Control Protocol (LACP) frames, etc.) that are
668  *            discarded.
669  * @rx_rts_discard: Count of received frames that are discarded by the receive
670  *            traffic steering (RTS) logic. Includes those frame discarded
671  *            because the SSC response contradicted the switch table, because
672  *            the SSC timed out, or because the target queue could not fit the
673  *            frame.
674  * @rx_trash_discard: Count of received frames that are discarded because
675  *            receive traffic steering (RTS) steered the frame to the trash
676  *            queue.
677  * @rx_buff_full_discard: Count of received frames that are discarded because
678  *            internal buffers are full. Includes frames discarded because the
679  *            RTS logic is waiting for an SSC lookup that has no timeout bound.
680  *            Also, includes frames that are dropped because the MAC2FAU buffer
681  *            is nearly full -- this can happen if the external receive buffer
682  *            is full and the receive path is backing up.
683  * @rx_red_discard: Count of received frames that are discarded because of RED
684  *            (Random Early Discard).
685  * @rx_xgmii_ctrl_err_cnt: Maintains a count of unexpected or misplaced control
686  *            characters occuring between times of normal data transmission
687  *            (i.e. not included in RX_XGMII_DATA_ERR_CNT). This counter is
688  *            incremented when either -
689  *            1) The Reconciliation Sublayer (RS) is expecting one control
690  *               character and gets another (i.e. is expecting a Start
691  *               character, but gets another control character).
692  *            2) Start control character is not in lane 0
693  *            Only increments the count by one for each XGMII column.
694  * @rx_xgmii_data_err_cnt: Maintains a count of unexpected control characters
695  *            during normal data transmission. If the Reconciliation Sublayer
696  *            (RS) receives a control character, other than a terminate control
697  *            character, during receipt of data octets then this register is
698  *            incremented. Also increments if the start frame delimiter is not
699  *            found in the correct location. Only increments the count by one
700  *            for each XGMII column.
701  * @rx_xgmii_char1_match: Maintains a count of the number of XGMII characters
702  *            that match a pattern that is programmable through register
703  *            XMAC_STATS_RX_XGMII_CHAR_PORTn. By default, the pattern is set
704  *            to /E/ (i.e. the error character), thus the statistic tracks the
705  *            number of Error characters received at any time.
706  * @rx_xgmii_err_sym: Count of the number of symbol errors in the received
707  *            XGMII data (i.e. PHY indicates "Receive Error" on the XGMII).
708  *            Only includes symbol errors that are observed between the XGMII
709  *            Start Frame Delimiter and End Frame Delimiter, inclusive. And
710  *            only increments the count by one for each frame.
711  * @rx_xgmii_column1_match: Maintains a count of the number of XGMII columns
712  *            that match a pattern that is programmable through register
713  *            XMAC_STATS_RX_XGMII_COLUMN1_PORTn. By default, the pattern is set
714  *            to 4 x /E/ (i.e. a column containing all error characters), thus
715  *            the statistic tracks the number of Error columns received at any
716  *            time.
717  * @rx_xgmii_char2_match: Maintains a count of the number of XGMII characters
718  *            that match a pattern that is programmable through register
719  *            XMAC_STATS_RX_XGMII_CHAR_PORTn. By default, the pattern is set
720  *            to /E/ (i.e. the error character), thus the statistic tracks the
721  *            number of Error characters received at any time.
722  * @rx_local_fault: Maintains a count of the number of times that link
723  *            transitioned from "up" to "down" due to a local fault.
724  * @rx_xgmii_column2_match: Maintains a count of the number of XGMII columns
725  *            that match a pattern that is programmable through register
726  *            XMAC_STATS_RX_XGMII_COLUMN2_PORTn. By default, the pattern is set
727  *            to 4 x /E/ (i.e. a column containing all error characters), thus
728  *            the statistic tracks the number of Error columns received at any
729  *            time. If XMAC_STATS_RX_XGMII_BEHAV_COLUMN2_PORTn.NEAR_COL1 is set
730  *            to 1, then this stat increments when COLUMN2 is found within 'n'
731  *            clocks after COLUMN1. Here, 'n' is defined by
732  *            XMAC_STATS_RX_XGMII_BEHAV_COLUMN2_PORTn.NUM_COL (if 'n' is set to
733  *            0, then it means to search anywhere for COLUMN2).
734  * @rx_jettison: Count of received frames that are jettisoned because internal
735  *            buffers are full.
736  * @rx_remote_fault: Maintains a count of the number of times that link
737  *            transitioned from "up" to "down" due to a remote fault.
738  *
739  * XMAC Port Statistics.
740  */
741 struct vxge_hw_xmac_port_stats {
742 /*0x000*/               u64     tx_ttl_frms;
743 /*0x008*/               u64     tx_ttl_octets;
744 /*0x010*/               u64     tx_data_octets;
745 /*0x018*/               u64     tx_mcast_frms;
746 /*0x020*/               u64     tx_bcast_frms;
747 /*0x028*/               u64     tx_ucast_frms;
748 /*0x030*/               u64     tx_tagged_frms;
749 /*0x038*/               u64     tx_vld_ip;
750 /*0x040*/               u64     tx_vld_ip_octets;
751 /*0x048*/               u64     tx_icmp;
752 /*0x050*/               u64     tx_tcp;
753 /*0x058*/               u64     tx_rst_tcp;
754 /*0x060*/               u64     tx_udp;
755 /*0x068*/               u32     tx_parse_error;
756 /*0x06c*/               u32     tx_unknown_protocol;
757 /*0x070*/               u64     tx_pause_ctrl_frms;
758 /*0x078*/               u32     tx_marker_pdu_frms;
759 /*0x07c*/               u32     tx_lacpdu_frms;
760 /*0x080*/               u32     tx_drop_ip;
761 /*0x084*/               u32     tx_marker_resp_pdu_frms;
762 /*0x088*/               u32     tx_xgmii_char2_match;
763 /*0x08c*/               u32     tx_xgmii_char1_match;
764 /*0x090*/               u32     tx_xgmii_column2_match;
765 /*0x094*/               u32     tx_xgmii_column1_match;
766 /*0x098*/               u32     unused1;
767 /*0x09c*/               u16     tx_any_err_frms;
768 /*0x09e*/               u16     tx_drop_frms;
769 /*0x0a0*/               u64     rx_ttl_frms;
770 /*0x0a8*/               u64     rx_vld_frms;
771 /*0x0b0*/               u64     rx_offload_frms;
772 /*0x0b8*/               u64     rx_ttl_octets;
773 /*0x0c0*/               u64     rx_data_octets;
774 /*0x0c8*/               u64     rx_offload_octets;
775 /*0x0d0*/               u64     rx_vld_mcast_frms;
776 /*0x0d8*/               u64     rx_vld_bcast_frms;
777 /*0x0e0*/               u64     rx_accepted_ucast_frms;
778 /*0x0e8*/               u64     rx_accepted_nucast_frms;
779 /*0x0f0*/               u64     rx_tagged_frms;
780 /*0x0f8*/               u64     rx_long_frms;
781 /*0x100*/               u64     rx_usized_frms;
782 /*0x108*/               u64     rx_osized_frms;
783 /*0x110*/               u64     rx_frag_frms;
784 /*0x118*/               u64     rx_jabber_frms;
785 /*0x120*/               u64     rx_ttl_64_frms;
786 /*0x128*/               u64     rx_ttl_65_127_frms;
787 /*0x130*/               u64     rx_ttl_128_255_frms;
788 /*0x138*/               u64     rx_ttl_256_511_frms;
789 /*0x140*/               u64     rx_ttl_512_1023_frms;
790 /*0x148*/               u64     rx_ttl_1024_1518_frms;
791 /*0x150*/               u64     rx_ttl_1519_4095_frms;
792 /*0x158*/               u64     rx_ttl_4096_8191_frms;
793 /*0x160*/               u64     rx_ttl_8192_max_frms;
794 /*0x168*/               u64     rx_ttl_gt_max_frms;
795 /*0x170*/               u64     rx_ip;
796 /*0x178*/               u64     rx_accepted_ip;
797 /*0x180*/               u64     rx_ip_octets;
798 /*0x188*/               u64     rx_err_ip;
799 /*0x190*/               u64     rx_icmp;
800 /*0x198*/               u64     rx_tcp;
801 /*0x1a0*/               u64     rx_udp;
802 /*0x1a8*/               u64     rx_err_tcp;
803 /*0x1b0*/               u64     rx_pause_count;
804 /*0x1b8*/               u64     rx_pause_ctrl_frms;
805 /*0x1c0*/               u64     rx_unsup_ctrl_frms;
806 /*0x1c8*/               u64     rx_fcs_err_frms;
807 /*0x1d0*/               u64     rx_in_rng_len_err_frms;
808 /*0x1d8*/               u64     rx_out_rng_len_err_frms;
809 /*0x1e0*/               u64     rx_drop_frms;
810 /*0x1e8*/               u64     rx_discarded_frms;
811 /*0x1f0*/               u64     rx_drop_ip;
812 /*0x1f8*/               u64     rx_drop_udp;
813 /*0x200*/               u32     rx_marker_pdu_frms;
814 /*0x204*/               u32     rx_lacpdu_frms;
815 /*0x208*/               u32     rx_unknown_pdu_frms;
816 /*0x20c*/               u32     rx_marker_resp_pdu_frms;
817 /*0x210*/               u32     rx_fcs_discard;
818 /*0x214*/               u32     rx_illegal_pdu_frms;
819 /*0x218*/               u32     rx_switch_discard;
820 /*0x21c*/               u32     rx_len_discard;
821 /*0x220*/               u32     rx_rpa_discard;
822 /*0x224*/               u32     rx_l2_mgmt_discard;
823 /*0x228*/               u32     rx_rts_discard;
824 /*0x22c*/               u32     rx_trash_discard;
825 /*0x230*/               u32     rx_buff_full_discard;
826 /*0x234*/               u32     rx_red_discard;
827 /*0x238*/               u32     rx_xgmii_ctrl_err_cnt;
828 /*0x23c*/               u32     rx_xgmii_data_err_cnt;
829 /*0x240*/               u32     rx_xgmii_char1_match;
830 /*0x244*/               u32     rx_xgmii_err_sym;
831 /*0x248*/               u32     rx_xgmii_column1_match;
832 /*0x24c*/               u32     rx_xgmii_char2_match;
833 /*0x250*/               u32     rx_local_fault;
834 /*0x254*/               u32     rx_xgmii_column2_match;
835 /*0x258*/               u32     rx_jettison;
836 /*0x25c*/               u32     rx_remote_fault;
837 } __packed;
838
839 /**
840  * struct vxge_hw_xmac_vpath_tx_stats - XMAC Vpath Tx Statistics
841  *
842  * @tx_ttl_eth_frms: Count of successfully transmitted MAC frames.
843  * @tx_ttl_eth_octets: Count of total octets of transmitted frames,
844  *             not including framing characters (i.e. less framing bits).
845  *             To determine the total octets of transmitted frames, including
846  *             framing characters, multiply TX_TTL_ETH_FRMS by 8 and add it to
847  *             this stat (the device always prepends 8 bytes of preamble for
848  *             each frame)
849  * @tx_data_octets: Count of data and padding octets of successfully transmitted
850  *             frames.
851  * @tx_mcast_frms: Count of successfully transmitted frames to a group address
852  *             other than the broadcast address.
853  * @tx_bcast_frms: Count of successfully transmitted frames to the broadcast
854  *             group address.
855  * @tx_ucast_frms: Count of transmitted frames containing a unicast address.
856  *             Includes discarded frames that are not sent to the network.
857  * @tx_tagged_frms: Count of transmitted frames containing a VLAN tag.
858  * @tx_vld_ip: Count of transmitted IP datagrams that are passed to the network.
859  * @tx_vld_ip_octets: Count of total octets of transmitted IP datagrams that
860  *            are passed to the network.
861  * @tx_icmp: Count of transmitted ICMP messages. Includes messages not sent due
862  *            to problems within ICMP.
863  * @tx_tcp: Count of transmitted TCP segments. Does not include segments
864  *            containing retransmitted octets.
865  * @tx_rst_tcp: Count of transmitted TCP segments containing the RST flag.
866  * @tx_udp: Count of transmitted UDP datagrams.
867  * @tx_unknown_protocol: Increments when the TPA encounters an unknown protocol,
868  *            such as a new IPv6 extension header, or an unsupported Routing
869  *            Type. The packet still has a checksum calculated but it may be
870  *            incorrect.
871  * @tx_lost_ip: Count of transmitted IP datagrams that could not be passed
872  *            to the network. Increments because of: 1) An internal processing
873  *            error (such as an uncorrectable ECC error). 2) A frame parsing
874  *            error during IP checksum calculation.
875  * @tx_parse_error: Increments when the TPA is unable to parse a packet. This
876  *            generally occurs when a packet is corrupt somehow, including
877  *            packets that have IP version mismatches, invalid Layer 2 control
878  *            fields, etc. L3/L4 checksums are not offloaded, but the packet
879  *            is still be transmitted.
880  * @tx_tcp_offload: For frames belonging to offloaded sessions only, a count
881  *            of transmitted TCP segments. Does not include segments containing
882  *            retransmitted octets.
883  * @tx_retx_tcp_offload: For frames belonging to offloaded sessions only, the
884  *            total number of segments retransmitted. Retransmitted segments
885  *            that are sourced by the host are counted by the host.
886  * @tx_lost_ip_offload: For frames belonging to offloaded sessions only, a count
887  *            of transmitted IP datagrams that could not be passed to the
888  *            network.
889  *
890  * XMAC Vpath TX Statistics.
891  */
892 struct vxge_hw_xmac_vpath_tx_stats {
893         u64     tx_ttl_eth_frms;
894         u64     tx_ttl_eth_octets;
895         u64     tx_data_octets;
896         u64     tx_mcast_frms;
897         u64     tx_bcast_frms;
898         u64     tx_ucast_frms;
899         u64     tx_tagged_frms;
900         u64     tx_vld_ip;
901         u64     tx_vld_ip_octets;
902         u64     tx_icmp;
903         u64     tx_tcp;
904         u64     tx_rst_tcp;
905         u64     tx_udp;
906         u32     tx_unknown_protocol;
907         u32     tx_lost_ip;
908         u32     unused1;
909         u32     tx_parse_error;
910         u64     tx_tcp_offload;
911         u64     tx_retx_tcp_offload;
912         u64     tx_lost_ip_offload;
913 } __packed;
914
915 /**
916  * struct vxge_hw_xmac_vpath_rx_stats - XMAC Vpath RX Statistics
917  *
918  * @rx_ttl_eth_frms: Count of successfully received MAC frames.
919  * @rx_vld_frms: Count of successfully received MAC frames. Does not include
920  *            frames received with frame-too-long, FCS, or length errors.
921  * @rx_offload_frms: Count of offloaded received frames that are passed to
922  *            the host.
923  * @rx_ttl_eth_octets: Count of total octets of received frames, not including
924  *            framing characters (i.e. less framing bits). Only counts octets
925  *            of frames that are at least 14 bytes (18 bytes for VLAN-tagged)
926  *            before FCS. To determine the total octets of received frames,
927  *            including framing characters, multiply RX_TTL_ETH_FRMS by 8 and
928  *            add it to this stat (the stat RX_TTL_ETH_FRMS only counts frames
929  *            that have the required 8 bytes of preamble).
930  * @rx_data_octets: Count of data and padding octets of successfully received
931  *            frames. Does not include frames received with frame-too-long,
932  *            FCS, or length errors.
933  * @rx_offload_octets: Count of total octets, not including framing characters,
934  *            of offloaded received frames that are passed to the host.
935  * @rx_vld_mcast_frms: Count of successfully received MAC frames containing a
936  *            nonbroadcast group address. Does not include frames received with
937  *            frame-too-long, FCS, or length errors.
938  * @rx_vld_bcast_frms: Count of successfully received MAC frames containing the
939  *            broadcast group address. Does not include frames received with
940  *            frame-too-long, FCS, or length errors.
941  * @rx_accepted_ucast_frms: Count of successfully received frames containing
942  *            a unicast address. Only includes frames that are passed to the
943  *            system.
944  * @rx_accepted_nucast_frms: Count of successfully received frames containing
945  *            a non-unicast (broadcast or multicast) address. Only includes
946  *            frames that are passed to the system. Could include, for instance,
947  *            non-unicast frames that contain FCS errors if the MAC_ERROR_CFG
948  *            register is set to pass FCS-errored frames to the host.
949  * @rx_tagged_frms: Count of received frames containing a VLAN tag.
950  * @rx_long_frms: Count of received frames that are longer than RX_MAX_PYLD_LEN
951  *            + 18 bytes (+ 22 bytes if VLAN-tagged).
952  * @rx_usized_frms: Count of received frames of length (including FCS, but not
953  *            framing bits) less than 64 octets, that are otherwise well-formed.
954  *            In other words, counts runts.
955  * @rx_osized_frms: Count of received frames of length (including FCS, but not
956  *            framing bits) more than 1518 octets, that are otherwise
957  *            well-formed.
958  * @rx_frag_frms: Count of received frames of length (including FCS, but not
959  *            framing bits) less than 64 octets that had bad FCS.
960  *            In other words, counts fragments.
961  * @rx_jabber_frms: Count of received frames of length (including FCS, but not
962  *            framing bits) more than 1518 octets that had bad FCS. In other
963  *            words, counts jabbers.
964  * @rx_ttl_64_frms: Count of total received MAC frames with length (including
965  *            FCS, but not framing bits) of exactly 64 octets. Includes frames
966  *            received with frame-too-long, FCS, or length errors.
967  * @rx_ttl_65_127_frms: Count of total received MAC frames
968  *              with length (including
969  *            FCS, but not framing bits) of between 65 and 127 octets inclusive.
970  *            Includes frames received with frame-too-long, FCS,
971  *            or length errors.
972  * @rx_ttl_128_255_frms: Count of total received MAC frames with length
973  *            (including FCS, but not framing bits)
974  *            of between 128 and 255 octets
975  *            inclusive. Includes frames received with frame-too-long, FCS,
976  *            or length errors.
977  * @rx_ttl_256_511_frms: Count of total received MAC frames with length
978  *            (including FCS, but not framing bits)
979  *            of between 256 and 511 octets
980  *            inclusive. Includes frames received with frame-too-long, FCS, or
981  *            length errors.
982  * @rx_ttl_512_1023_frms: Count of total received MAC frames with length
983  *            (including FCS, but not framing bits) of between 512 and 1023
984  *            octets inclusive. Includes frames received with frame-too-long,
985  *            FCS, or length errors.
986  * @rx_ttl_1024_1518_frms: Count of total received MAC frames with length
987  *            (including FCS, but not framing bits) of between 1024 and 1518
988  *            octets inclusive. Includes frames received with frame-too-long,
989  *            FCS, or length errors.
990  * @rx_ttl_1519_4095_frms: Count of total received MAC frames with length
991  *            (including FCS, but not framing bits) of between 1519 and 4095
992  *            octets inclusive. Includes frames received with frame-too-long,
993  *            FCS, or length errors.
994  * @rx_ttl_4096_8191_frms: Count of total received MAC frames with length
995  *            (including FCS, but not framing bits) of between 4096 and 8191
996  *            octets inclusive. Includes frames received with frame-too-long,
997  *            FCS, or length errors.
998  * @rx_ttl_8192_max_frms: Count of total received MAC frames with length
999  *            (including FCS, but not framing bits) of between 8192 and
1000  *            RX_MAX_PYLD_LEN+18 octets inclusive. Includes frames received
1001  *            with frame-too-long, FCS, or length errors.
1002  * @rx_ttl_gt_max_frms: Count of total received MAC frames with length
1003  *            (including FCS, but not framing bits) exceeding RX_MAX_PYLD_LEN+18
1004  *            (+22 bytes if VLAN-tagged) octets inclusive. Includes frames
1005  *            received with frame-too-long, FCS, or length errors.
1006  * @rx_ip: Count of received IP datagrams. Includes errored IP datagrams.
1007  * @rx_accepted_ip: Count of received IP datagrams that
1008  *              are passed to the system.
1009  * @rx_ip_octets: Count of number of octets in received IP datagrams.
1010  *            Includes errored IP datagrams.
1011  * @rx_err_ip: Count of received IP datagrams containing errors. For example,
1012  *            bad IP checksum.
1013  * @rx_icmp: Count of received ICMP messages. Includes errored ICMP messages.
1014  * @rx_tcp: Count of received TCP segments. Includes errored TCP segments.
1015  *             Note: This stat contains a count of all received TCP segments,
1016  *             regardless of whether or not they pertain to an established
1017  *             connection.
1018  * @rx_udp: Count of received UDP datagrams.
1019  * @rx_err_tcp: Count of received TCP segments containing errors. For example,
1020  *             bad TCP checksum.
1021  * @rx_lost_frms: Count of received frames that could not be passed to the host.
1022  *             See RX_QUEUE_FULL_DISCARD and RX_RED_DISCARD
1023  *             for a list of reasons.
1024  * @rx_lost_ip: Count of received IP datagrams that could not be passed to
1025  *             the host. See RX_LOST_FRMS for a list of reasons.
1026  * @rx_lost_ip_offload: For frames belonging to offloaded sessions only, a count
1027  *             of received IP datagrams that could not be passed to the host.
1028  *             See RX_LOST_FRMS for a list of reasons.
1029  * @rx_various_discard: Count of received frames that are discarded because
1030  *             the target receive queue is full.
1031  * @rx_sleep_discard: Count of received frames that are discarded because the
1032  *            target VPATH is asleep (a Wake-on-LAN magic packet can be used
1033  *            to awaken the VPATH).
1034  * @rx_red_discard: Count of received frames that are discarded because of RED
1035  *            (Random Early Discard).
1036  * @rx_queue_full_discard: Count of received frames that are discarded because
1037  *             the target receive queue is full.
1038  * @rx_mpa_ok_frms: Count of received frames that pass the MPA checks.
1039  *
1040  * XMAC Vpath RX Statistics.
1041  */
1042 struct vxge_hw_xmac_vpath_rx_stats {
1043         u64     rx_ttl_eth_frms;
1044         u64     rx_vld_frms;
1045         u64     rx_offload_frms;
1046         u64     rx_ttl_eth_octets;
1047         u64     rx_data_octets;
1048         u64     rx_offload_octets;
1049         u64     rx_vld_mcast_frms;
1050         u64     rx_vld_bcast_frms;
1051         u64     rx_accepted_ucast_frms;
1052         u64     rx_accepted_nucast_frms;
1053         u64     rx_tagged_frms;
1054         u64     rx_long_frms;
1055         u64     rx_usized_frms;
1056         u64     rx_osized_frms;
1057         u64     rx_frag_frms;
1058         u64     rx_jabber_frms;
1059         u64     rx_ttl_64_frms;
1060         u64     rx_ttl_65_127_frms;
1061         u64     rx_ttl_128_255_frms;
1062         u64     rx_ttl_256_511_frms;
1063         u64     rx_ttl_512_1023_frms;
1064         u64     rx_ttl_1024_1518_frms;
1065         u64     rx_ttl_1519_4095_frms;
1066         u64     rx_ttl_4096_8191_frms;
1067         u64     rx_ttl_8192_max_frms;
1068         u64     rx_ttl_gt_max_frms;
1069         u64     rx_ip;
1070         u64     rx_accepted_ip;
1071         u64     rx_ip_octets;
1072         u64     rx_err_ip;
1073         u64     rx_icmp;
1074         u64     rx_tcp;
1075         u64     rx_udp;
1076         u64     rx_err_tcp;
1077         u64     rx_lost_frms;
1078         u64     rx_lost_ip;
1079         u64     rx_lost_ip_offload;
1080         u16     rx_various_discard;
1081         u16     rx_sleep_discard;
1082         u16     rx_red_discard;
1083         u16     rx_queue_full_discard;
1084         u64     rx_mpa_ok_frms;
1085 } __packed;
1086
1087 /**
1088  * struct vxge_hw_xmac_stats - XMAC Statistics
1089  *
1090  * @aggr_stats: Statistics on aggregate port(port 0, port 1)
1091  * @port_stats: Staticstics on ports(wire 0, wire 1, lag)
1092  * @vpath_tx_stats: Per vpath XMAC TX stats
1093  * @vpath_rx_stats: Per vpath XMAC RX stats
1094  *
1095  * XMAC Statistics.
1096  */
1097 struct vxge_hw_xmac_stats {
1098         struct vxge_hw_xmac_aggr_stats
1099                                 aggr_stats[VXGE_HW_MAC_MAX_MAC_PORT_ID];
1100         struct vxge_hw_xmac_port_stats
1101                                 port_stats[VXGE_HW_MAC_MAX_MAC_PORT_ID+1];
1102         struct vxge_hw_xmac_vpath_tx_stats
1103                                 vpath_tx_stats[VXGE_HW_MAX_VIRTUAL_PATHS];
1104         struct vxge_hw_xmac_vpath_rx_stats
1105                                 vpath_rx_stats[VXGE_HW_MAX_VIRTUAL_PATHS];
1106 };
1107
1108 /**
1109  * struct vxge_hw_vpath_stats_hw_info - Titan vpath hardware statistics.
1110  * @ini_num_mwr_sent: The number of PCI memory writes initiated by the PIC block
1111  *             for the given VPATH
1112  * @ini_num_mrd_sent: The number of PCI memory reads initiated by the PIC block
1113  * @ini_num_cpl_rcvd: The number of PCI read completions received by the
1114  *             PIC block
1115  * @ini_num_mwr_byte_sent: The number of PCI memory write bytes sent by the PIC
1116  *             block to the host
1117  * @ini_num_cpl_byte_rcvd: The number of PCI read completion bytes received by
1118  *             the PIC block
1119  * @wrcrdtarb_xoff: TBD
1120  * @rdcrdtarb_xoff: TBD
1121  * @vpath_genstats_count0: TBD
1122  * @vpath_genstats_count1: TBD
1123  * @vpath_genstats_count2: TBD
1124  * @vpath_genstats_count3: TBD
1125  * @vpath_genstats_count4: TBD
1126  * @vpath_gennstats_count5: TBD
1127  * @tx_stats: Transmit stats
1128  * @rx_stats: Receive stats
1129  * @prog_event_vnum1: Programmable statistic. Increments when internal logic
1130  *             detects a certain event. See register
1131  *             XMAC_STATS_CFG.EVENT_VNUM1_CFG for more information.
1132  * @prog_event_vnum0: Programmable statistic. Increments when internal logic
1133  *             detects a certain event. See register
1134  *             XMAC_STATS_CFG.EVENT_VNUM0_CFG for more information.
1135  * @prog_event_vnum3: Programmable statistic. Increments when internal logic
1136  *             detects a certain event. See register
1137  *             XMAC_STATS_CFG.EVENT_VNUM3_CFG for more information.
1138  * @prog_event_vnum2: Programmable statistic. Increments when internal logic
1139  *             detects a certain event. See register
1140  *             XMAC_STATS_CFG.EVENT_VNUM2_CFG for more information.
1141  * @rx_multi_cast_frame_discard: TBD
1142  * @rx_frm_transferred: TBD
1143  * @rxd_returned: TBD
1144  * @rx_mpa_len_fail_frms: Count of received frames
1145  *              that fail the MPA length check
1146  * @rx_mpa_mrk_fail_frms: Count of received frames
1147  *              that fail the MPA marker check
1148  * @rx_mpa_crc_fail_frms: Count of received frames that fail the MPA CRC check
1149  * @rx_permitted_frms: Count of frames that pass through the FAU and on to the
1150  *             frame buffer (and subsequently to the host).
1151  * @rx_vp_reset_discarded_frms: Count of receive frames that are discarded
1152  *             because the VPATH is in reset
1153  * @rx_wol_frms: Count of received "magic packet" frames. Stat increments
1154  *             whenever the received frame matches the VPATH's Wake-on-LAN
1155  *             signature(s) CRC.
1156  * @tx_vp_reset_discarded_frms: Count of transmit frames that are discarded
1157  *             because the VPATH is in reset. Includes frames that are discarded
1158  *             because the current VPIN does not match that VPIN of the frame
1159  *
1160  * Titan vpath hardware statistics.
1161  */
1162 struct vxge_hw_vpath_stats_hw_info {
1163 /*0x000*/       u32 ini_num_mwr_sent;
1164 /*0x004*/       u32 unused1;
1165 /*0x008*/       u32 ini_num_mrd_sent;
1166 /*0x00c*/       u32 unused2;
1167 /*0x010*/       u32 ini_num_cpl_rcvd;
1168 /*0x014*/       u32 unused3;
1169 /*0x018*/       u64 ini_num_mwr_byte_sent;
1170 /*0x020*/       u64 ini_num_cpl_byte_rcvd;
1171 /*0x028*/       u32 wrcrdtarb_xoff;
1172 /*0x02c*/       u32 unused4;
1173 /*0x030*/       u32 rdcrdtarb_xoff;
1174 /*0x034*/       u32 unused5;
1175 /*0x038*/       u32 vpath_genstats_count0;
1176 /*0x03c*/       u32 vpath_genstats_count1;
1177 /*0x040*/       u32 vpath_genstats_count2;
1178 /*0x044*/       u32 vpath_genstats_count3;
1179 /*0x048*/       u32 vpath_genstats_count4;
1180 /*0x04c*/       u32 unused6;
1181 /*0x050*/       u32 vpath_genstats_count5;
1182 /*0x054*/       u32 unused7;
1183 /*0x058*/       struct vxge_hw_xmac_vpath_tx_stats tx_stats;
1184 /*0x0e8*/       struct vxge_hw_xmac_vpath_rx_stats rx_stats;
1185 /*0x220*/       u64 unused9;
1186 /*0x228*/       u32 prog_event_vnum1;
1187 /*0x22c*/       u32 prog_event_vnum0;
1188 /*0x230*/       u32 prog_event_vnum3;
1189 /*0x234*/       u32 prog_event_vnum2;
1190 /*0x238*/       u16 rx_multi_cast_frame_discard;
1191 /*0x23a*/       u8 unused10[6];
1192 /*0x240*/       u32 rx_frm_transferred;
1193 /*0x244*/       u32 unused11;
1194 /*0x248*/       u16 rxd_returned;
1195 /*0x24a*/       u8 unused12[6];
1196 /*0x252*/       u16 rx_mpa_len_fail_frms;
1197 /*0x254*/       u16 rx_mpa_mrk_fail_frms;
1198 /*0x256*/       u16 rx_mpa_crc_fail_frms;
1199 /*0x258*/       u16 rx_permitted_frms;
1200 /*0x25c*/       u64 rx_vp_reset_discarded_frms;
1201 /*0x25e*/       u64 rx_wol_frms;
1202 /*0x260*/       u64 tx_vp_reset_discarded_frms;
1203 } __packed;
1204
1205
1206 /**
1207  * struct vxge_hw_device_stats_mrpcim_info - Titan mrpcim hardware statistics.
1208  * @pic.ini_rd_drop      0x0000          4       Number of DMA reads initiated
1209  *  by the adapter that were discarded because the VPATH is out of service
1210  * @pic.ini_wr_drop     0x0004  4       Number of DMA writes initiated by the
1211  *  adapter that were discared because the VPATH is out of service
1212  * @pic.wrcrdtarb_ph_crdt_depleted[vplane0]     0x0008  4       Number of times
1213  *  the posted header credits for upstream PCI writes were depleted
1214  * @pic.wrcrdtarb_ph_crdt_depleted[vplane1]     0x0010  4       Number of times
1215  *  the posted header credits for upstream PCI writes were depleted
1216  * @pic.wrcrdtarb_ph_crdt_depleted[vplane2]     0x0018  4       Number of times
1217  *  the posted header credits for upstream PCI writes were depleted
1218  * @pic.wrcrdtarb_ph_crdt_depleted[vplane3]     0x0020  4       Number of times
1219  *  the posted header credits for upstream PCI writes were depleted
1220  * @pic.wrcrdtarb_ph_crdt_depleted[vplane4]     0x0028  4       Number of times
1221  *  the posted header credits for upstream PCI writes were depleted
1222  * @pic.wrcrdtarb_ph_crdt_depleted[vplane5]     0x0030  4       Number of times
1223  *  the posted header credits for upstream PCI writes were depleted
1224  * @pic.wrcrdtarb_ph_crdt_depleted[vplane6]     0x0038  4       Number of times
1225  *  the posted header credits for upstream PCI writes were depleted
1226  * @pic.wrcrdtarb_ph_crdt_depleted[vplane7]     0x0040  4       Number of times
1227  *  the posted header credits for upstream PCI writes were depleted
1228  * @pic.wrcrdtarb_ph_crdt_depleted[vplane8]     0x0048  4       Number of times
1229  *  the posted header credits for upstream PCI writes were depleted
1230  * @pic.wrcrdtarb_ph_crdt_depleted[vplane9]     0x0050  4       Number of times
1231  *  the posted header credits for upstream PCI writes were depleted
1232  * @pic.wrcrdtarb_ph_crdt_depleted[vplane10]    0x0058  4       Number of times
1233  *  the posted header credits for upstream PCI writes were depleted
1234  * @pic.wrcrdtarb_ph_crdt_depleted[vplane11]    0x0060  4       Number of times
1235  *  the posted header credits for upstream PCI writes were depleted
1236  * @pic.wrcrdtarb_ph_crdt_depleted[vplane12]    0x0068  4       Number of times
1237  *  the posted header credits for upstream PCI writes were depleted
1238  * @pic.wrcrdtarb_ph_crdt_depleted[vplane13]    0x0070  4       Number of times
1239  *  the posted header credits for upstream PCI writes were depleted
1240  * @pic.wrcrdtarb_ph_crdt_depleted[vplane14]    0x0078  4       Number of times
1241  *  the posted header credits for upstream PCI writes were depleted
1242  * @pic.wrcrdtarb_ph_crdt_depleted[vplane15]    0x0080  4       Number of times
1243  *  the posted header credits for upstream PCI writes were depleted
1244  * @pic.wrcrdtarb_ph_crdt_depleted[vplane16]    0x0088  4       Number of times
1245  *  the posted header credits for upstream PCI writes were depleted
1246  * @pic.wrcrdtarb_pd_crdt_depleted[vplane0]     0x0090  4       Number of times
1247  *  the posted data credits for upstream PCI writes were depleted
1248  * @pic.wrcrdtarb_pd_crdt_depleted[vplane1]     0x0098  4       Number of times
1249  *  the posted data credits for upstream PCI writes were depleted
1250  * @pic.wrcrdtarb_pd_crdt_depleted[vplane2]     0x00a0  4       Number of times
1251  *  the posted data credits for upstream PCI writes were depleted
1252  * @pic.wrcrdtarb_pd_crdt_depleted[vplane3]     0x00a8  4       Number of times
1253  *  the posted data credits for upstream PCI writes were depleted
1254  * @pic.wrcrdtarb_pd_crdt_depleted[vplane4]     0x00b0  4       Number of times
1255  *  the posted data credits for upstream PCI writes were depleted
1256  * @pic.wrcrdtarb_pd_crdt_depleted[vplane5]     0x00b8  4       Number of times
1257  *  the posted data credits for upstream PCI writes were depleted
1258  * @pic.wrcrdtarb_pd_crdt_depleted[vplane6]     0x00c0  4       Number of times
1259  *  the posted data credits for upstream PCI writes were depleted
1260  * @pic.wrcrdtarb_pd_crdt_depleted[vplane7]     0x00c8  4       Number of times
1261  *  the posted data credits for upstream PCI writes were depleted
1262  * @pic.wrcrdtarb_pd_crdt_depleted[vplane8]     0x00d0  4       Number of times
1263  *  the posted data credits for upstream PCI writes were depleted
1264  * @pic.wrcrdtarb_pd_crdt_depleted[vplane9]     0x00d8  4       Number of times
1265  *  the posted data credits for upstream PCI writes were depleted
1266  * @pic.wrcrdtarb_pd_crdt_depleted[vplane10]    0x00e0  4       Number of times
1267  *  the posted data credits for upstream PCI writes were depleted
1268  * @pic.wrcrdtarb_pd_crdt_depleted[vplane11]    0x00e8  4       Number of times
1269  *  the posted data credits for upstream PCI writes were depleted
1270  * @pic.wrcrdtarb_pd_crdt_depleted[vplane12]    0x00f0  4       Number of times
1271  *  the posted data credits for upstream PCI writes were depleted
1272  * @pic.wrcrdtarb_pd_crdt_depleted[vplane13]    0x00f8  4       Number of times
1273  *  the posted data credits for upstream PCI writes were depleted
1274  * @pic.wrcrdtarb_pd_crdt_depleted[vplane14]    0x0100  4       Number of times
1275  *  the posted data credits for upstream PCI writes were depleted
1276  * @pic.wrcrdtarb_pd_crdt_depleted[vplane15]    0x0108  4       Number of times
1277  *  the posted data credits for upstream PCI writes were depleted
1278  * @pic.wrcrdtarb_pd_crdt_depleted[vplane16]    0x0110  4       Number of times
1279  *  the posted data credits for upstream PCI writes were depleted
1280  * @pic.rdcrdtarb_nph_crdt_depleted[vplane0]    0x0118  4       Number of times
1281  *  the non-posted header credits for upstream PCI reads were depleted
1282  * @pic.rdcrdtarb_nph_crdt_depleted[vplane1]    0x0120  4       Number of times
1283  *  the non-posted header credits for upstream PCI reads were depleted
1284  * @pic.rdcrdtarb_nph_crdt_depleted[vplane2]    0x0128  4       Number of times
1285  *  the non-posted header credits for upstream PCI reads were depleted
1286  * @pic.rdcrdtarb_nph_crdt_depleted[vplane3]    0x0130  4       Number of times
1287  *  the non-posted header credits for upstream PCI reads were depleted
1288  * @pic.rdcrdtarb_nph_crdt_depleted[vplane4]    0x0138  4       Number of times
1289  *  the non-posted header credits for upstream PCI reads were depleted
1290  * @pic.rdcrdtarb_nph_crdt_depleted[vplane5]    0x0140  4       Number of times
1291  *  the non-posted header credits for upstream PCI reads were depleted
1292  * @pic.rdcrdtarb_nph_crdt_depleted[vplane6]    0x0148  4       Number of times
1293  *  the non-posted header credits for upstream PCI reads were depleted
1294  * @pic.rdcrdtarb_nph_crdt_depleted[vplane7]    0x0150  4       Number of times
1295  *  the non-posted header credits for upstream PCI reads were depleted
1296  * @pic.rdcrdtarb_nph_crdt_depleted[vplane8]    0x0158  4       Number of times
1297  *  the non-posted header credits for upstream PCI reads were depleted
1298  * @pic.rdcrdtarb_nph_crdt_depleted[vplane9]    0x0160  4       Number of times
1299  *  the non-posted header credits for upstream PCI reads were depleted
1300  * @pic.rdcrdtarb_nph_crdt_depleted[vplane10]   0x0168  4       Number of times
1301  *  the non-posted header credits for upstream PCI reads were depleted
1302  * @pic.rdcrdtarb_nph_crdt_depleted[vplane11]   0x0170  4       Number of times
1303  *  the non-posted header credits for upstream PCI reads were depleted
1304  * @pic.rdcrdtarb_nph_crdt_depleted[vplane12]   0x0178  4       Number of times
1305  *  the non-posted header credits for upstream PCI reads were depleted
1306  * @pic.rdcrdtarb_nph_crdt_depleted[vplane13]   0x0180  4       Number of times
1307  *  the non-posted header credits for upstream PCI reads were depleted
1308  * @pic.rdcrdtarb_nph_crdt_depleted[vplane14]   0x0188  4       Number of times
1309  *  the non-posted header credits for upstream PCI reads were depleted
1310  * @pic.rdcrdtarb_nph_crdt_depleted[vplane15]   0x0190  4       Number of times
1311  *  the non-posted header credits for upstream PCI reads were depleted
1312  * @pic.rdcrdtarb_nph_crdt_depleted[vplane16]   0x0198  4       Number of times
1313  *  the non-posted header credits for upstream PCI reads were depleted
1314  * @pic.ini_rd_vpin_drop        0x01a0  4       Number of DMA reads initiated by
1315  *  the adapter that were discarded because the VPATH instance number does
1316  *  not match
1317  * @pic.ini_wr_vpin_drop        0x01a4  4       Number of DMA writes initiated
1318  *  by the adapter that were discarded because the VPATH instance number
1319  *  does not match
1320  * @pic.genstats_count0         0x01a8  4       Configurable statistic #1. Refer
1321  *  to the GENSTATS0_CFG for information on configuring this statistic
1322  * @pic.genstats_count1         0x01ac  4       Configurable statistic #2. Refer
1323  *  to the GENSTATS1_CFG for information on configuring this statistic
1324  * @pic.genstats_count2         0x01b0  4       Configurable statistic #3. Refer
1325  *  to the GENSTATS2_CFG for information on configuring this statistic
1326  * @pic.genstats_count3         0x01b4  4       Configurable statistic #4. Refer
1327  *  to the GENSTATS3_CFG for information on configuring this statistic
1328  * @pic.genstats_count4         0x01b8  4       Configurable statistic #5. Refer
1329  *  to the GENSTATS4_CFG for information on configuring this statistic
1330  * @pic.genstats_count5         0x01c0  4       Configurable statistic #6. Refer
1331  *  to the GENSTATS5_CFG for information on configuring this statistic
1332  * @pci.rstdrop_cpl     0x01c8  4
1333  * @pci.rstdrop_msg     0x01cc  4
1334  * @pci.rstdrop_client1         0x01d0  4
1335  * @pci.rstdrop_client0         0x01d4  4
1336  * @pci.rstdrop_client2         0x01d8  4
1337  * @pci.depl_cplh[vplane0]      0x01e2  2       Number of times completion
1338  *  header credits were depleted
1339  * @pci.depl_nph[vplane0]       0x01e4  2       Number of times non posted
1340  *  header credits were depleted
1341  * @pci.depl_ph[vplane0]        0x01e6  2       Number of times the posted
1342  *  header credits were depleted
1343  * @pci.depl_cplh[vplane1]      0x01ea  2
1344  * @pci.depl_nph[vplane1]       0x01ec  2
1345  * @pci.depl_ph[vplane1]        0x01ee  2
1346  * @pci.depl_cplh[vplane2]      0x01f2  2
1347  * @pci.depl_nph[vplane2]       0x01f4  2
1348  * @pci.depl_ph[vplane2]        0x01f6  2
1349  * @pci.depl_cplh[vplane3]      0x01fa  2
1350  * @pci.depl_nph[vplane3]       0x01fc  2
1351  * @pci.depl_ph[vplane3]        0x01fe  2
1352  * @pci.depl_cplh[vplane4]      0x0202  2
1353  * @pci.depl_nph[vplane4]       0x0204  2
1354  * @pci.depl_ph[vplane4]        0x0206  2
1355  * @pci.depl_cplh[vplane5]      0x020a  2
1356  * @pci.depl_nph[vplane5]       0x020c  2
1357  * @pci.depl_ph[vplane5]        0x020e  2
1358  * @pci.depl_cplh[vplane6]      0x0212  2
1359  * @pci.depl_nph[vplane6]       0x0214  2
1360  * @pci.depl_ph[vplane6]        0x0216  2
1361  * @pci.depl_cplh[vplane7]      0x021a  2
1362  * @pci.depl_nph[vplane7]       0x021c  2
1363  * @pci.depl_ph[vplane7]        0x021e  2
1364  * @pci.depl_cplh[vplane8]      0x0222  2
1365  * @pci.depl_nph[vplane8]       0x0224  2
1366  * @pci.depl_ph[vplane8]        0x0226  2
1367  * @pci.depl_cplh[vplane9]      0x022a  2
1368  * @pci.depl_nph[vplane9]       0x022c  2
1369  * @pci.depl_ph[vplane9]        0x022e  2
1370  * @pci.depl_cplh[vplane10]     0x0232  2
1371  * @pci.depl_nph[vplane10]      0x0234  2
1372  * @pci.depl_ph[vplane10]       0x0236  2
1373  * @pci.depl_cplh[vplane11]     0x023a  2
1374  * @pci.depl_nph[vplane11]      0x023c  2
1375  * @pci.depl_ph[vplane11]       0x023e  2
1376  * @pci.depl_cplh[vplane12]     0x0242  2
1377  * @pci.depl_nph[vplane12]      0x0244  2
1378  * @pci.depl_ph[vplane12]       0x0246  2
1379  * @pci.depl_cplh[vplane13]     0x024a  2
1380  * @pci.depl_nph[vplane13]      0x024c  2
1381  * @pci.depl_ph[vplane13]       0x024e  2
1382  * @pci.depl_cplh[vplane14]     0x0252  2
1383  * @pci.depl_nph[vplane14]      0x0254  2
1384  * @pci.depl_ph[vplane14]       0x0256  2
1385  * @pci.depl_cplh[vplane15]     0x025a  2
1386  * @pci.depl_nph[vplane15]      0x025c  2
1387  * @pci.depl_ph[vplane15]       0x025e  2
1388  * @pci.depl_cplh[vplane16]     0x0262  2
1389  * @pci.depl_nph[vplane16]      0x0264  2
1390  * @pci.depl_ph[vplane16]       0x0266  2
1391  * @pci.depl_cpld[vplane0]      0x026a  2       Number of times completion data
1392  *  credits were depleted
1393  * @pci.depl_npd[vplane0]       0x026c  2       Number of times non posted data
1394  *  credits were depleted
1395  * @pci.depl_pd[vplane0]        0x026e  2       Number of times the posted data
1396  *  credits were depleted
1397  * @pci.depl_cpld[vplane1]      0x0272  2
1398  * @pci.depl_npd[vplane1]       0x0274  2
1399  * @pci.depl_pd[vplane1]        0x0276  2
1400  * @pci.depl_cpld[vplane2]      0x027a  2
1401  * @pci.depl_npd[vplane2]       0x027c  2
1402  * @pci.depl_pd[vplane2]        0x027e  2
1403  * @pci.depl_cpld[vplane3]      0x0282  2
1404  * @pci.depl_npd[vplane3]       0x0284  2
1405  * @pci.depl_pd[vplane3]        0x0286  2
1406  * @pci.depl_cpld[vplane4]      0x028a  2
1407  * @pci.depl_npd[vplane4]       0x028c  2
1408  * @pci.depl_pd[vplane4]        0x028e  2
1409  * @pci.depl_cpld[vplane5]      0x0292  2
1410  * @pci.depl_npd[vplane5]       0x0294  2
1411  * @pci.depl_pd[vplane5]        0x0296  2
1412  * @pci.depl_cpld[vplane6]      0x029a  2
1413  * @pci.depl_npd[vplane6]       0x029c  2
1414  * @pci.depl_pd[vplane6]        0x029e  2
1415  * @pci.depl_cpld[vplane7]      0x02a2  2
1416  * @pci.depl_npd[vplane7]       0x02a4  2
1417  * @pci.depl_pd[vplane7]        0x02a6  2
1418  * @pci.depl_cpld[vplane8]      0x02aa  2
1419  * @pci.depl_npd[vplane8]       0x02ac  2
1420  * @pci.depl_pd[vplane8]        0x02ae  2
1421  * @pci.depl_cpld[vplane9]      0x02b2  2
1422  * @pci.depl_npd[vplane9]       0x02b4  2
1423  * @pci.depl_pd[vplane9]        0x02b6  2
1424  * @pci.depl_cpld[vplane10]     0x02ba  2
1425  * @pci.depl_npd[vplane10]      0x02bc  2
1426  * @pci.depl_pd[vplane10]       0x02be  2
1427  * @pci.depl_cpld[vplane11]     0x02c2  2
1428  * @pci.depl_npd[vplane11]      0x02c4  2
1429  * @pci.depl_pd[vplane11]       0x02c6  2
1430  * @pci.depl_cpld[vplane12]     0x02ca  2
1431  * @pci.depl_npd[vplane12]      0x02cc  2
1432  * @pci.depl_pd[vplane12]       0x02ce  2
1433  * @pci.depl_cpld[vplane13]     0x02d2  2
1434  * @pci.depl_npd[vplane13]      0x02d4  2
1435  * @pci.depl_pd[vplane13]       0x02d6  2
1436  * @pci.depl_cpld[vplane14]     0x02da  2
1437  * @pci.depl_npd[vplane14]      0x02dc  2
1438  * @pci.depl_pd[vplane14]       0x02de  2
1439  * @pci.depl_cpld[vplane15]     0x02e2  2
1440  * @pci.depl_npd[vplane15]      0x02e4  2
1441  * @pci.depl_pd[vplane15]       0x02e6  2
1442  * @pci.depl_cpld[vplane16]     0x02ea  2
1443  * @pci.depl_npd[vplane16]      0x02ec  2
1444  * @pci.depl_pd[vplane16]       0x02ee  2
1445  * @xgmac_port[3];
1446  * @xgmac_aggr[2];
1447  * @xgmac.global_prog_event_gnum0       0x0ae0  8       Programmable statistic.
1448  *  Increments when internal logic detects a certain event. See register
1449  *  XMAC_STATS_GLOBAL_CFG.EVENT_GNUM0_CFG for more information.
1450  * @xgmac.global_prog_event_gnum1       0x0ae8  8       Programmable statistic.
1451  *  Increments when internal logic detects a certain event. See register
1452  *  XMAC_STATS_GLOBAL_CFG.EVENT_GNUM1_CFG for more information.
1453  * @xgmac.orp_lro_events        0x0af8  8
1454  * @xgmac.orp_bs_events         0x0b00  8
1455  * @xgmac.orp_iwarp_events      0x0b08  8
1456  * @xgmac.tx_permitted_frms     0x0b14  4
1457  * @xgmac.port2_tx_any_frms     0x0b1d  1
1458  * @xgmac.port1_tx_any_frms     0x0b1e  1
1459  * @xgmac.port0_tx_any_frms     0x0b1f  1
1460  * @xgmac.port2_rx_any_frms     0x0b25  1
1461  * @xgmac.port1_rx_any_frms     0x0b26  1
1462  * @xgmac.port0_rx_any_frms     0x0b27  1
1463  *
1464  * Titan mrpcim hardware statistics.
1465  */
1466 struct vxge_hw_device_stats_mrpcim_info {
1467 /*0x0000*/      u32     pic_ini_rd_drop;
1468 /*0x0004*/      u32     pic_ini_wr_drop;
1469 /*0x0008*/      struct {
1470         /*0x0000*/      u32     pic_wrcrdtarb_ph_crdt_depleted;
1471         /*0x0004*/      u32     unused1;
1472                 } pic_wrcrdtarb_ph_crdt_depleted_vplane[17];
1473 /*0x0090*/      struct {
1474         /*0x0000*/      u32     pic_wrcrdtarb_pd_crdt_depleted;
1475         /*0x0004*/      u32     unused2;
1476                 } pic_wrcrdtarb_pd_crdt_depleted_vplane[17];
1477 /*0x0118*/      struct {
1478         /*0x0000*/      u32     pic_rdcrdtarb_nph_crdt_depleted;
1479         /*0x0004*/      u32     unused3;
1480                 } pic_rdcrdtarb_nph_crdt_depleted_vplane[17];
1481 /*0x01a0*/      u32     pic_ini_rd_vpin_drop;
1482 /*0x01a4*/      u32     pic_ini_wr_vpin_drop;
1483 /*0x01a8*/      u32     pic_genstats_count0;
1484 /*0x01ac*/      u32     pic_genstats_count1;
1485 /*0x01b0*/      u32     pic_genstats_count2;
1486 /*0x01b4*/      u32     pic_genstats_count3;
1487 /*0x01b8*/      u32     pic_genstats_count4;
1488 /*0x01bc*/      u32     unused4;
1489 /*0x01c0*/      u32     pic_genstats_count5;
1490 /*0x01c4*/      u32     unused5;
1491 /*0x01c8*/      u32     pci_rstdrop_cpl;
1492 /*0x01cc*/      u32     pci_rstdrop_msg;
1493 /*0x01d0*/      u32     pci_rstdrop_client1;
1494 /*0x01d4*/      u32     pci_rstdrop_client0;
1495 /*0x01d8*/      u32     pci_rstdrop_client2;
1496 /*0x01dc*/      u32     unused6;
1497 /*0x01e0*/      struct {
1498         /*0x0000*/      u16     unused7;
1499         /*0x0002*/      u16     pci_depl_cplh;
1500         /*0x0004*/      u16     pci_depl_nph;
1501         /*0x0006*/      u16     pci_depl_ph;
1502                 } pci_depl_h_vplane[17];
1503 /*0x0268*/      struct {
1504         /*0x0000*/      u16     unused8;
1505         /*0x0002*/      u16     pci_depl_cpld;
1506         /*0x0004*/      u16     pci_depl_npd;
1507         /*0x0006*/      u16     pci_depl_pd;
1508                 } pci_depl_d_vplane[17];
1509 /*0x02f0*/      struct vxge_hw_xmac_port_stats xgmac_port[3];
1510 /*0x0a10*/      struct vxge_hw_xmac_aggr_stats xgmac_aggr[2];
1511 /*0x0ae0*/      u64     xgmac_global_prog_event_gnum0;
1512 /*0x0ae8*/      u64     xgmac_global_prog_event_gnum1;
1513 /*0x0af0*/      u64     unused7;
1514 /*0x0af8*/      u64     unused8;
1515 /*0x0b00*/      u64     unused9;
1516 /*0x0b08*/      u64     unused10;
1517 /*0x0b10*/      u32     unused11;
1518 /*0x0b14*/      u32     xgmac_tx_permitted_frms;
1519 /*0x0b18*/      u32     unused12;
1520 /*0x0b1c*/      u8      unused13;
1521 /*0x0b1d*/      u8      xgmac_port2_tx_any_frms;
1522 /*0x0b1e*/      u8      xgmac_port1_tx_any_frms;
1523 /*0x0b1f*/      u8      xgmac_port0_tx_any_frms;
1524 /*0x0b20*/      u32     unused14;
1525 /*0x0b24*/      u8      unused15;
1526 /*0x0b25*/      u8      xgmac_port2_rx_any_frms;
1527 /*0x0b26*/      u8      xgmac_port1_rx_any_frms;
1528 /*0x0b27*/      u8      xgmac_port0_rx_any_frms;
1529 } __packed;
1530
1531 /**
1532  * struct vxge_hw_device_stats_hw_info - Titan hardware statistics.
1533  * @vpath_info: VPath statistics
1534  * @vpath_info_sav: Vpath statistics saved
1535  *
1536  * Titan hardware statistics.
1537  */
1538 struct vxge_hw_device_stats_hw_info {
1539         struct vxge_hw_vpath_stats_hw_info
1540                 *vpath_info[VXGE_HW_MAX_VIRTUAL_PATHS];
1541         struct vxge_hw_vpath_stats_hw_info
1542                 vpath_info_sav[VXGE_HW_MAX_VIRTUAL_PATHS];
1543 };
1544
1545 /**
1546  * struct vxge_hw_vpath_stats_sw_common_info - HW common
1547  * statistics for queues.
1548  * @full_cnt: Number of times the queue was full
1549  * @usage_cnt: usage count.
1550  * @usage_max: Maximum usage
1551  * @reserve_free_swaps_cnt: Reserve/free swap counter. Internal usage.
1552  * @total_compl_cnt: Total descriptor completion count.
1553  *
1554  * Hw queue counters
1555  * See also: struct vxge_hw_vpath_stats_sw_fifo_info{},
1556  * struct vxge_hw_vpath_stats_sw_ring_info{},
1557  */
1558 struct vxge_hw_vpath_stats_sw_common_info {
1559         u32     full_cnt;
1560         u32     usage_cnt;
1561         u32     usage_max;
1562         u32     reserve_free_swaps_cnt;
1563         u32 total_compl_cnt;
1564 };
1565
1566 /**
1567  * struct vxge_hw_vpath_stats_sw_fifo_info - HW fifo statistics
1568  * @common_stats: Common counters for all queues
1569  * @total_posts: Total number of postings on the queue.
1570  * @total_buffers: Total number of buffers posted.
1571  * @txd_t_code_err_cnt: Array of transmit transfer codes. The position
1572  * (index) in this array reflects the transfer code type, for instance
1573  * 0xA - "loss of link".
1574  * Value txd_t_code_err_cnt[i] reflects the
1575  * number of times the corresponding transfer code was encountered.
1576  *
1577  * HW fifo counters
1578  * See also: struct vxge_hw_vpath_stats_sw_common_info{},
1579  * struct vxge_hw_vpath_stats_sw_ring_info{},
1580  */
1581 struct vxge_hw_vpath_stats_sw_fifo_info {
1582         struct vxge_hw_vpath_stats_sw_common_info common_stats;
1583         u32 total_posts;
1584         u32 total_buffers;
1585         u32 txd_t_code_err_cnt[VXGE_HW_DTR_MAX_T_CODE];
1586 };
1587
1588 /**
1589  * struct vxge_hw_vpath_stats_sw_ring_info - HW ring statistics
1590  * @common_stats: Common counters for all queues
1591  * @rxd_t_code_err_cnt: Array of receive transfer codes. The position
1592  *             (index) in this array reflects the transfer code type,
1593  *             for instance
1594  *             0x7 - for "invalid receive buffer size", or 0x8 - for ECC.
1595  *             Value rxd_t_code_err_cnt[i] reflects the
1596  *             number of times the corresponding transfer code was encountered.
1597  *
1598  * HW ring counters
1599  * See also: struct vxge_hw_vpath_stats_sw_common_info{},
1600  * struct vxge_hw_vpath_stats_sw_fifo_info{},
1601  */
1602 struct vxge_hw_vpath_stats_sw_ring_info {
1603         struct vxge_hw_vpath_stats_sw_common_info common_stats;
1604         u32 rxd_t_code_err_cnt[VXGE_HW_DTR_MAX_T_CODE];
1605
1606 };
1607
1608 /**
1609  * struct vxge_hw_vpath_stats_sw_err - HW vpath error statistics
1610  * @unknown_alarms:
1611  * @network_sustained_fault:
1612  * @network_sustained_ok:
1613  * @kdfcctl_fifo0_overwrite:
1614  * @kdfcctl_fifo0_poison:
1615  * @kdfcctl_fifo0_dma_error:
1616  * @dblgen_fifo0_overflow:
1617  * @statsb_pif_chain_error:
1618  * @statsb_drop_timeout:
1619  * @target_illegal_access:
1620  * @ini_serr_det:
1621  * @prc_ring_bumps:
1622  * @prc_rxdcm_sc_err:
1623  * @prc_rxdcm_sc_abort:
1624  * @prc_quanta_size_err:
1625  *
1626  * HW vpath error statistics
1627  */
1628 struct vxge_hw_vpath_stats_sw_err {
1629         u32     unknown_alarms;
1630         u32     network_sustained_fault;
1631         u32     network_sustained_ok;
1632         u32     kdfcctl_fifo0_overwrite;
1633         u32     kdfcctl_fifo0_poison;
1634         u32     kdfcctl_fifo0_dma_error;
1635         u32     dblgen_fifo0_overflow;
1636         u32     statsb_pif_chain_error;
1637         u32     statsb_drop_timeout;
1638         u32     target_illegal_access;
1639         u32     ini_serr_det;
1640         u32     prc_ring_bumps;
1641         u32     prc_rxdcm_sc_err;
1642         u32     prc_rxdcm_sc_abort;
1643         u32     prc_quanta_size_err;
1644 };
1645
1646 /**
1647  * struct vxge_hw_vpath_stats_sw_info - HW vpath sw statistics
1648  * @soft_reset_cnt: Number of times soft reset is done on this vpath.
1649  * @error_stats: error counters for the vpath
1650  * @ring_stats: counters for ring belonging to the vpath
1651  * @fifo_stats: counters for fifo belonging to the vpath
1652  *
1653  * HW vpath sw statistics
1654  * See also: struct vxge_hw_device_info{} }.
1655  */
1656 struct vxge_hw_vpath_stats_sw_info {
1657         u32    soft_reset_cnt;
1658         struct vxge_hw_vpath_stats_sw_err       error_stats;
1659         struct vxge_hw_vpath_stats_sw_ring_info ring_stats;
1660         struct vxge_hw_vpath_stats_sw_fifo_info fifo_stats;
1661 };
1662
1663 /**
1664  * struct vxge_hw_device_stats_sw_info - HW own per-device statistics.
1665  *
1666  * @not_traffic_intr_cnt: Number of times the host was interrupted
1667  *                        without new completions.
1668  *                        "Non-traffic interrupt counter".
1669  * @traffic_intr_cnt: Number of traffic interrupts for the device.
1670  * @total_intr_cnt: Total number of traffic interrupts for the device.
1671  *                  @total_intr_cnt == @traffic_intr_cnt +
1672  *                              @not_traffic_intr_cnt
1673  * @soft_reset_cnt: Number of times soft reset is done on this device.
1674  * @vpath_info: please see struct vxge_hw_vpath_stats_sw_info{}
1675  * HW per-device statistics.
1676  */
1677 struct vxge_hw_device_stats_sw_info {
1678         u32     not_traffic_intr_cnt;
1679         u32     traffic_intr_cnt;
1680         u32     total_intr_cnt;
1681         u32     soft_reset_cnt;
1682         struct vxge_hw_vpath_stats_sw_info
1683                 vpath_info[VXGE_HW_MAX_VIRTUAL_PATHS];
1684 };
1685
1686 /**
1687  * struct vxge_hw_device_stats_sw_err - HW device error statistics.
1688  * @vpath_alarms: Number of vpath alarms
1689  *
1690  * HW Device error stats
1691  */
1692 struct vxge_hw_device_stats_sw_err {
1693         u32     vpath_alarms;
1694 };
1695
1696 /**
1697  * struct vxge_hw_device_stats - Contains HW per-device statistics,
1698  * including hw.
1699  * @devh: HW device handle.
1700  * @dma_addr: DMA addres of the %hw_info. Given to device to fill-in the stats.
1701  * @hw_info_dmah: DMA handle used to map hw statistics onto the device memory
1702  *                space.
1703  * @hw_info_dma_acch: One more DMA handle used subsequently to free the
1704  *                    DMA object. Note that this and the previous handle have
1705  *                    physical meaning for Solaris; on Windows and Linux the
1706  *                    corresponding value will be simply pointer to PCI device.
1707  *
1708  * @hw_dev_info_stats: Titan statistics maintained by the hardware.
1709  * @sw_dev_info_stats: HW's "soft" device informational statistics, e.g. number
1710  *                     of completions per interrupt.
1711  * @sw_dev_err_stats: HW's "soft" device error statistics.
1712  *
1713  * Structure-container of HW per-device statistics. Note that per-channel
1714  * statistics are kept in separate structures under HW's fifo and ring
1715  * channels.
1716  */
1717 struct vxge_hw_device_stats {
1718         /* handles */
1719         struct __vxge_hw_device *devh;
1720
1721         /* HW device hardware statistics */
1722         struct vxge_hw_device_stats_hw_info     hw_dev_info_stats;
1723
1724         /* HW device "soft" stats */
1725         struct vxge_hw_device_stats_sw_err   sw_dev_err_stats;
1726         struct vxge_hw_device_stats_sw_info  sw_dev_info_stats;
1727
1728 };
1729
1730 enum vxge_hw_status vxge_hw_device_hw_stats_enable(
1731                         struct __vxge_hw_device *devh);
1732
1733 enum vxge_hw_status vxge_hw_device_stats_get(
1734                         struct __vxge_hw_device *devh,
1735                         struct vxge_hw_device_stats_hw_info *hw_stats);
1736
1737 enum vxge_hw_status vxge_hw_driver_stats_get(
1738                         struct __vxge_hw_device *devh,
1739                         struct vxge_hw_device_stats_sw_info *sw_stats);
1740
1741 enum vxge_hw_status vxge_hw_mrpcim_stats_enable(struct __vxge_hw_device *devh);
1742
1743 enum vxge_hw_status vxge_hw_mrpcim_stats_disable(struct __vxge_hw_device *devh);
1744
1745 enum vxge_hw_status
1746 vxge_hw_mrpcim_stats_access(
1747         struct __vxge_hw_device *devh,
1748         u32 operation,
1749         u32 location,
1750         u32 offset,
1751         u64 *stat);
1752
1753 enum vxge_hw_status
1754 vxge_hw_device_xmac_aggr_stats_get(struct __vxge_hw_device *devh, u32 port,
1755                                    struct vxge_hw_xmac_aggr_stats *aggr_stats);
1756
1757 enum vxge_hw_status
1758 vxge_hw_device_xmac_port_stats_get(struct __vxge_hw_device *devh, u32 port,
1759                                    struct vxge_hw_xmac_port_stats *port_stats);
1760
1761 enum vxge_hw_status
1762 vxge_hw_device_xmac_stats_get(struct __vxge_hw_device *devh,
1763                               struct vxge_hw_xmac_stats *xmac_stats);
1764
1765 /**
1766  * enum enum vxge_hw_mgmt_reg_type - Register types.
1767  *
1768  * @vxge_hw_mgmt_reg_type_legacy: Legacy registers
1769  * @vxge_hw_mgmt_reg_type_toc: TOC Registers
1770  * @vxge_hw_mgmt_reg_type_common: Common Registers
1771  * @vxge_hw_mgmt_reg_type_mrpcim: mrpcim registers
1772  * @vxge_hw_mgmt_reg_type_srpcim: srpcim registers
1773  * @vxge_hw_mgmt_reg_type_vpmgmt: vpath management registers
1774  * @vxge_hw_mgmt_reg_type_vpath: vpath registers
1775  *
1776  * Register type enumaration
1777  */
1778 enum vxge_hw_mgmt_reg_type {
1779         vxge_hw_mgmt_reg_type_legacy = 0,
1780         vxge_hw_mgmt_reg_type_toc = 1,
1781         vxge_hw_mgmt_reg_type_common = 2,
1782         vxge_hw_mgmt_reg_type_mrpcim = 3,
1783         vxge_hw_mgmt_reg_type_srpcim = 4,
1784         vxge_hw_mgmt_reg_type_vpmgmt = 5,
1785         vxge_hw_mgmt_reg_type_vpath = 6
1786 };
1787
1788 enum vxge_hw_status
1789 vxge_hw_mgmt_reg_read(struct __vxge_hw_device *devh,
1790                       enum vxge_hw_mgmt_reg_type type,
1791                       u32 index,
1792                       u32 offset,
1793                       u64 *value);
1794
1795 enum vxge_hw_status
1796 vxge_hw_mgmt_reg_write(struct __vxge_hw_device *devh,
1797                       enum vxge_hw_mgmt_reg_type type,
1798                       u32 index,
1799                       u32 offset,
1800                       u64 value);
1801
1802 /**
1803  * enum enum vxge_hw_rxd_state - Descriptor (RXD) state.
1804  * @VXGE_HW_RXD_STATE_NONE: Invalid state.
1805  * @VXGE_HW_RXD_STATE_AVAIL: Descriptor is available for reservation.
1806  * @VXGE_HW_RXD_STATE_POSTED: Descriptor is posted for processing by the
1807  * device.
1808  * @VXGE_HW_RXD_STATE_FREED: Descriptor is free and can be reused for
1809  * filling-in and posting later.
1810  *
1811  * Titan/HW descriptor states.
1812  *
1813  */
1814 enum vxge_hw_rxd_state {
1815         VXGE_HW_RXD_STATE_NONE          = 0,
1816         VXGE_HW_RXD_STATE_AVAIL         = 1,
1817         VXGE_HW_RXD_STATE_POSTED        = 2,
1818         VXGE_HW_RXD_STATE_FREED         = 3
1819 };
1820
1821 /**
1822  * struct vxge_hw_ring_rxd_info - Extended information associated with a
1823  * completed ring descriptor.
1824  * @syn_flag: SYN flag
1825  * @is_icmp: Is ICMP
1826  * @fast_path_eligible: Fast Path Eligible flag
1827  * @l3_cksum: in L3 checksum is valid
1828  * @l3_cksum: Result of IP checksum check (by Titan hardware).
1829  *            This field containing VXGE_HW_L3_CKSUM_OK would mean that
1830  *            the checksum is correct, otherwise - the datagram is
1831  *            corrupted.
1832  * @l4_cksum: in L4 checksum is valid
1833  * @l4_cksum: Result of TCP/UDP checksum check (by Titan hardware).
1834  *            This field containing VXGE_HW_L4_CKSUM_OK would mean that
1835  *            the checksum is correct. Otherwise - the packet is
1836  *            corrupted.
1837  * @frame: Zero or more of enum vxge_hw_frame_type flags.
1838  *              See enum vxge_hw_frame_type{}.
1839  * @proto: zero or more of enum vxge_hw_frame_proto flags.  Reporting bits for
1840  *            various higher-layer protocols, including (but note restricted to)
1841  *            TCP and UDP. See enum vxge_hw_frame_proto{}.
1842  * @is_vlan: If vlan tag is valid
1843  * @vlan: VLAN tag extracted from the received frame.
1844  * @rth_bucket: RTH bucket
1845  * @rth_it_hit: Set, If RTH hash value calculated by the Titan hardware
1846  *             has a matching entry in the Indirection table.
1847  * @rth_spdm_hit: Set, If RTH hash value calculated by the Titan hardware
1848  *             has a matching entry in the Socket Pair Direct Match table.
1849  * @rth_hash_type: RTH hash code of the function used to calculate the hash.
1850  * @rth_value: Receive Traffic Hashing(RTH) hash value. Produced by Titan
1851  *             hardware if RTH is enabled.
1852  */
1853 struct vxge_hw_ring_rxd_info {
1854         u32     syn_flag;
1855         u32     is_icmp;
1856         u32     fast_path_eligible;
1857         u32     l3_cksum_valid;
1858         u32     l3_cksum;
1859         u32     l4_cksum_valid;
1860         u32     l4_cksum;
1861         u32     frame;
1862         u32     proto;
1863         u32     is_vlan;
1864         u32     vlan;
1865         u32     rth_bucket;
1866         u32     rth_it_hit;
1867         u32     rth_spdm_hit;
1868         u32     rth_hash_type;
1869         u32     rth_value;
1870 };
1871
1872 /**
1873  * enum enum vxge_hw_ring_hash_type - RTH hash types
1874  * @VXGE_HW_RING_HASH_TYPE_NONE: No Hash
1875  * @VXGE_HW_RING_HASH_TYPE_TCP_IPV4: TCP IPv4
1876  * @VXGE_HW_RING_HASH_TYPE_UDP_IPV4: UDP IPv4
1877  * @VXGE_HW_RING_HASH_TYPE_IPV4: IPv4
1878  * @VXGE_HW_RING_HASH_TYPE_TCP_IPV6: TCP IPv6
1879  * @VXGE_HW_RING_HASH_TYPE_UDP_IPV6: UDP IPv6
1880  * @VXGE_HW_RING_HASH_TYPE_IPV6: IPv6
1881  * @VXGE_HW_RING_HASH_TYPE_TCP_IPV6_EX: TCP IPv6 extension
1882  * @VXGE_HW_RING_HASH_TYPE_UDP_IPV6_EX: UDP IPv6 extension
1883  * @VXGE_HW_RING_HASH_TYPE_IPV6_EX: IPv6 extension
1884  *
1885  * RTH hash types
1886  */
1887 enum vxge_hw_ring_hash_type {
1888         VXGE_HW_RING_HASH_TYPE_NONE                     = 0x0,
1889         VXGE_HW_RING_HASH_TYPE_TCP_IPV4         = 0x1,
1890         VXGE_HW_RING_HASH_TYPE_UDP_IPV4         = 0x2,
1891         VXGE_HW_RING_HASH_TYPE_IPV4                     = 0x3,
1892         VXGE_HW_RING_HASH_TYPE_TCP_IPV6         = 0x4,
1893         VXGE_HW_RING_HASH_TYPE_UDP_IPV6         = 0x5,
1894         VXGE_HW_RING_HASH_TYPE_IPV6                     = 0x6,
1895         VXGE_HW_RING_HASH_TYPE_TCP_IPV6_EX      = 0x7,
1896         VXGE_HW_RING_HASH_TYPE_UDP_IPV6_EX      = 0x8,
1897         VXGE_HW_RING_HASH_TYPE_IPV6_EX          = 0x9
1898 };
1899
1900 enum vxge_hw_status vxge_hw_ring_rxd_reserve(
1901         struct __vxge_hw_ring *ring_handle,
1902         void **rxdh);
1903
1904 void
1905 vxge_hw_ring_rxd_pre_post(
1906         struct __vxge_hw_ring *ring_handle,
1907         void *rxdh);
1908
1909 void
1910 vxge_hw_ring_rxd_post_post(
1911         struct __vxge_hw_ring *ring_handle,
1912         void *rxdh);
1913
1914 enum vxge_hw_status
1915 vxge_hw_ring_replenish(struct __vxge_hw_ring *ring_handle, u16 min_flag);
1916
1917 void
1918 vxge_hw_ring_rxd_post_post_wmb(
1919         struct __vxge_hw_ring *ring_handle,
1920         void *rxdh);
1921
1922 void vxge_hw_ring_rxd_post(
1923         struct __vxge_hw_ring *ring_handle,
1924         void *rxdh);
1925
1926 enum vxge_hw_status vxge_hw_ring_rxd_next_completed(
1927         struct __vxge_hw_ring *ring_handle,
1928         void **rxdh,
1929         u8 *t_code);
1930
1931 enum vxge_hw_status vxge_hw_ring_handle_tcode(
1932         struct __vxge_hw_ring *ring_handle,
1933         void *rxdh,
1934         u8 t_code);
1935
1936 void vxge_hw_ring_rxd_free(
1937         struct __vxge_hw_ring *ring_handle,
1938         void *rxdh);
1939
1940 /**
1941  * enum enum vxge_hw_frame_proto - Higher-layer ethernet protocols.
1942  * @VXGE_HW_FRAME_PROTO_VLAN_TAGGED: VLAN.
1943  * @VXGE_HW_FRAME_PROTO_IPV4: IPv4.
1944  * @VXGE_HW_FRAME_PROTO_IPV6: IPv6.
1945  * @VXGE_HW_FRAME_PROTO_IP_FRAG: IP fragmented.
1946  * @VXGE_HW_FRAME_PROTO_TCP: TCP.
1947  * @VXGE_HW_FRAME_PROTO_UDP: UDP.
1948  * @VXGE_HW_FRAME_PROTO_TCP_OR_UDP: TCP or UDP.
1949  *
1950  * Higher layer ethernet protocols and options.
1951  */
1952 enum vxge_hw_frame_proto {
1953         VXGE_HW_FRAME_PROTO_VLAN_TAGGED = 0x80,
1954         VXGE_HW_FRAME_PROTO_IPV4                = 0x10,
1955         VXGE_HW_FRAME_PROTO_IPV6                = 0x08,
1956         VXGE_HW_FRAME_PROTO_IP_FRAG             = 0x04,
1957         VXGE_HW_FRAME_PROTO_TCP                 = 0x02,
1958         VXGE_HW_FRAME_PROTO_UDP                 = 0x01,
1959         VXGE_HW_FRAME_PROTO_TCP_OR_UDP  = (VXGE_HW_FRAME_PROTO_TCP | \
1960                                                    VXGE_HW_FRAME_PROTO_UDP)
1961 };
1962
1963 /**
1964  * enum enum vxge_hw_fifo_gather_code - Gather codes used in fifo TxD
1965  * @VXGE_HW_FIFO_GATHER_CODE_FIRST: First TxDL
1966  * @VXGE_HW_FIFO_GATHER_CODE_MIDDLE: Middle TxDL
1967  * @VXGE_HW_FIFO_GATHER_CODE_LAST: Last TxDL
1968  * @VXGE_HW_FIFO_GATHER_CODE_FIRST_LAST: First and Last TxDL.
1969  *
1970  * These gather codes are used to indicate the position of a TxD in a TxD list
1971  */
1972 enum vxge_hw_fifo_gather_code {
1973         VXGE_HW_FIFO_GATHER_CODE_FIRST          = 0x2,
1974         VXGE_HW_FIFO_GATHER_CODE_MIDDLE         = 0x0,
1975         VXGE_HW_FIFO_GATHER_CODE_LAST           = 0x1,
1976         VXGE_HW_FIFO_GATHER_CODE_FIRST_LAST     = 0x3
1977 };
1978
1979 /**
1980  * enum enum vxge_hw_fifo_tcode - tcodes used in fifo
1981  * @VXGE_HW_FIFO_T_CODE_OK: Transfer OK
1982  * @VXGE_HW_FIFO_T_CODE_PCI_READ_CORRUPT: PCI read transaction (either TxD or
1983  *             frame data) returned with corrupt data.
1984  * @VXGE_HW_FIFO_T_CODE_PCI_READ_FAIL:PCI read transaction was returned
1985  *             with no data.
1986  * @VXGE_HW_FIFO_T_CODE_INVALID_MSS: The host attempted to send either a
1987  *             frame or LSO MSS that was too long (>9800B).
1988  * @VXGE_HW_FIFO_T_CODE_LSO_ERROR: Error detected during TCP/UDP Large Send
1989         *              Offload operation, due to improper header template,
1990         *              unsupported protocol, etc.
1991  * @VXGE_HW_FIFO_T_CODE_UNUSED: Unused
1992  * @VXGE_HW_FIFO_T_CODE_MULTI_ERROR: Set to 1 by the adapter if multiple
1993  *             data buffer transfer errors are encountered (see below).
1994  *             Otherwise it is set to 0.
1995  *
1996  * These tcodes are returned in various API for TxD status
1997  */
1998 enum vxge_hw_fifo_tcode {
1999         VXGE_HW_FIFO_T_CODE_OK                  = 0x0,
2000         VXGE_HW_FIFO_T_CODE_PCI_READ_CORRUPT    = 0x1,
2001         VXGE_HW_FIFO_T_CODE_PCI_READ_FAIL       = 0x2,
2002         VXGE_HW_FIFO_T_CODE_INVALID_MSS         = 0x3,
2003         VXGE_HW_FIFO_T_CODE_LSO_ERROR           = 0x4,
2004         VXGE_HW_FIFO_T_CODE_UNUSED              = 0x7,
2005         VXGE_HW_FIFO_T_CODE_MULTI_ERROR         = 0x8
2006 };
2007
2008 enum vxge_hw_status vxge_hw_fifo_txdl_reserve(
2009         struct __vxge_hw_fifo *fifoh,
2010         void **txdlh,
2011         void **txdl_priv);
2012
2013 void vxge_hw_fifo_txdl_buffer_set(
2014                         struct __vxge_hw_fifo *fifo_handle,
2015                         void *txdlh,
2016                         u32 frag_idx,
2017                         dma_addr_t dma_pointer,
2018                         u32 size);
2019
2020 void vxge_hw_fifo_txdl_post(
2021                         struct __vxge_hw_fifo *fifo_handle,
2022                         void *txdlh);
2023
2024 u32 vxge_hw_fifo_free_txdl_count_get(
2025                         struct __vxge_hw_fifo *fifo_handle);
2026
2027 enum vxge_hw_status vxge_hw_fifo_txdl_next_completed(
2028         struct __vxge_hw_fifo *fifoh,
2029         void **txdlh,
2030         enum vxge_hw_fifo_tcode *t_code);
2031
2032 enum vxge_hw_status vxge_hw_fifo_handle_tcode(
2033         struct __vxge_hw_fifo *fifoh,
2034         void *txdlh,
2035         enum vxge_hw_fifo_tcode t_code);
2036
2037 void vxge_hw_fifo_txdl_free(
2038         struct __vxge_hw_fifo *fifoh,
2039         void *txdlh);
2040
2041 /*
2042  * Device
2043  */
2044
2045 #define VXGE_HW_RING_NEXT_BLOCK_POINTER_OFFSET  (VXGE_HW_BLOCK_SIZE-8)
2046 #define VXGE_HW_RING_MEMBLOCK_IDX_OFFSET                (VXGE_HW_BLOCK_SIZE-16)
2047 #define VXGE_HW_RING_MIN_BUFF_ALLOCATION                64
2048
2049 /*
2050  * struct __vxge_hw_ring_rxd_priv - Receive descriptor HW-private data.
2051  * @dma_addr: DMA (mapped) address of _this_ descriptor.
2052  * @dma_handle: DMA handle used to map the descriptor onto device.
2053  * @dma_offset: Descriptor's offset in the memory block. HW allocates
2054  *              descriptors in memory blocks of %VXGE_HW_BLOCK_SIZE
2055  *              bytes. Each memblock is contiguous DMA-able memory. Each
2056  *              memblock contains 1 or more 4KB RxD blocks visible to the
2057  *              Titan hardware.
2058  * @dma_object: DMA address and handle of the memory block that contains
2059  *              the descriptor. This member is used only in the "checked"
2060  *              version of the HW (to enforce certain assertions);
2061  *              otherwise it gets compiled out.
2062  * @allocated: True if the descriptor is reserved, 0 otherwise. Internal usage.
2063  *
2064  * Per-receive decsriptor HW-private data. HW uses the space to keep DMA
2065  * information associated with the descriptor. Note that driver can ask HW
2066  * to allocate additional per-descriptor space for its own (driver-specific)
2067  * purposes.
2068  */
2069 struct __vxge_hw_ring_rxd_priv {
2070         dma_addr_t      dma_addr;
2071         struct pci_dev *dma_handle;
2072         ptrdiff_t       dma_offset;
2073 #ifdef VXGE_DEBUG_ASSERT
2074         struct vxge_hw_mempool_dma      *dma_object;
2075 #endif
2076 };
2077
2078 /* ========================= RING PRIVATE API ============================= */
2079 u64
2080 __vxge_hw_ring_first_block_address_get(
2081         struct __vxge_hw_ring *ringh);
2082
2083 enum vxge_hw_status
2084 __vxge_hw_ring_create(
2085         struct __vxge_hw_vpath_handle *vpath_handle,
2086         struct vxge_hw_ring_attr *attr);
2087
2088 enum vxge_hw_status
2089 __vxge_hw_ring_abort(
2090         struct __vxge_hw_ring *ringh);
2091
2092 enum vxge_hw_status
2093 __vxge_hw_ring_reset(
2094         struct __vxge_hw_ring *ringh);
2095
2096 enum vxge_hw_status
2097 __vxge_hw_ring_delete(
2098         struct __vxge_hw_vpath_handle *vpath_handle);
2099
2100 /* ========================= FIFO PRIVATE API ============================= */
2101
2102 struct vxge_hw_fifo_attr;
2103
2104 enum vxge_hw_status
2105 __vxge_hw_fifo_create(
2106         struct __vxge_hw_vpath_handle *vpath_handle,
2107         struct vxge_hw_fifo_attr *attr);
2108
2109 enum vxge_hw_status
2110 __vxge_hw_fifo_abort(
2111         struct __vxge_hw_fifo *fifoh);
2112
2113 enum vxge_hw_status
2114 __vxge_hw_fifo_reset(
2115         struct __vxge_hw_fifo *ringh);
2116
2117 enum vxge_hw_status
2118 __vxge_hw_fifo_delete(
2119         struct __vxge_hw_vpath_handle *vpath_handle);
2120
2121 struct vxge_hw_mempool_cbs {
2122         void (*item_func_alloc)(
2123                         struct vxge_hw_mempool *mempoolh,
2124                         u32                     memblock_index,
2125                         struct vxge_hw_mempool_dma      *dma_object,
2126                         u32                     index,
2127                         u32                     is_last);
2128 };
2129
2130 void
2131 __vxge_hw_mempool_destroy(
2132         struct vxge_hw_mempool *mempool);
2133
2134 #define VXGE_HW_VIRTUAL_PATH_HANDLE(vpath)                              \
2135                 ((struct __vxge_hw_vpath_handle *)(vpath)->vpath_handles.next)
2136
2137 enum vxge_hw_status
2138 __vxge_hw_vpath_rts_table_get(
2139         struct __vxge_hw_vpath_handle *vpath_handle,
2140         u32                     action,
2141         u32                     rts_table,
2142         u32                     offset,
2143         u64                     *data1,
2144         u64                     *data2);
2145
2146 enum vxge_hw_status
2147 __vxge_hw_vpath_rts_table_set(
2148         struct __vxge_hw_vpath_handle *vpath_handle,
2149         u32                     action,
2150         u32                     rts_table,
2151         u32                     offset,
2152         u64                     data1,
2153         u64                     data2);
2154
2155 enum vxge_hw_status
2156 __vxge_hw_vpath_reset(
2157         struct __vxge_hw_device *devh,
2158         u32                     vp_id);
2159
2160 enum vxge_hw_status
2161 __vxge_hw_vpath_sw_reset(
2162         struct __vxge_hw_device *devh,
2163         u32                     vp_id);
2164
2165 enum vxge_hw_status
2166 __vxge_hw_vpath_enable(
2167         struct __vxge_hw_device *devh,
2168         u32                     vp_id);
2169
2170 void
2171 __vxge_hw_vpath_prc_configure(
2172         struct __vxge_hw_device *devh,
2173         u32                     vp_id);
2174
2175 enum vxge_hw_status
2176 __vxge_hw_vpath_kdfc_configure(
2177         struct __vxge_hw_device *devh,
2178         u32                     vp_id);
2179
2180 enum vxge_hw_status
2181 __vxge_hw_vpath_mac_configure(
2182         struct __vxge_hw_device *devh,
2183         u32                     vp_id);
2184
2185 enum vxge_hw_status
2186 __vxge_hw_vpath_tim_configure(
2187         struct __vxge_hw_device *devh,
2188         u32                     vp_id);
2189
2190 enum vxge_hw_status
2191 __vxge_hw_vpath_initialize(
2192         struct __vxge_hw_device *devh,
2193         u32                     vp_id);
2194
2195 enum vxge_hw_status
2196 __vxge_hw_vp_initialize(
2197         struct __vxge_hw_device *devh,
2198         u32                     vp_id,
2199         struct vxge_hw_vp_config        *config);
2200
2201 void
2202 __vxge_hw_vp_terminate(
2203         struct __vxge_hw_device *devh,
2204         u32                     vp_id);
2205
2206 enum vxge_hw_status
2207 __vxge_hw_vpath_alarm_process(
2208         struct __vxge_hw_virtualpath    *vpath,
2209         u32                     skip_alarms);
2210
2211 void vxge_hw_device_intr_enable(
2212         struct __vxge_hw_device *devh);
2213
2214 u32 vxge_hw_device_set_intr_type(struct __vxge_hw_device *devh, u32 intr_mode);
2215
2216 void vxge_hw_device_intr_disable(
2217         struct __vxge_hw_device *devh);
2218
2219 void vxge_hw_device_mask_all(
2220         struct __vxge_hw_device *devh);
2221
2222 void vxge_hw_device_unmask_all(
2223         struct __vxge_hw_device *devh);
2224
2225 enum vxge_hw_status vxge_hw_device_begin_irq(
2226         struct __vxge_hw_device *devh,
2227         u32 skip_alarms,
2228         u64 *reason);
2229
2230 void vxge_hw_device_clear_tx_rx(
2231         struct __vxge_hw_device *devh);
2232
2233 /*
2234  *  Virtual Paths
2235  */
2236
2237 u32 vxge_hw_vpath_id(
2238         struct __vxge_hw_vpath_handle *vpath_handle);
2239
2240 enum vxge_hw_vpath_mac_addr_add_mode {
2241         VXGE_HW_VPATH_MAC_ADDR_ADD_DUPLICATE = 0,
2242         VXGE_HW_VPATH_MAC_ADDR_DISCARD_DUPLICATE = 1,
2243         VXGE_HW_VPATH_MAC_ADDR_REPLACE_DUPLICATE = 2
2244 };
2245
2246 enum vxge_hw_status
2247 vxge_hw_vpath_mac_addr_add(
2248         struct __vxge_hw_vpath_handle *vpath_handle,
2249         u8 (macaddr)[ETH_ALEN],
2250         u8 (macaddr_mask)[ETH_ALEN],
2251         enum vxge_hw_vpath_mac_addr_add_mode duplicate_mode);
2252
2253 enum vxge_hw_status
2254 vxge_hw_vpath_mac_addr_get(
2255         struct __vxge_hw_vpath_handle *vpath_handle,
2256         u8 (macaddr)[ETH_ALEN],
2257         u8 (macaddr_mask)[ETH_ALEN]);
2258
2259 enum vxge_hw_status
2260 vxge_hw_vpath_mac_addr_get_next(
2261         struct __vxge_hw_vpath_handle *vpath_handle,
2262         u8 (macaddr)[ETH_ALEN],
2263         u8 (macaddr_mask)[ETH_ALEN]);
2264
2265 enum vxge_hw_status
2266 vxge_hw_vpath_mac_addr_delete(
2267         struct __vxge_hw_vpath_handle *vpath_handle,
2268         u8 (macaddr)[ETH_ALEN],
2269         u8 (macaddr_mask)[ETH_ALEN]);
2270
2271 enum vxge_hw_status
2272 vxge_hw_vpath_vid_add(
2273         struct __vxge_hw_vpath_handle *vpath_handle,
2274         u64                     vid);
2275
2276 enum vxge_hw_status
2277 vxge_hw_vpath_vid_get(
2278         struct __vxge_hw_vpath_handle *vpath_handle,
2279         u64                     *vid);
2280
2281 enum vxge_hw_status
2282 vxge_hw_vpath_vid_get_next(
2283         struct __vxge_hw_vpath_handle *vpath_handle,
2284         u64                     *vid);
2285
2286 enum vxge_hw_status
2287 vxge_hw_vpath_vid_delete(
2288         struct __vxge_hw_vpath_handle *vpath_handle,
2289         u64                     vid);
2290
2291 enum vxge_hw_status
2292 vxge_hw_vpath_etype_add(
2293         struct __vxge_hw_vpath_handle *vpath_handle,
2294         u64                     etype);
2295
2296 enum vxge_hw_status
2297 vxge_hw_vpath_etype_get(
2298         struct __vxge_hw_vpath_handle *vpath_handle,
2299         u64                     *etype);
2300
2301 enum vxge_hw_status
2302 vxge_hw_vpath_etype_get_next(
2303         struct __vxge_hw_vpath_handle *vpath_handle,
2304         u64                     *etype);
2305
2306 enum vxge_hw_status
2307 vxge_hw_vpath_etype_delete(
2308         struct __vxge_hw_vpath_handle *vpath_handle,
2309         u64                     etype);
2310
2311 enum vxge_hw_status vxge_hw_vpath_promisc_enable(
2312         struct __vxge_hw_vpath_handle *vpath_handle);
2313
2314 enum vxge_hw_status vxge_hw_vpath_promisc_disable(
2315         struct __vxge_hw_vpath_handle *vpath_handle);
2316
2317 enum vxge_hw_status vxge_hw_vpath_bcast_enable(
2318         struct __vxge_hw_vpath_handle *vpath_handle);
2319
2320 enum vxge_hw_status vxge_hw_vpath_mcast_enable(
2321         struct __vxge_hw_vpath_handle *vpath_handle);
2322
2323 enum vxge_hw_status vxge_hw_vpath_mcast_disable(
2324         struct __vxge_hw_vpath_handle *vpath_handle);
2325
2326 enum vxge_hw_status vxge_hw_vpath_poll_rx(
2327         struct __vxge_hw_ring *ringh);
2328
2329 enum vxge_hw_status vxge_hw_vpath_poll_tx(
2330         struct __vxge_hw_fifo *fifoh,
2331         void **skb_ptr);
2332
2333 enum vxge_hw_status vxge_hw_vpath_alarm_process(
2334         struct __vxge_hw_vpath_handle *vpath_handle,
2335         u32 skip_alarms);
2336
2337 enum vxge_hw_status
2338 vxge_hw_vpath_msix_set(struct __vxge_hw_vpath_handle *vpath_handle,
2339                        int *tim_msix_id, int alarm_msix_id);
2340
2341 void
2342 vxge_hw_vpath_msix_mask(struct __vxge_hw_vpath_handle *vpath_handle,
2343                         int msix_id);
2344
2345 void vxge_hw_device_flush_io(struct __vxge_hw_device *devh);
2346
2347 void
2348 vxge_hw_vpath_msix_clear(struct __vxge_hw_vpath_handle *vpath_handle,
2349                          int msix_id);
2350
2351 void
2352 vxge_hw_vpath_msix_unmask(struct __vxge_hw_vpath_handle *vpath_handle,
2353                           int msix_id);
2354
2355 void
2356 vxge_hw_vpath_msix_mask_all(struct __vxge_hw_vpath_handle *vpath_handle);
2357
2358 enum vxge_hw_status vxge_hw_vpath_intr_enable(
2359                                 struct __vxge_hw_vpath_handle *vpath_handle);
2360
2361 enum vxge_hw_status vxge_hw_vpath_intr_disable(
2362                                 struct __vxge_hw_vpath_handle *vpath_handle);
2363
2364 void vxge_hw_vpath_inta_mask_tx_rx(
2365         struct __vxge_hw_vpath_handle *vpath_handle);
2366
2367 void vxge_hw_vpath_inta_unmask_tx_rx(
2368         struct __vxge_hw_vpath_handle *vpath_handle);
2369
2370 void
2371 vxge_hw_channel_msix_mask(struct __vxge_hw_channel *channelh, int msix_id);
2372
2373 void
2374 vxge_hw_channel_msix_unmask(struct __vxge_hw_channel *channelh, int msix_id);
2375
2376 enum vxge_hw_status
2377 vxge_hw_channel_dtr_alloc(struct __vxge_hw_channel *channel, void **dtrh);
2378
2379 void
2380 vxge_hw_channel_dtr_post(struct __vxge_hw_channel *channel, void *dtrh);
2381
2382 void
2383 vxge_hw_channel_dtr_try_complete(struct __vxge_hw_channel *channel,
2384                                  void **dtrh);
2385
2386 void
2387 vxge_hw_channel_dtr_complete(struct __vxge_hw_channel *channel);
2388
2389 void
2390 vxge_hw_channel_dtr_free(struct __vxge_hw_channel *channel, void *dtrh);
2391
2392 int
2393 vxge_hw_channel_dtr_count(struct __vxge_hw_channel *channel);
2394
2395 /* ========================== PRIVATE API ================================= */
2396
2397 enum vxge_hw_status
2398 __vxge_hw_device_handle_link_up_ind(struct __vxge_hw_device *hldev);
2399
2400 enum vxge_hw_status
2401 __vxge_hw_device_handle_link_down_ind(struct __vxge_hw_device *hldev);
2402
2403 enum vxge_hw_status
2404 __vxge_hw_device_handle_error(
2405                 struct __vxge_hw_device *hldev,
2406                 u32 vp_id,
2407                 enum vxge_hw_event type);
2408
2409 #endif