Merge remote-tracking branch 'origin/master'
[unleashed/lotheac.git] / usr / src / uts / common / io / xge / hal / include / xgehal-stats.h
blobf735a43bce155868630bc5ea1119f12bad1acc57
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
21 * Copyright (c) 2002-2006 Neterion, Inc.
24 #ifndef XGE_HAL_STATS_H
25 #define XGE_HAL_STATS_H
27 #include "xge-os-pal.h"
28 #include "xge-debug.h"
29 #include "xgehal-types.h"
30 #include "xgehal-config.h"
32 __EXTERN_BEGIN_DECLS
34 /**
35 * struct xge_hal_stats_hw_info_t - Xframe hardware statistics.
36 * Transmit MAC Statistics:
38 * @tmac_frms: Count of successfully transmitted MAC
39 * frames Note that this statistic may be inaccurate. The correct statistic may
40 * be derived by calcualating (tmac_ttl_octets - tmac_ttl_less_fb_octets) / 8
42 * @tmac_data_octets: Count of data and padding octets of successfully
43 * transmitted frames.
45 * @tmac_drop_frms: Count of frames that could not be sent for no other reason
46 * than internal MAC processing. Increments once whenever the
47 * transmit buffer is flushed (due to an ECC error on a memory descriptor).
49 * @tmac_mcst_frms: Count of successfully transmitted frames to a multicast
50 * address. Does not include frames sent to the broadcast address.
52 * @tmac_bcst_frms: Count of successfully transmitted frames to the broadcast
53 * address.
55 * @tmac_pause_ctrl_frms: Count of MAC PAUSE control frames that are
56 * transmitted. Since, the only control frames supported by this device
57 * are PAUSE frames, this register is a count of all transmitted MAC control
58 * frames.
60 * @tmac_ttl_octets: Count of total octets of transmitted frames, including
61 * framing characters.
63 * @tmac_ucst_frms: Count of transmitted frames containing a unicast address.
64 * @tmac_nucst_frms: Count of transmitted frames containing a non-unicast
65 * (broadcast, multicast) address.
67 * @tmac_any_err_frms: Count of transmitted frames containing any error that
68 * prevents them from being passed to the network. Increments if there is an ECC
69 * while reading the frame out of the transmit buffer.
71 * @tmac_ttl_less_fb_octets: Count of total octets of transmitted
72 * frames, not including framing characters (i.e. less framing bits)
74 * @tmac_vld_ip_octets: Count of total octets of transmitted IP datagrams that
75 * were passed to the network. Frames that are padded by the host have
76 * their padding counted as part of the IP datagram.
78 * @tmac_vld_ip: Count of transmitted IP datagrams that were passed to the
79 * network.
81 * @tmac_drop_ip: Count of transmitted IP datagrams that could not be passed to
82 * the network. Increments because of 1) an internal processing error (such as
83 * an uncorrectable ECC error); 2) a frame parsing error during IP checksum
84 * calculation.
86 * @tmac_icmp: Count of transmitted ICMP messages. Includes messages not sent
87 * due to problems within ICMP.
89 * @tmac_rst_tcp: Count of transmitted TCP segments containing the RST flag.
91 * @tmac_tcp: Count of transmitted TCP segments. Note that Xena has
92 * no knowledge of retransmission.
94 * @tmac_udp: Count of transmitted UDP datagrams.
95 * @reserved_0: Reserved.
97 * Receive MAC Statistics:
98 * @rmac_vld_frms: Count of successfully received MAC frames. Does not include
99 * frames received with frame-too-long, FCS, or length errors.
101 * @rmac_data_octets: Count of data and padding octets of successfully received
102 * frames. Does not include frames received with frame-too-long, FCS, or length
103 * errors.
105 * @rmac_fcs_err_frms: Count of received MAC frames that do not pass FCS. Does
106 * not include frames received with frame-too-long or frame-too-short error.
108 * @rmac_drop_frms: Count of received frames that could not be passed to the
109 * host because of 1) Random Early Discard (RED); 2) Frame steering algorithm
110 * found no available queue; 3) Receive ingress buffer overflow.
112 * @rmac_vld_mcst_frms: Count of successfully received MAC frames containing a
113 * multicast address. Does not include frames received with frame-too-long, FCS,
114 * or length errors.
116 * @rmac_vld_bcst_frms: Count of successfully received MAC frames containing a
117 * broadcast address. Does not include frames received with frame-too-long, FCS,
118 * or length errors.
120 * @rmac_in_rng_len_err_frms: Count of received frames with a length/type field
121 * value between 46 (42 for VLANtagged frames) and 1500 (also 1500 for
122 * VLAN-tagged frames), inclusive, that does not match the number of data octets
123 * (including pad) received. Also contains a count of received frames with a
124 * length/type field less than 46 (42 for VLAN-tagged frames) and the number of
125 * data octets (including pad) received is greater than 46 (42 for VLAN-tagged
126 * frames).
128 * @rmac_out_rng_len_err_frms: Count of received frames with length/type field
129 * between 1501 and 1535 decimal, inclusive.
131 * @rmac_long_frms: Count of received frames that are longer than
132 * rmac_max_pyld_len + 18 bytes (+22 bytes if VLAN-tagged).
134 * @rmac_pause_ctrl_frms: Count of received MAC PAUSE control frames.
136 * @rmac_unsup_ctrl_frms: Count of received MAC control frames
137 * that do not contain the PAUSE opcode. The sum of MAC_PAUSE_CTRL_FRMS and this
138 * register is a count of all received MAC control frames.
140 * @rmac_ttl_octets: Count of total octets of received frames, including framing
141 * characters.
143 * @rmac_accepted_ucst_frms: Count of successfully received frames
144 * containing a unicast address. Only includes frames that are passed to the
145 * system.
147 * @rmac_accepted_nucst_frms: Count of successfully received frames
148 * containing a non-unicast (broadcast or multicast) address. Only includes
149 * frames that are passed to the system. Could include, for instance,
150 * non-unicast frames that contain FCS errors if the MAC_ERROR_CFG register is
151 * set to pass FCSerrored frames to the host.
153 * @rmac_discarded_frms: Count of received frames containing any error that
154 * prevents them from being passed to the system. Includes, for example,
155 * received pause frames that are discarded by the MAC and frames discarded
156 * because of their destination address.
158 * @rmac_drop_events: Because the RMAC drops one frame at a time, this stat
159 * matches rmac_drop_frms.
161 * @reserved_1: Reserved.
162 * @rmac_ttl_less_fb_octets: Count of total octets of received frames,
163 * not including framing characters (i.e. less framing bits).
165 * @rmac_ttl_frms: Count of all received MAC frames, including frames received
166 * with frame-too-long, FCS, or length errors.
168 * @reserved_2: Reserved.
169 * @reserved_3: Reserved.
170 * @rmac_usized_frms: Count of received frames of length (including FCS, but not
171 * framing bits) less than 64 octets, that are otherwise well-formed.
173 * @rmac_osized_frms: Count of received frames of length (including FCS, but not
174 * framing bits) more than 1518 octets, that are otherwise well-formed.
176 * @rmac_frag_frms: Count of received frames of length (including FCS, but not
177 * framing bits) less than 64 octets that had bad FCS. In other words, counts
178 * fragments (i.e. runts).
180 * @rmac_jabber_frms: Count of received frames of length (including FCS, but not
181 * framing bits) more than MTU octets that had bad FCS. In other words, counts
182 * jabbers.
184 * @reserved_4: Reserved.
185 * @rmac_ttl_64_frms: Count of all received MAC frames with length (including
186 * FCS, but not framing bits) of exactly 64 octets. Includes frames received
187 * with frame-too-long, FCS, or length errors.
189 * @rmac_ttl_65_127_frms: Count of all received MAC frames with length
190 * (including FCS, but not framing bits) of between 65 and 127 octets
191 * inclusive. Includes frames received with frame-too-long, FCS, or length
192 * errors.
193 * @reserved_5: Reserved.
194 * @rmac_ttl_128_255_frms: Count of all received MAC frames with length
195 * (including FCS, but not framing bits) of between 128 and 255 octets
196 * inclusive. Includes frames received with frame-too-long, FCS, or length
197 * errors.
199 * @rmac_ttl_256_511_frms: Count of all received MAC frames with length
200 * (including FCS, but not framing bits) of between 256 and 511 octets
201 * inclusive. Includes frames received with frame-too-long, FCS, or length
202 * errors.
204 * @reserved_6: Reserved.
205 * @rmac_ttl_512_1023_frms: Count of all received MAC frames with length
206 * (including FCS, but not framing bits) of between 512 and 1023 octets
207 * inclusive. Includes frames received with frame-too-long, FCS, or length
208 * errors.
210 * @rmac_ttl_1024_1518_frms: Count of all received MAC frames with length
211 * (including FCS, but not framing bits) of between 1024 and 1518 octets
212 * inclusive. Includes frames received with frame-too-long, FCS, or length
213 * errors.
214 * @reserved_7: Reserved.
215 * @rmac_ip: Count of received IP datagrams. Includes errored IP datagrams.
217 * @rmac_ip_octets: Count of number of octets in received IP datagrams. Includes
218 * errored IP datagrams.
220 * @rmac_hdr_err_ip: Count of received IP datagrams that are discarded due to IP
221 * header errors.
223 * @rmac_drop_ip: Count of received IP datagrams that could not be passed to the
224 * host because of 1) Random Early Discard (RED); 2) Frame steering algorithm
225 * found no available queue; 3) Receive ingress buffer overflow.
226 * @rmac_icmp: Count of received ICMP messages. Includes errored ICMP messages
227 * (due to ICMP checksum fail).
229 * @reserved_8: Reserved.
230 * @rmac_tcp: Count of received TCP segments. Since Xena is unaware of
231 * connection context, counts all received TCP segments, regardless of whether
232 * or not they pertain to an established connection.
234 * @rmac_udp: Count of received UDP datagrams.
235 * @rmac_err_drp_udp: Count of received UDP datagrams that were not delivered to
236 * the system because of 1) Random Early Discard (RED); 2) Frame steering
237 * algorithm found no available queue; 3) Receive ingress buffer overflow.
239 * @rmac_xgmii_err_sym: Count of the number of symbol errors in the received
240 * XGMII data (i.e. PHY indicates "Receive Error" on the XGMII). Only includes
241 * symbol errors that are observed between the XGMII Start Frame Delimiter
242 * and End Frame Delimiter, inclusive. And only increments the count by one for
243 * each frame.
245 * @rmac_frms_q0: Count of number of frames that pass through queue 0 of receive
246 * buffer.
247 * @rmac_frms_q1: Count of number of frames that pass through queue 1 of receive
248 * buffer.
249 * @rmac_frms_q2: Count of number of frames that pass through queue 2 of receive
250 * buffer.
251 * @rmac_frms_q3: Count of number of frames that pass through queue 3 of receive
252 * buffer.
253 * @rmac_frms_q4: Count of number of frames that pass through queue 4 of receive
254 * buffer.
255 * @rmac_frms_q5: Count of number of frames that pass through queue 5 of receive
256 * buffer.
257 * @rmac_frms_q6: Count of number of frames that pass through queue 6 of receive
258 * buffer.
259 * @rmac_frms_q7: Count of number of frames that pass through queue 7 of receive
260 * buffer.
261 * @rmac_full_q0: Count of number of times that receive buffer queue 0 has
262 * filled up. If a queue is size 0, then this stat is incremented to a value of
263 * 1 when MAC receives its first frame.
265 * @rmac_full_q1: Count of number of times that receive buffer queue 1 has
266 * filled up. If a queue is size 0, then this stat is incremented to a value of
267 * 1 when MAC receives its first frame.
269 * @rmac_full_q2: Count of number of times that receive buffer queue 2 has
270 * filled up. If a queue is size 0, then this stat is incremented to a value of
271 * 1 when MAC receives its first frame.
273 * @rmac_full_q3: Count of number of times that receive buffer queue 3 has
274 * filled up. If a queue is size 0, then this stat is incremented to a value of
275 * 1 when MAC receives its first frame.
277 * @rmac_full_q4: Count of number of times that receive buffer queue 4 has
278 * filled up. If a queue is size 0, then this stat is incremented to a value of
279 * 1 when MAC receives its first frame.
281 * @rmac_full_q5: Count of number of times that receive buffer queue 5 has
282 * filled up. If a queue is size 0, then this stat is incremented to a value of
283 * 1 when MAC receives its first frame.
285 * @rmac_full_q6: Count of number of times that receive buffer queue 6 has
286 * filled up. If a queue is size 0, then this stat is incremented to a value of
287 * 1 when MAC receives its first frame.
289 * @rmac_full_q7: Count of number of times that receive buffer queue 7 has
290 * filled up. If a queue is size 0, then this stat is incremented to a value of
291 * 1 when MAC receives its first frame.
293 * @rmac_pause_cnt: Count of number of pause quanta that the MAC has been in the
294 * paused state. Recall, one pause quantum equates to 512 bit times.
295 * @reserved_9: Reserved.
296 * @rmac_xgmii_data_err_cnt: This counter is incremented when either 1) The
297 * Reconcilliation Sublayer (RS) is expecting one control character and gets
298 * another (i.e. expecting Start control character and gets another control
299 * character); 2) Start control character is not in lane 0 or lane 4; 3) The RS
300 * gets a Start control character, but the start frame delimiter is not found in
301 * the correct location.
302 * @rmac_xgmii_ctrl_err_cnt: Maintains a count of unexpected or
303 * misplaced control characters occuring outside of normal data transmission
304 * (i.e. not included in RMAC_XGMII_DATA_ERR_CNT).
306 * @rmac_accepted_ip: Count of received IP datagrams that were passed to the
307 * system.
309 * @rmac_err_tcp: Count of received TCP segments containing errors. For example,
310 * bad TCP checksum.
312 * PCI (bus) Statistics:
313 * @rd_req_cnt: Counts the total number of read requests made by the device.
314 * @new_rd_req_cnt: Counts the requests made for a new read sequence (request
315 * made for the same sequence after a retry or disconnect response are not
316 * counted).
317 * @new_rd_req_rtry_cnt: Counts the Retry responses received on the start of
318 * the new read sequences.
319 * @rd_rtry_cnt: Counts the Retry responses received for read requests.
320 * @wr_rtry_rd_ack_cnt: Increments whenever a read request is accepted by
321 * the target after a write request was terminated with retry.
322 * @wr_req_cnt: Counts the total number of Write requests made by the device.
323 * @new_wr_req_cnt: Counts the requests made for a new write sequence (request
324 * made for the same sequence after a retry or disconnect response are not
325 * counted).
326 * @new_wr_req_rtry_cnt: Counts the requests made for a new write sequence
327 * (request made for the same sequence after a retry or disconnect response are
328 * not counted).
330 * @wr_rtry_cnt: Counts the Retry responses received for write requests.
331 * @wr_disc_cnt: Write Disconnect. Counts the target initiated disconnects
332 * on write transactions.
333 * @rd_rtry_wr_ack_cnt: Increments whenever a write request is accepted by the
334 * target after a read request was terminated with retry.
336 * @txp_wr_cnt: Counts the host write transactions to the Tx Pointer
337 * FIFOs.
338 * @txd_rd_cnt: Count of the Transmit Descriptor (TxD) read requests.
339 * @txd_wr_cnt: Count of the TxD write requests.
340 * @rxd_rd_cnt: Count of the Receive Descriptor (RxD) read requests.
341 * @rxd_wr_cnt: Count of the RxD write requests.
342 * @txf_rd_cnt: Count of transmit frame read requests. This will not
343 * equal the number of frames transmitted, as frame data is typically spread
344 * across multiple PCI transactions.
345 * @rxf_wr_cnt: Count of receive frame write requests.
347 * @tmac_frms_oflow: tbd
348 * @tmac_data_octets_oflow: tbd
349 * @tmac_mcst_frms_oflow: tbd
350 * @tmac_bcst_frms_oflow: tbd
351 * @tmac_ttl_octets_oflow: tbd
352 * @tmac_ucst_frms_oflow: tbd
353 * @tmac_nucst_frms_oflow: tbd
354 * @tmac_any_err_frms_oflow: tbd
355 * @tmac_vlan_frms: tbd
356 * @tmac_vld_ip_oflow: tbd
357 * @tmac_drop_ip_oflow: tbd
358 * @tmac_icmp_oflow: tbd
359 * @tmac_rst_tcp_oflow: tbd
360 * @tmac_udp_oflow: tbd
361 * @reserved_10: tbd
362 * @tpa_unknown_protocol: tbd
363 * @tpa_parse_failure: tbd
364 * @rmac_vld_frms_oflow: tbd
365 * @rmac_data_octets_oflow: tbd
366 * @rmac_vld_mcst_frms_oflow: tbd
367 * @rmac_vld_bcst_frms_oflow: tbd
368 * @rmac_ttl_octets_oflow: tbd
369 * @rmac_accepted_ucst_frms_oflow: tbd
370 * @rmac_accepted_nucst_frms_oflow: tbd
371 * @rmac_discarded_frms_oflow: tbd
372 * @rmac_drop_events_oflow: tbd
373 * @rmac_usized_frms_oflow: tbd
374 * @rmac_osized_frms_oflow: tbd
375 * @rmac_frag_frms_oflow: tbd
376 * @rmac_jabber_frms_oflow: tbd
377 * @rmac_ip_oflow: tbd
378 * @rmac_drop_ip_oflow: tbd
379 * @rmac_icmp_oflow: tbd
380 * @rmac_udp_oflow: tbd
381 * @reserved_11: tbd
382 * @rmac_err_drp_udp_oflow: tbd
383 * @rmac_pause_cnt_oflow: tbd
384 * @rmac_ttl_1519_4095_frms: tbd
385 * @rmac_ttl_4096_8191_frms: tbd
386 * @rmac_ttl_8192_max_frms: tbd
387 * @rmac_ttl_gt_max_frms: tbd
388 * @rmac_osized_alt_frms: tbd
389 * @rmac_jabber_alt_frms: tbd
390 * @rmac_gt_max_alt_frms: tbd
391 * @rmac_vlan_frms: tbd
392 * @rmac_fcs_discard: tbd
393 * @rmac_len_discard: tbd
394 * @rmac_da_discard: tbd
395 * @rmac_pf_discard: tbd
396 * @rmac_rts_discard: tbd
397 * @rmac_wol_discard: tbd
398 * @rmac_red_discard: tbd
399 * @rmac_ingm_full_discard: tbd
400 * @rmac_accepted_ip_oflow: tbd
401 * @reserved_12: tbd
402 * @link_fault_cnt: TBD
403 * @reserved_13: tbd
404 * Xframe hardware statistics.
406 typedef struct xge_hal_stats_hw_info_t {
407 #ifdef XGE_OS_HOST_BIG_ENDIAN
408 /* Tx MAC statistics counters. */
409 u32 tmac_frms;
410 u32 tmac_data_octets;
411 u64 tmac_drop_frms;
412 u32 tmac_mcst_frms;
413 u32 tmac_bcst_frms;
414 u64 tmac_pause_ctrl_frms;
415 u32 tmac_ttl_octets;
416 u32 tmac_ucst_frms;
417 u32 tmac_nucst_frms;
418 u32 tmac_any_err_frms;
419 u64 tmac_ttl_less_fb_octets;
420 u64 tmac_vld_ip_octets;
421 u32 tmac_vld_ip;
422 u32 tmac_drop_ip;
423 u32 tmac_icmp;
424 u32 tmac_rst_tcp;
425 u64 tmac_tcp;
426 u32 tmac_udp;
427 u32 reserved_0;
429 /* Rx MAC Statistics counters. */
430 u32 rmac_vld_frms;
431 u32 rmac_data_octets;
432 u64 rmac_fcs_err_frms;
433 u64 rmac_drop_frms;
434 u32 rmac_vld_mcst_frms;
435 u32 rmac_vld_bcst_frms;
436 u32 rmac_in_rng_len_err_frms;
437 u32 rmac_out_rng_len_err_frms;
438 u64 rmac_long_frms;
439 u64 rmac_pause_ctrl_frms;
440 u64 rmac_unsup_ctrl_frms;
441 u32 rmac_ttl_octets;
442 u32 rmac_accepted_ucst_frms;
443 u32 rmac_accepted_nucst_frms;
444 u32 rmac_discarded_frms;
445 u32 rmac_drop_events;
446 u32 reserved_1;
447 u64 rmac_ttl_less_fb_octets;
448 u64 rmac_ttl_frms;
449 u64 reserved_2;
450 u32 reserved_3;
451 u32 rmac_usized_frms;
452 u32 rmac_osized_frms;
453 u32 rmac_frag_frms;
454 u32 rmac_jabber_frms;
455 u32 reserved_4;
456 u64 rmac_ttl_64_frms;
457 u64 rmac_ttl_65_127_frms;
458 u64 reserved_5;
459 u64 rmac_ttl_128_255_frms;
460 u64 rmac_ttl_256_511_frms;
461 u64 reserved_6;
462 u64 rmac_ttl_512_1023_frms;
463 u64 rmac_ttl_1024_1518_frms;
464 u32 reserved_7;
465 u32 rmac_ip;
466 u64 rmac_ip_octets;
467 u32 rmac_hdr_err_ip;
468 u32 rmac_drop_ip;
469 u32 rmac_icmp;
470 u32 reserved_8;
471 u64 rmac_tcp;
472 u32 rmac_udp;
473 u32 rmac_err_drp_udp;
474 u64 rmac_xgmii_err_sym;
475 u64 rmac_frms_q0;
476 u64 rmac_frms_q1;
477 u64 rmac_frms_q2;
478 u64 rmac_frms_q3;
479 u64 rmac_frms_q4;
480 u64 rmac_frms_q5;
481 u64 rmac_frms_q6;
482 u64 rmac_frms_q7;
483 u16 rmac_full_q0;
484 u16 rmac_full_q1;
485 u16 rmac_full_q2;
486 u16 rmac_full_q3;
487 u16 rmac_full_q4;
488 u16 rmac_full_q5;
489 u16 rmac_full_q6;
490 u16 rmac_full_q7;
491 u32 rmac_pause_cnt;
492 u32 reserved_9;
493 u64 rmac_xgmii_data_err_cnt;
494 u64 rmac_xgmii_ctrl_err_cnt;
495 u32 rmac_accepted_ip;
496 u32 rmac_err_tcp;
498 /* PCI/PCI-X Read transaction statistics. */
499 u32 rd_req_cnt;
500 u32 new_rd_req_cnt;
501 u32 new_rd_req_rtry_cnt;
502 u32 rd_rtry_cnt;
503 u32 wr_rtry_rd_ack_cnt;
505 /* PCI/PCI-X write transaction statistics. */
506 u32 wr_req_cnt;
507 u32 new_wr_req_cnt;
508 u32 new_wr_req_rtry_cnt;
509 u32 wr_rtry_cnt;
510 u32 wr_disc_cnt;
511 u32 rd_rtry_wr_ack_cnt;
513 /* DMA Transaction statistics. */
514 u32 txp_wr_cnt;
515 u32 txd_rd_cnt;
516 u32 txd_wr_cnt;
517 u32 rxd_rd_cnt;
518 u32 rxd_wr_cnt;
519 u32 txf_rd_cnt;
520 u32 rxf_wr_cnt;
522 /* Enhanced Herc statistics */
523 u32 tmac_frms_oflow;
524 u32 tmac_data_octets_oflow;
525 u32 tmac_mcst_frms_oflow;
526 u32 tmac_bcst_frms_oflow;
527 u32 tmac_ttl_octets_oflow;
528 u32 tmac_ucst_frms_oflow;
529 u32 tmac_nucst_frms_oflow;
530 u32 tmac_any_err_frms_oflow;
531 u64 tmac_vlan_frms;
532 u32 tmac_vld_ip_oflow;
533 u32 tmac_drop_ip_oflow;
534 u32 tmac_icmp_oflow;
535 u32 tmac_rst_tcp_oflow;
536 u32 tmac_udp_oflow;
537 u32 tpa_unknown_protocol;
538 u32 tpa_parse_failure;
539 u32 reserved_10;
540 u32 rmac_vld_frms_oflow;
541 u32 rmac_data_octets_oflow;
542 u32 rmac_vld_mcst_frms_oflow;
543 u32 rmac_vld_bcst_frms_oflow;
544 u32 rmac_ttl_octets_oflow;
545 u32 rmac_accepted_ucst_frms_oflow;
546 u32 rmac_accepted_nucst_frms_oflow;
547 u32 rmac_discarded_frms_oflow;
548 u32 rmac_drop_events_oflow;
549 u32 rmac_usized_frms_oflow;
550 u32 rmac_osized_frms_oflow;
551 u32 rmac_frag_frms_oflow;
552 u32 rmac_jabber_frms_oflow;
553 u32 rmac_ip_oflow;
554 u32 rmac_drop_ip_oflow;
555 u32 rmac_icmp_oflow;
556 u32 rmac_udp_oflow;
557 u32 rmac_err_drp_udp_oflow;
558 u32 rmac_pause_cnt_oflow;
559 u32 reserved_11;
560 u64 rmac_ttl_1519_4095_frms;
561 u64 rmac_ttl_4096_8191_frms;
562 u64 rmac_ttl_8192_max_frms;
563 u64 rmac_ttl_gt_max_frms;
564 u64 rmac_osized_alt_frms;
565 u64 rmac_jabber_alt_frms;
566 u64 rmac_gt_max_alt_frms;
567 u64 rmac_vlan_frms;
568 u32 rmac_fcs_discard;
569 u32 rmac_len_discard;
570 u32 rmac_da_discard;
571 u32 rmac_pf_discard;
572 u32 rmac_rts_discard;
573 u32 rmac_wol_discard;
574 u32 rmac_red_discard;
575 u32 rmac_ingm_full_discard;
576 u32 rmac_accepted_ip_oflow;
577 u32 reserved_12;
578 u32 link_fault_cnt;
579 u32 reserved_13;
580 #else
581 /* Tx MAC statistics counters. */
582 u32 tmac_data_octets;
583 u32 tmac_frms;
584 u64 tmac_drop_frms;
585 u32 tmac_bcst_frms;
586 u32 tmac_mcst_frms;
587 u64 tmac_pause_ctrl_frms;
588 u32 tmac_ucst_frms;
589 u32 tmac_ttl_octets;
590 u32 tmac_any_err_frms;
591 u32 tmac_nucst_frms;
592 u64 tmac_ttl_less_fb_octets;
593 u64 tmac_vld_ip_octets;
594 u32 tmac_drop_ip;
595 u32 tmac_vld_ip;
596 u32 tmac_rst_tcp;
597 u32 tmac_icmp;
598 u64 tmac_tcp;
599 u32 reserved_0;
600 u32 tmac_udp;
602 /* Rx MAC Statistics counters. */
603 u32 rmac_data_octets;
604 u32 rmac_vld_frms;
605 u64 rmac_fcs_err_frms;
606 u64 rmac_drop_frms;
607 u32 rmac_vld_bcst_frms;
608 u32 rmac_vld_mcst_frms;
609 u32 rmac_out_rng_len_err_frms;
610 u32 rmac_in_rng_len_err_frms;
611 u64 rmac_long_frms;
612 u64 rmac_pause_ctrl_frms;
613 u64 rmac_unsup_ctrl_frms;
614 u32 rmac_accepted_ucst_frms;
615 u32 rmac_ttl_octets;
616 u32 rmac_discarded_frms;
617 u32 rmac_accepted_nucst_frms;
618 u32 reserved_1;
619 u32 rmac_drop_events;
620 u64 rmac_ttl_less_fb_octets;
621 u64 rmac_ttl_frms;
622 u64 reserved_2;
623 u32 rmac_usized_frms;
624 u32 reserved_3;
625 u32 rmac_frag_frms;
626 u32 rmac_osized_frms;
627 u32 reserved_4;
628 u32 rmac_jabber_frms;
629 u64 rmac_ttl_64_frms;
630 u64 rmac_ttl_65_127_frms;
631 u64 reserved_5;
632 u64 rmac_ttl_128_255_frms;
633 u64 rmac_ttl_256_511_frms;
634 u64 reserved_6;
635 u64 rmac_ttl_512_1023_frms;
636 u64 rmac_ttl_1024_1518_frms;
637 u32 rmac_ip;
638 u32 reserved_7;
639 u64 rmac_ip_octets;
640 u32 rmac_drop_ip;
641 u32 rmac_hdr_err_ip;
642 u32 reserved_8;
643 u32 rmac_icmp;
644 u64 rmac_tcp;
645 u32 rmac_err_drp_udp;
646 u32 rmac_udp;
647 u64 rmac_xgmii_err_sym;
648 u64 rmac_frms_q0;
649 u64 rmac_frms_q1;
650 u64 rmac_frms_q2;
651 u64 rmac_frms_q3;
652 u64 rmac_frms_q4;
653 u64 rmac_frms_q5;
654 u64 rmac_frms_q6;
655 u64 rmac_frms_q7;
656 u16 rmac_full_q3;
657 u16 rmac_full_q2;
658 u16 rmac_full_q1;
659 u16 rmac_full_q0;
660 u16 rmac_full_q7;
661 u16 rmac_full_q6;
662 u16 rmac_full_q5;
663 u16 rmac_full_q4;
664 u32 reserved_9;
665 u32 rmac_pause_cnt;
666 u64 rmac_xgmii_data_err_cnt;
667 u64 rmac_xgmii_ctrl_err_cnt;
668 u32 rmac_err_tcp;
669 u32 rmac_accepted_ip;
671 /* PCI/PCI-X Read transaction statistics. */
672 u32 new_rd_req_cnt;
673 u32 rd_req_cnt;
674 u32 rd_rtry_cnt;
675 u32 new_rd_req_rtry_cnt;
677 /* PCI/PCI-X Write/Read transaction statistics. */
678 u32 wr_req_cnt;
679 u32 wr_rtry_rd_ack_cnt;
680 u32 new_wr_req_rtry_cnt;
681 u32 new_wr_req_cnt;
682 u32 wr_disc_cnt;
683 u32 wr_rtry_cnt;
685 /* PCI/PCI-X Write / DMA Transaction statistics. */
686 u32 txp_wr_cnt;
687 u32 rd_rtry_wr_ack_cnt;
688 u32 txd_wr_cnt;
689 u32 txd_rd_cnt;
690 u32 rxd_wr_cnt;
691 u32 rxd_rd_cnt;
692 u32 rxf_wr_cnt;
693 u32 txf_rd_cnt;
695 /* Enhanced Herc statistics */
696 u32 tmac_data_octets_oflow;
697 u32 tmac_frms_oflow;
698 u32 tmac_bcst_frms_oflow;
699 u32 tmac_mcst_frms_oflow;
700 u32 tmac_ucst_frms_oflow;
701 u32 tmac_ttl_octets_oflow;
702 u32 tmac_any_err_frms_oflow;
703 u32 tmac_nucst_frms_oflow;
704 u64 tmac_vlan_frms;
705 u32 tmac_drop_ip_oflow;
706 u32 tmac_vld_ip_oflow;
707 u32 tmac_rst_tcp_oflow;
708 u32 tmac_icmp_oflow;
709 u32 tpa_unknown_protocol;
710 u32 tmac_udp_oflow;
711 u32 reserved_10;
712 u32 tpa_parse_failure;
713 u32 rmac_data_octets_oflow;
714 u32 rmac_vld_frms_oflow;
715 u32 rmac_vld_bcst_frms_oflow;
716 u32 rmac_vld_mcst_frms_oflow;
717 u32 rmac_accepted_ucst_frms_oflow;
718 u32 rmac_ttl_octets_oflow;
719 u32 rmac_discarded_frms_oflow;
720 u32 rmac_accepted_nucst_frms_oflow;
721 u32 rmac_usized_frms_oflow;
722 u32 rmac_drop_events_oflow;
723 u32 rmac_frag_frms_oflow;
724 u32 rmac_osized_frms_oflow;
725 u32 rmac_ip_oflow;
726 u32 rmac_jabber_frms_oflow;
727 u32 rmac_icmp_oflow;
728 u32 rmac_drop_ip_oflow;
729 u32 rmac_err_drp_udp_oflow;
730 u32 rmac_udp_oflow;
731 u32 reserved_11;
732 u32 rmac_pause_cnt_oflow;
733 u64 rmac_ttl_1519_4095_frms;
734 u64 rmac_ttl_4096_8191_frms;
735 u64 rmac_ttl_8192_max_frms;
736 u64 rmac_ttl_gt_max_frms;
737 u64 rmac_osized_alt_frms;
738 u64 rmac_jabber_alt_frms;
739 u64 rmac_gt_max_alt_frms;
740 u64 rmac_vlan_frms;
741 u32 rmac_len_discard;
742 u32 rmac_fcs_discard;
743 u32 rmac_pf_discard;
744 u32 rmac_da_discard;
745 u32 rmac_wol_discard;
746 u32 rmac_rts_discard;
747 u32 rmac_ingm_full_discard;
748 u32 rmac_red_discard;
749 u32 reserved_12;
750 u32 rmac_accepted_ip_oflow;
751 u32 reserved_13;
752 u32 link_fault_cnt;
753 #endif
754 } xge_hal_stats_hw_info_t;
757 * struct xge_hal_stats_channel_into_t - HAL channel statistics.
758 * @full_cnt: TBD
759 * @usage_max: TBD
760 * @reserve_free_swaps_cnt: Reserve/free swap counter. Internal usage.
761 * @max_compl_per_intr_cnt: Maximum number of completions per interrupt.
762 * @avg_compl_per_intr_cnt: Average number of completions per interrupt.
763 * Note that a total number of completed descriptors
764 * for the given channel can be calculated as
765 * (@traffic_intr_cnt * @avg_compl_per_intr_cnt).
766 * @total_compl_cnt: Total completion count.
767 * @total_compl_cnt == (@traffic_intr_cnt * @avg_compl_per_intr_cnt).
768 * @total_posts: Total number of descriptor postings on the channel.
769 * Counts the number of xge_hal_ring_dtr_post()
770 * or xge_hal_fifo_dtr_post() calls by ULD, for ring and fifo
771 * channel, respectively.
772 * @total_posts_many: Total number of posts on the channel that involved
773 * more than one descriptor. Counts the number of
774 * xge_hal_fifo_dtr_post_many() calls performed by ULD.
775 * @total_buffers: Total number of buffers posted on the channel.
776 * @copied_frags: TBD
777 * @copied_buffers: TBD
778 * @avg_buffers_per_post: Average number of buffers transferred in a single
779 * post operation.
780 * Calculated as @total_buffers/@total_posts.
781 * @avg_buffer_size: Average buffer size transferred by a single post
782 * operation on a fifo channel. The counter is not supported for a ring
783 * channel. Calculated as a total number of transmitted octets divided
784 * by @total_buffers.
785 * @avg_post_size: Average amount of data transferred by a single post.
786 * Calculated as a total number of transmitted octets divided by
787 * @total_posts.
788 * @ring_bump_cnt: Ring "bump" count. Number of times the hardware could
789 * not post receive data (and had to continue keeping it on-board)
790 * because of unavailable receive descriptor(s).
791 * @total_posts_dtrs_many: Total number of posts on the channel that involving
792 * more than one descriptor.
793 * @total_posts_frags_many: Total number of fragments posted on the channel
794 * during post requests of multiple descriptors.
795 * @total_posts_dang_dtrs: Total number of posts on the channel involving
796 * dangling descriptors.
797 * @total_posts_dang_frags: Total number of dangling fragments posted on the channel
798 * during post request containing multiple descriptors.
800 * HAL channel counters.
801 * See also: xge_hal_stats_device_info_t{}.
803 typedef struct xge_hal_stats_channel_info_t {
804 u32 full_cnt;
805 u32 usage_max;
806 u32 reserve_free_swaps_cnt;
807 u32 avg_compl_per_intr_cnt;
808 u32 total_compl_cnt;
809 u32 total_posts;
810 u32 total_posts_many;
811 u32 total_buffers;
812 u32 copied_frags;
813 u32 copied_buffers;
814 u32 avg_buffers_per_post;
815 u32 avg_buffer_size;
816 u32 avg_post_size;
817 u32 ring_bump_cnt;
818 u32 total_posts_dtrs_many;
819 u32 total_posts_frags_many;
820 u32 total_posts_dang_dtrs;
821 u32 total_posts_dang_frags;
822 } xge_hal_stats_channel_info_t;
825 * struct xge_hal_xpak_counter_t - HAL xpak error counters
826 * @excess_temp: excess transceiver_temperature count
827 * @excess_bias_current: excess laser_bias_current count
828 * @excess_laser_output: excess laser_output_power count
829 * @tick_period: tick count for each cycle
831 typedef struct xge_hal_xpak_counter_t {
832 u32 excess_temp;
833 u32 excess_bias_current;
834 u32 excess_laser_output;
835 u32 tick_period;
836 } xge_hal_xpak_counter_t;
839 * struct xge_hal_stats_xpak_t - HAL xpak stats
840 * @alarm_transceiver_temp_high: alarm_transceiver_temp_high count value
841 * @alarm_transceiver_temp_low : alarm_transceiver_temp_low count value
842 * @alarm_laser_bias_current_high: alarm_laser_bias_current_high count value
843 * @alarm_laser_bias_current_low: alarm_laser_bias_current_low count value
844 * @alarm_laser_output_power_high: alarm_laser_output_power_high count value
845 * @alarm_laser_output_power_low: alarm_laser_output_power_low count value
846 * @warn_transceiver_temp_high: warn_transceiver_temp_high count value
847 * @warn_transceiver_temp_low: warn_transceiver_temp_low count value
848 * @warn_laser_bias_current_high: warn_laser_bias_current_high count value
849 * @warn_laser_bias_current_low: warn_laser_bias_current_low count value
850 * @warn_laser_output_power_high: warn_laser_output_power_high count value
851 * @warn_laser_output_power_low: warn_laser_output_power_low count value
853 typedef struct xge_hal_stats_xpak_t {
854 u16 alarm_transceiver_temp_high;
855 u16 alarm_transceiver_temp_low;
856 u16 alarm_laser_bias_current_high;
857 u16 alarm_laser_bias_current_low;
858 u16 alarm_laser_output_power_high;
859 u16 alarm_laser_output_power_low;
860 u16 warn_transceiver_temp_high;
861 u16 warn_transceiver_temp_low;
862 u16 warn_laser_bias_current_high;
863 u16 warn_laser_bias_current_low;
864 u16 warn_laser_output_power_high;
865 u16 warn_laser_output_power_low;
866 } xge_hal_stats_xpak_t;
871 * struct xge_hal_stats_sw_err_t - HAL device error statistics.
872 * @sm_err_cnt: TBD
873 * @single_ecc_err_cnt: TBD
874 * @double_ecc_err_cnt: TBD
875 * @ecc_err_cnt: ECC error count.
876 * @parity_err_cnt: Parity error count.
877 * @serr_cnt: Number of exceptions indicated to the host via PCI SERR#.
878 * @rxd_t_code_err_cnt: Array of receive transfer codes. The position
879 * (index) in this array reflects the transfer code type, for instance
880 * 0x7 - for "invalid receive buffer size", or 0x8 - for ECC.
881 * Value rxd_t_code_err_cnt[i] reflects the
882 * number of times the corresponding transfer code was encountered.
884 * @txd_t_code_err_cnt: Array of transmit transfer codes. The position
885 * (index) in this array reflects the transfer code type, for instance
886 * 0xA - "loss of link".
887 * Value txd_t_code_err_cnt[i] reflects the
888 * number of times the corresponding transfer code was encountered.
889 * @stats_xpak: TBD
890 * @xpak_counter: TBD
892 typedef struct xge_hal_stats_sw_err_t {
893 u32 sm_err_cnt;
894 u32 single_ecc_err_cnt;
895 u32 double_ecc_err_cnt;
896 u32 ecc_err_cnt;
897 u32 parity_err_cnt;
898 u32 serr_cnt;
899 u32 rxd_t_code_err_cnt[16];
900 u32 txd_t_code_err_cnt[16];
901 xge_hal_stats_xpak_t stats_xpak;
902 xge_hal_xpak_counter_t xpak_counter;
903 } xge_hal_stats_sw_err_t;
906 * struct xge_hal_stats_device_info_t - HAL own per-device statistics.
908 * @rx_traffic_intr_cnt: TBD
909 * @tx_traffic_intr_cnt: TBD
910 * @txpic_intr_cnt: TBD
911 * @txdma_intr_cnt: TBD
912 * @txmac_intr_cnt: TBD
913 * @txxgxs_intr_cnt: TBD
914 * @rxpic_intr_cnt: TBD
915 * @rxdma_intr_cnt: TBD
916 * @rxmac_intr_cnt: TBD
917 * @rxxgxs_intr_cnt: TBD
918 * @mc_intr_cnt: TBD
919 * @not_traffic_intr_cnt: Number of times the host was interrupted
920 * without new completions.
921 * "Non-traffic interrupt counter".
922 * @not_xge_intr_cnt: TBD
923 * @traffic_intr_cnt: Number of traffic interrupts for the device.
924 * @total_intr_cnt: Total number of traffic interrupts for the device.
925 * @total_intr_cnt == @traffic_intr_cnt +
926 * @not_traffic_intr_cnt
927 * @soft_reset_cnt: Number of times soft reset is done on this device.
928 * @rxufca_hi_adjust_cnt: TODO
929 * @rxufca_lo_adjust_cnt: TODO
930 * @bimodal_hi_adjust_cnt: TODO
931 * @bimodal_lo_adjust_cnt: TODO
933 * @tot_frms_lroised: TBD
934 * @tot_lro_sessions: TBD
935 * @lro_frm_len_exceed_cnt: TBD
936 * @lro_sg_exceed_cnt: TBD
937 * @lro_out_of_seq_pkt_cnt: TBD
938 * @lro_dup_pkt_cnt: TBD
940 * HAL per-device statistics.
941 * See also: xge_hal_stats_channel_info_t{}.
943 typedef struct xge_hal_stats_device_info_t {
944 u32 rx_traffic_intr_cnt;
945 u32 tx_traffic_intr_cnt;
946 u32 txpic_intr_cnt;
947 u32 txdma_intr_cnt;
948 u32 pfc_err_cnt;
949 u32 tda_err_cnt;
950 u32 pcc_err_cnt;
951 u32 tti_err_cnt;
952 u32 lso_err_cnt;
953 u32 tpa_err_cnt;
954 u32 sm_err_cnt;
955 u32 txmac_intr_cnt;
956 u32 mac_tmac_err_cnt;
957 u32 txxgxs_intr_cnt;
958 u32 xgxs_txgxs_err_cnt;
959 u32 rxpic_intr_cnt;
960 u32 rxdma_intr_cnt;
961 u32 rc_err_cnt;
962 u32 rpa_err_cnt;
963 u32 rda_err_cnt;
964 u32 rti_err_cnt;
965 u32 rxmac_intr_cnt;
966 u32 mac_rmac_err_cnt;
967 u32 rxxgxs_intr_cnt;
968 u32 xgxs_rxgxs_err_cnt;
969 u32 mc_intr_cnt;
970 u32 not_traffic_intr_cnt;
971 u32 not_xge_intr_cnt;
972 u32 traffic_intr_cnt;
973 u32 total_intr_cnt;
974 u32 soft_reset_cnt;
975 u32 rxufca_hi_adjust_cnt;
976 u32 rxufca_lo_adjust_cnt;
977 u32 bimodal_hi_adjust_cnt;
978 u32 bimodal_lo_adjust_cnt;
979 #ifdef XGE_HAL_CONFIG_LRO
980 u32 tot_frms_lroised;
981 u32 tot_lro_sessions;
982 u32 lro_frm_len_exceed_cnt;
983 u32 lro_sg_exceed_cnt;
984 u32 lro_out_of_seq_pkt_cnt;
985 u32 lro_dup_pkt_cnt;
986 #endif
987 } xge_hal_stats_device_info_t;
989 /* ========================== XFRAME ER STATISTICS ======================== */
990 #define XGE_HAL_MAC_LINKS 3
991 #define XGE_HAL_MAC_AGGREGATORS 2
992 #define XGE_HAL_VPATHS 17
994 * struct xge_hal_stats_link_info_t - XGMAC statistics for a link
996 * @tx_frms: Count of transmitted MAC frames for mac the link.
997 * @tx_ttl_eth_octets: Count of total octets of transmitted frames
998 * for mac the link.
999 * @tx_data_octets: Count of data and padding octets of transmitted
1000 * frames for mac the link.
1001 * @tx_mcst_frms: Count of multicast MAC frames for mac the link.
1002 * @tx_bcst_frms: Count of broadcast MAC frames for mac the link.
1003 * @tx_ucst_frms: Count of unicast MAC frames for mac the link.
1004 * @tx_tagged_frms: Count of transmitted frames containing a VLAN tag
1005 * for mac the link.
1006 * @tx_vld_ip: Count of transmitted IP datagrams for mac the link.
1007 * @tx_vld_ip_octets: Count of transmitted IP octets for mac the link.
1008 * @tx_icmp: Count of transmitted ICMP messages for mac the link.
1009 * @tx_tcp: Count of transmitted TCP segments for mac the link.
1010 * @tx_rst_tcp: Count of transmitted TCP segments containing the RST
1011 * flag mac the link.
1012 * @tx_udp: Count of transmitted UDP datagrams for mac the link.
1013 * @tx_unknown_protocol: Count of transmitted packets of unknown
1014 * protocol for mac the link.
1015 * @tx_parse_error: Count of transmitted packets with parsing errors
1016 * for mac the link.
1017 * @tx_pause_ctrl_frms: Count of MAC PAUSE control frames for mac
1018 * the link.
1019 * @tx_lacpdu_frms: Count of LACPDUs transmitted for mac the link.
1020 * @tx_marker_pdu_frms: Count of Marker PDUs transmitted for mac the
1021 * link.
1022 * @tx_marker_resp_pdu_frms: Count of Marker Response PDUs transmitted
1023 * for mac the link.
1024 * @tx_drop_ip: Count of dropped IP packets from the transmission path
1025 * for mac the link.
1026 * @tx_xgmii_char1_match: Count of the number of transmitted XGMII
1027 * characters that match first pattern, for mac the link.
1028 * @tx_xgmii_char2_match: Count of the number of transmitted XGMII
1029 * characters that match second pattern, for mac the link.
1030 * @tx_xgmii_column1_match: Count of the number of transmitted XGMII
1031 * columns that match first pattern, for mac the link.
1032 * @tx_xgmii_column2_match: Count of the number of transmitted XGMII
1033 * columns that match second pattern, for mac the link.
1034 * @tx_drop_frms: Count of frames dropped due to internal errors during
1035 * transmission for mac the link.
1036 * @tx_any_err_frms: Count of frames dropped due to any error during
1037 * transmission for mac the link.
1038 * @rx_ttl_frms: Count of all received MAC frames for mac the link.
1039 * @rx_vld_frms: Count of all successfully received MAC frames for mac
1040 * the link.
1041 * @rx_offld_frms: Count of all offloaded received MAC frames for mac
1042 * the link.
1043 * @rx_ttl_eth_octets: Count of total octets of received frames, not
1044 * including framing characters for mac the link.
1045 * @rx_data_octets: Count of data and padding octets of successfully
1046 * received frames for mac the link.
1047 * @rx_offld_octets: Count of total octets, not including framing
1048 * characters, of offloaded received frames for mac the link.
1049 * @rx_vld_mcst_frms: Count of successfully received multicast MAC
1050 * frames for mac the link.
1051 * @rx_vld_bcst_frms: Count of successfully received broadcast MAC
1052 * frames for mac the link.
1053 * @rx_accepted_ucst_frms: Count of successfully received unicast MAC
1054 * frames for mac the link.
1055 * @rx_accepted_nucst_frms: Count of successfully received non-unicast
1056 * MAC frames for mac the link.
1057 * @rx_tagged_frms: Count of received frames containing a VLAN tag for
1058 * mac the link.
1059 * @rx_long_frms: Count of received frames that are longer than
1060 * RX_MAX_PYLD_LEN + 18 bytes (+ 22 bytes if VLAN-tagged) for mac the link.
1061 * @rx_usized_frms: Count of received frames of length less than 64
1062 * octets, for mac the link.
1063 * @rx_osized_frms: Count of received frames of length more than 1518
1064 * octets for mac the link.
1065 * @rx_frag_frms: Count of received frames of length less than 64
1066 * octets that had bad FCS, for mac the link.
1067 * @rx_jabber_frms: Count of received frames of length more than 1518
1068 * octets that had bad FCS, for mac the link.
1069 * @rx_ttl_64_frms: Count of all received MAC frames with length of
1070 * exactly 64 octets, for mac the link.
1071 * @rx_ttl_65_127_frms: Count of all received MAC frames with length
1072 * of between 65 and 127 octets inclusive, for mac the link.
1073 * @rx_ttl_128_255_frms: Count of all received MAC frames with length
1074 * of between 128 and 255 octets inclusive, for mac the link.
1075 * @rx_ttl_256_511_frms: Count of all received MAC frames with length
1076 * of between 246 and 511 octets inclusive, for mac the link.
1077 * @rx_ttl_512_1023_frms: Count of all received MAC frames with length
1078 * of between 512 and 1023 octets inclusive, for mac the link.
1079 * @rx_ttl_1024_1518_frms: Count of all received MAC frames with length
1080 * of between 1024 and 1518 octets inclusive, for mac the link.
1081 * @rx_ttl_1519_4095_frms: Count of all received MAC frames with length
1082 * of between 1519 and 4095 octets inclusive, for mac the link.
1083 * @rx_ttl_40956_8191_frms: Count of all received MAC frames with length
1084 * of between 4096 and 8191 octets inclusive, for mac the link.
1085 * @rx_ttl_8192_max_frms: Count of all received MAC frames with length
1086 * of between 8192 and RX_MAX_PYLD_LEN+18 octets inclusive, for mac the link.
1087 * @rx_ttl_gt_max_frms: Count of all received MAC frames with length
1088 * exceeding RX_MAX_PYLD_LEN+18 octets inclusive, for mac the link.
1089 * @rx_ip: Count of received IP datagrams, for mac the link.
1090 * @rx_accepted_ip: Count of received and accepted IP datagrams,
1091 * for mac the link.
1092 * @rx_ip_octets: Count of number of octets in received IP datagrams,
1093 * for mac the link.
1094 * @rx_hdr_err_ip: Count of received IP datagrams that are discarded
1095 * due to IP header errors, for mac the link.
1096 * @rx_icmp: Count of received ICMP messages for mac the link.
1097 * @rx_tcp: Count of received TCP segments for mac the link.
1098 * @rx_udp: Count of received UDP datagrams for mac the link.
1099 * @rx_err_tcp: Count of received TCP segments containing errors for
1100 * mac the link.
1101 * @rx_pause_cnt: Count of number of pause quanta that the MAC has
1102 * been in the paused state, for mac the link.
1103 * @rx_pause_ctrl_frms: Count of received MAC PAUSE control frames for
1104 * mac the link.
1105 * @rx_unsup_ctrl_frms: Count of received MAC control frames that do
1106 * not contain the PAUSE opcode for mac the link.
1107 * @rx_fcs_err_frms: Count of received MAC frames that do not pass FCS
1108 * for mac the link.
1109 * @rx_in_rng_len_err_frms: Count of received frames with a length/type
1110 * field value between 46 and 1500 inclusive, that does not match the number
1111 * of data octets received, for mac the link.
1112 * @rx_out_rng_len_err_frms: Count of received frames with length/type
1113 * field between 1501 and 1535 decimal, inclusive. for mac the link.
1114 * @rx_drop_frms: Count of dropped frames from receive path for mac
1115 * the link.
1116 * @rx_discarded_frms: Count of discarded frames from receive path for
1117 * mac the link.
1118 * @rx_drop_ip: Count of droppen IP datagrams from receive path for
1119 * mac the link.
1120 * @rx_err_drp_udp: Count of droppen UDP datagrams from receive path
1121 * for mac the link.
1122 * @rx_lacpdu_frms: Count of valid LACPDUs received for mac the link.
1123 * @rx_marker_pdu_frms: Count of valid Marker PDUs received for mac
1124 * the link.
1125 * @rx_marker_resp_pdu_frms: Count of valid Marker Response PDUs
1126 * received for mac the link.
1127 * @rx_unknown_pdu_frms: Count of unknown PDUs received for mac the link.
1128 * @rx_illegal_pdu_frms: Count of illegal PDUs received for mac the link.
1129 * @rx_fcs_discard: Count of discarded PDUs received for mac the link.
1130 * @rx_len_discard: Count of received frames that were discarded
1131 * because of an invalid frame length, for mac the link.
1132 * @rx_len_discard: Count of received frames that were discarded
1133 * because of an invalid destination MAC address, for mac the link.
1134 * @rx_pf_discard: Count of received frames that were discarded for
1135 * mac the link.
1136 * @rx_trash_discard: Count of received frames that were steered to the
1137 * trash queue for mac the link.
1138 * @rx_rts_discard: Count of received frames that were discarded by RTS
1139 * logic for mac the link.
1140 * @rx_wol_discard: Count of received frames that were discarded by WOL
1141 * logic for mac the link.
1142 * @rx_red_discard: Count of received frames that were discarded by RED
1143 * logic for mac the link.
1144 * @rx_ingm_full_discard: Count of received frames that were discarded
1145 * because the internal ingress memory was full for mac the link.
1146 * @rx_xgmii_data_err_cnt: Count of unexpected control characters
1147 * during normal data transmission for mac the link.
1148 * @rx_xgmii_ctrl_err_cnt: Count of unexpected or misplaced control
1149 * characters occuring between times of normal data transmission for mac
1150 * the link.
1151 * @rx_xgmii_err_sym: Count of the number of symbol errors in the
1152 * received XGMII data for mac the link.
1153 * @rx_xgmii_char1_match: Count of the number of XGMII characters
1154 * that match first pattern defined in MAC_STATS_RX_XGMII_CHAR_LINK_N.
1155 * @rx_xgmii_char2_match: Count of the number of XGMII characters
1156 * that match second pattern defined in MAC_STATS_RX_XGMII_CHAR_LINK_N.
1157 * @rx_xgmii_column1_match: Count of the number of XGMII columns
1158 * that match a pattern defined in MAC_STATS_RX_XGMII_COLUMN1_LINK_N.
1159 * @rx_xgmii_column2_match: Count of the number of XGMII columns
1160 * that match a pattern defined in MAC_STATS_RX_XGMII_COLUMN1_LINK_N.
1161 * @rx_local_fault: Count of the number of local faults for mac the link.
1162 * @rx_remote_fault: Count of the number of remote faults for mac the
1163 * link.
1164 * @rx_queue_full: Count of the number of frame destined for a full
1165 * queue for mac the link.
1167 typedef struct xge_hal_stats_link_info_t {
1168 u64 tx_frms;
1169 u64 tx_ttl_eth_octets;
1170 u64 tx_data_octets;
1171 u64 tx_mcst_frms;
1172 u64 tx_bcst_frms;
1173 u64 tx_ucst_frms;
1174 u64 tx_tagged_frms;
1175 u64 tx_vld_ip;
1176 u64 tx_vld_ip_octets;
1177 u64 tx_icmp;
1178 u64 tx_tcp;
1179 u64 tx_rst_tcp;
1180 u64 tx_udp;
1181 u64 tx_unknown_protocol;
1182 u64 tx_parse_error;
1183 u64 tx_pause_ctrl_frms;
1184 u64 tx_lacpdu_frms;
1185 u64 tx_marker_pdu_frms;
1186 u64 tx_marker_resp_pdu_frms;
1187 u64 tx_drop_ip;
1188 u64 tx_xgmii_char1_match;
1189 u64 tx_xgmii_char2_match;
1190 u64 tx_xgmii_column1_match;
1191 u64 tx_xgmii_column2_match;
1192 u64 tx_drop_frms;
1193 u64 tx_any_err_frms;
1194 u64 rx_ttl_frms;
1195 u64 rx_vld_frms;
1196 u64 rx_offld_frms;
1197 u64 rx_ttl_eth_octets;
1198 u64 rx_data_octets;
1199 u64 rx_offld_octets;
1200 u64 rx_vld_mcst_frms;
1201 u64 rx_vld_bcst_frms;
1202 u64 rx_accepted_ucst_frms;
1203 u64 rx_accepted_nucst_frms;
1204 u64 rx_tagged_frms;
1205 u64 rx_long_frms;
1206 u64 rx_usized_frms;
1207 u64 rx_osized_frms;
1208 u64 rx_frag_frms;
1209 u64 rx_jabber_frms;
1210 u64 rx_ttl_64_frms;
1211 u64 rx_ttl_65_127_frms;
1212 u64 rx_ttl_128_255_frms;
1213 u64 rx_ttl_256_511_frms;
1214 u64 rx_ttl_512_1023_frms;
1215 u64 rx_ttl_1024_1518_frms;
1216 u64 rx_ttl_1519_4095_frms;
1217 u64 rx_ttl_40956_8191_frms;
1218 u64 rx_ttl_8192_max_frms;
1219 u64 rx_ttl_gt_max_frms;
1220 u64 rx_ip;
1221 u64 rx_ip_octets;
1222 u64 rx_hdr_err_ip;
1223 u64 rx_icmp;
1224 u64 rx_tcp;
1225 u64 rx_udp;
1226 u64 rx_err_tcp;
1227 u64 rx_pause_cnt;
1228 u64 rx_pause_ctrl_frms;
1229 u64 rx_unsup_ctrl_frms;
1230 u64 rx_in_rng_len_err_frms;
1231 u64 rx_out_rng_len_err_frms;
1232 u64 rx_drop_frms;
1233 u64 rx_discarded_frms;
1234 u64 rx_drop_ip;
1235 u64 rx_err_drp_udp;
1236 u64 rx_lacpdu_frms;
1237 u64 rx_marker_pdu_frms;
1238 u64 rx_marker_resp_pdu_frms;
1239 u64 rx_unknown_pdu_frms;
1240 u64 rx_illegal_pdu_frms;
1241 u64 rx_fcs_discard;
1242 u64 rx_len_discard;
1243 u64 rx_pf_discard;
1244 u64 rx_trash_discard;
1245 u64 rx_rts_discard;
1246 u64 rx_wol_discard;
1247 u64 rx_red_discard;
1248 u64 rx_ingm_full_discard;
1249 u64 rx_xgmii_data_err_cnt;
1250 u64 rx_xgmii_ctrl_err_cnt;
1251 u64 rx_xgmii_err_sym;
1252 u64 rx_xgmii_char1_match;
1253 u64 rx_xgmii_char2_match;
1254 u64 rx_xgmii_column1_match;
1255 u64 rx_xgmii_column2_match;
1256 u64 rx_local_fault;
1257 u64 rx_remote_fault;
1258 u64 rx_queue_full;
1259 }xge_hal_stats_link_info_t;
1262 * struct xge_hal_stats_aggr_info_t - XGMAC statistics for an aggregator
1264 * @tx_frms: Count of data frames transmitted for the aggregator.
1265 * @tx_mcst_frms: Count of multicast data frames transmitted for
1266 * the aggregator.
1267 * @tx_bcst_frms: Count of broadcast data frames transmitted for
1268 * the aggregator.
1269 * @tx_discarded_frms: Count of discarded data frames transmitted for
1270 * the aggregator.
1271 * @tx_errored_frms: Count of errored data frames transmitted for
1272 * the aggregator.
1273 * @rx_frms: Count of received frames for aggregators
1274 * @rx_data_octets: Count of data and padding octets of frames received
1275 * the aggregator.
1276 * @rx_mcst_frms: Count of multicast frames received the aggregator.
1277 * @rx_bcst_frms: Count of broadast frames received the aggregator.
1278 * @rx_discarded_frms: Count of discarded frames received the aggregator.
1279 * @rx_errored_frms: Count of errored frames received the aggregator.
1280 * @rx_unknown_protocol_frms: Count of unknown protocol frames received
1281 * the aggregator.
1283 typedef struct xge_hal_stats_aggr_info_t {
1284 u64 tx_frms;
1285 u64 tx_mcst_frms;
1286 u64 tx_bcst_frms;
1287 u64 tx_discarded_frms;
1288 u64 tx_errored_frms;
1289 u64 rx_frms;
1290 u64 rx_data_octets;
1291 u64 rx_mcst_frms;
1292 u64 rx_bcst_frms;
1293 u64 rx_discarded_frms;
1294 u64 rx_errored_frms;
1295 u64 rx_unknown_protocol_frms;
1296 }xge_hal_stats_aggr_info_t;
1299 * struct xge_hal_stats_vpath_info_t - XGMAC statistics for a vpath.
1301 * @tx_frms: Count of transmitted MAC frames for the vpath.
1302 * @tx_ttl_eth_octets: Count of total octets of transmitted frames
1303 * for the vpath.
1304 * @tx_data_octets: Count of data and padding octets of transmitted
1305 * frames for the vpath.
1306 * @tx_mcst_frms: Count of multicast MAC frames for the vpath.
1307 * @tx_bcst_frms: Count of broadcast MAC frames for the vpath.
1308 * @tx_ucst_frms: Count of unicast MAC frames for the vpath.
1309 * @tx_tagged_frms: Count of transmitted frames containing a VLAN
1310 * tag for the vpath.
1311 * @tx_vld_ip: Count of transmitted IP datagrams for the vpath.
1312 * @tx_vld_ip_octets: Count of transmitted IP octets for the vpath.
1313 * @tx_icmp: Count of transmitted ICMP messages for the vpath.
1314 * @tx_tcp: Count of transmitted TCP segments for the vpath.
1315 * @tx_rst_tcp: Count of transmitted TCP segments containing the RST
1316 * flag the vpath.
1317 * @tx_udp: Count of transmitted UDP datagrams for the vpath.
1318 * @tx_unknown_protocol: Count of transmitted packets of unknown
1319 * protocol for the vpath.
1320 * @tx_parse_error: Count of transmitted packets with parsing errors
1321 * for the vpath.
1322 * @rx_ttl_frms: Count of all received MAC frames for the vpath.
1323 * @rx_vld_frms: Count of all successfully received MAC frames for
1324 * the vpath.
1325 * @rx_offld_frms: Count of all offloaded received MAC frames for
1326 * the vpath.
1327 * @rx_ttl_eth_octets: Count of total octets of received frames, not
1328 * including framing characters for the vpath.
1329 * @rx_data_octets: Count of data and padding octets of successfully
1330 * received frames for the vpath.
1331 * @rx_offld_octets: Count of total octets, not including framing
1332 * characters, of offloaded received frames for the vpath.
1333 * @rx_vld_mcst_frms: Count of successfully received multicast MAC
1334 * frames for the vpath.
1335 * @rx_vld_bcst_frms: Count of successfully received broadcast MAC
1336 * frames for the vpath.
1337 * @rx_accepted_ucst_frms: Count of successfully received unicast
1338 * MAC frames for the vpath.
1339 * @rx_accepted_nucst_frms: Count of successfully received
1340 * non-unicast MAC frames for the vpath.
1341 * @rx_tagged_frms: Count of received frames containing a VLAN tag
1342 * for the vpath.
1343 * @rx_long_frms: Count of received frames that are longer than
1344 * RX_MAX_PYLD_LEN + 18 bytes (+ 22 bytes if VLAN-tagged) for the vpath.
1345 * @rx_usized_frms: Count of received frames of length less than 64
1346 * octets, for the vpath.
1347 * @rx_usized_frms: Count of received frames of length more than
1348 * 1518 octets, for the vpath.
1349 * @rx_osized_frms: Count of received frames of length more than
1350 * 1518 octets for the vpath.
1351 * @rx_frag_frms: Count of received frames of length less than 64
1352 * octets that had bad FCS, for the vpath.
1353 * @rx_jabber_frms: Count of received frames of length more than
1354 * 1518 octets that had bad FCS, for the vpath.
1355 * @rx_ttl_64_frms: Count of all received MAC frames with length of
1356 * exactly 64 octets, for the vpath.
1357 * @rx_ttl_65_127_frms: Count of all received MAC frames with length
1358 * of between 65 and 127 octets inclusive, for the vpath.
1359 * @rx_ttl_128_255_frms: Count of all received MAC frames with
1360 * length of between 128 and 255 octets inclusive, for the vpath.
1361 * @rx_ttl_256_511_frms: Count of all received MAC frames with
1362 * length of between 246 and 511 octets inclusive, for the vpath.
1363 * @rx_ttl_512_1023_frms: Count of all received MAC frames with
1364 * length of between 512 and 1023 octets inclusive, for the vpath.
1365 * @rx_ttl_1024_1518_frms: Count of all received MAC frames with
1366 * length of between 1024 and 1518 octets inclusive, for the vpath.
1367 * @rx_ttl_1519_4095_frms: Count of all received MAC frames with
1368 * length of between 1519 and 4095 octets inclusive, for the vpath.
1369 * @rx_ttl_40956_8191_frms: Count of all received MAC frames with
1370 * of between 4096 and 8191 octets inclusive, for the vpath.
1371 * @rx_ttl_8192_max_frms: Count of all received MAC frames with
1372 * length of between 8192 and RX_MAX_PYLD_LEN+18 octets inclusive, for the
1373 * vpath.
1374 * @rx_ttl_gt_max_frms: Count of all received MAC frames with length
1375 * exceeding RX_MAX_PYLD_LEN+18 octets inclusive, for the vpath.
1376 * @rx_ip: Count of received IP datagrams, for the vpath.
1377 * @rx_accepted_ip: Count of received and accepted IP datagrams,
1378 * for the vpath.
1379 * @rx_ip_octets: Count of number of octets in received IP datagrams
1380 * for the vpath.
1381 * @rx_hdr_err_ip: Count of received IP datagrams that are discarded
1382 * due to IP header errors, for the vpath.
1383 * @rx_icmp: Count of received ICMP messages for the vpath.
1384 * @rx_tcp: Count of received TCP segments for the vpath.
1385 * @rx_udp: Count of received UDP datagrams for the vpath.
1386 * @rx_err_tcp: Count of received TCP segments containing errors for
1387 * the vpath.
1388 * @rx_mpa_ok_frms: Count of received frames that pass the MPA
1389 * checks for vptah.
1390 * @rx_mpa_crc_fail_frms: Count of received frames that fail the MPA
1391 * CRC check for the vpath.
1392 * @rx_mpa_mrk_fail_frms: Count of received frames that fail the
1393 * MPA marker check for the vpath.
1394 * @rx_mpa_len_fail_frms: Count of received frames that fail the MPA
1395 * length check for the vpath.
1396 * @rx_wol_frms: Count of received "magic packet" frames for
1397 * the vpath.
1399 typedef struct xge_hal_stats_vpath_info_t {
1400 u64 tx_frms;
1401 u64 tx_ttl_eth_octets;
1402 u64 tx_data_octets;
1403 u64 tx_mcst_frms;
1404 u64 tx_bcst_frms;
1405 u64 tx_ucst_frms;
1406 u64 tx_tagged_frms;
1407 u64 tx_vld_ip;
1408 u64 tx_vld_ip_octets;
1409 u64 tx_icmp;
1410 u64 tx_tcp;
1411 u64 tx_rst_tcp;
1412 u64 tx_udp;
1413 u64 tx_unknown_protocol;
1414 u64 tx_parse_error;
1415 u64 rx_ttl_frms;
1416 u64 rx_vld_frms;
1417 u64 rx_offld_frms;
1418 u64 rx_ttl_eth_octets;
1419 u64 rx_data_octets;
1420 u64 rx_offld_octets;
1421 u64 rx_vld_mcst_frms;
1422 u64 rx_vld_bcst_frms;
1423 u64 rx_accepted_ucst_frms;
1424 u64 rx_accepted_nucst_frms;
1425 u64 rx_tagged_frms;
1426 u64 rx_long_frms;
1427 u64 rx_usized_frms;
1428 u64 rx_osized_frms;
1429 u64 rx_frag_frms;
1430 u64 rx_jabber_frms;
1431 u64 rx_ttl_64_frms;
1432 u64 rx_ttl_65_127_frms;
1433 u64 rx_ttl_128_255_frms;
1434 u64 rx_ttl_256_511_frms;
1435 u64 rx_ttl_512_1023_frms;
1436 u64 rx_ttl_1024_1518_frms;
1437 u64 rx_ttl_1519_4095_frms;
1438 u64 rx_ttl_40956_8191_frms;
1439 u64 rx_ttl_8192_max_frms;
1440 u64 rx_ttl_gt_max_frms;
1441 u64 rx_ip;
1442 u64 rx_accepted_ip;
1443 u64 rx_ip_octets;
1444 u64 rx_hdr_err_ip;
1445 u64 rx_icmp;
1446 u64 rx_tcp;
1447 u64 rx_udp;
1448 u64 rx_err_tcp;
1449 u64 rx_mpa_ok_frms;
1450 u64 rx_mpa_crc_fail_frms;
1451 u64 rx_mpa_mrk_fail_frms;
1452 u64 rx_mpa_len_fail_frms;
1453 u64 rx_wol_frms;
1454 }xge_hal_stats_vpath_info_t;
1457 * struct xge_hal_stats_pcim_info_t - Contains PCIM statistics
1459 * @link_info: PCIM links info for link 0, 1, and 2.
1460 * @aggr_info: PCIM aggregators info for aggregator 0 and 1.
1461 * See also: xge_hal_stats_link_info_t{}, xge_hal_stats_aggr_info_t{}.
1463 typedef struct xge_hal_stats_pcim_info_t {
1464 xge_hal_stats_link_info_t link_info[XGE_HAL_MAC_LINKS];
1465 xge_hal_stats_aggr_info_t aggr_info[XGE_HAL_MAC_AGGREGATORS];
1466 }xge_hal_stats_pcim_info_t;
1469 * struct xge_hal_stats_t - Contains HAL per-device statistics,
1470 * including hw.
1471 * @devh: HAL device handle.
1472 * @dma_addr: DMA addres of the %hw_info. Given to device to fill-in the stats.
1473 * @hw_info_dmah: DMA handle used to map hw statistics onto the device memory
1474 * space.
1475 * @hw_info_dma_acch: One more DMA handle used subsequently to free the
1476 * DMA object. Note that this and the previous handle have
1477 * physical meaning for Solaris; on Windows and Linux the
1478 * corresponding value will be simply pointer to PCI device.
1480 * @hw_info: Xframe statistics maintained by the hardware.
1481 * @hw_info_saved: TBD
1482 * @hw_info_latest: TBD
1483 * @pcim_info: Xframe PCIM statistics maintained by the hardware.
1484 * @pcim_info_saved: TBD
1485 * @pcim_info_latest: TBD
1486 * @sw_dev_info_stats: HAL's "soft" device informational statistics, e.g. number
1487 * of completions per interrupt.
1488 * @sw_dev_err_stats: HAL's "soft" device error statistics.
1490 * @is_initialized: True, if all the subordinate structures are allocated and
1491 * initialized.
1492 * @is_enabled: True, if device stats collection is enabled.
1494 * Structure-container of HAL per-device statistics. Note that per-channel
1495 * statistics are kept in separate structures under HAL's fifo and ring
1496 * channels.
1497 * See also: xge_hal_stats_hw_info_t{}, xge_hal_stats_sw_err_t{},
1498 * xge_hal_stats_device_info_t{}.
1499 * See also: xge_hal_stats_channel_info_t{}.
1501 typedef struct xge_hal_stats_t {
1502 /* handles */
1503 xge_hal_device_h devh;
1504 dma_addr_t dma_addr;
1505 pci_dma_h hw_info_dmah;
1506 pci_dma_acc_h hw_info_dma_acch;
1508 /* HAL device hardware statistics */
1509 xge_hal_stats_hw_info_t *hw_info;
1510 xge_hal_stats_hw_info_t hw_info_saved;
1511 xge_hal_stats_hw_info_t hw_info_latest;
1513 /* HAL device hardware statistics for XFRAME ER */
1514 xge_hal_stats_pcim_info_t *pcim_info;
1515 xge_hal_stats_pcim_info_t *pcim_info_saved;
1516 xge_hal_stats_pcim_info_t *pcim_info_latest;
1518 /* HAL device "soft" stats */
1519 xge_hal_stats_sw_err_t sw_dev_err_stats;
1520 xge_hal_stats_device_info_t sw_dev_info_stats;
1522 /* flags */
1523 int is_initialized;
1524 int is_enabled;
1525 } xge_hal_stats_t;
1527 /* ========================== STATS PRIVATE API ========================= */
1529 xge_hal_status_e __hal_stats_initialize(xge_hal_stats_t *stats,
1530 xge_hal_device_h devh);
1532 void __hal_stats_terminate(xge_hal_stats_t *stats);
1534 void __hal_stats_enable(xge_hal_stats_t *stats);
1536 void __hal_stats_disable(xge_hal_stats_t *stats);
1538 void __hal_stats_soft_reset(xge_hal_device_h devh, int reset_all);
1540 /* ========================== STATS PUBLIC API ========================= */
1542 xge_hal_status_e xge_hal_stats_hw(xge_hal_device_h devh,
1543 xge_hal_stats_hw_info_t **hw_info);
1545 xge_hal_status_e xge_hal_stats_pcim(xge_hal_device_h devh,
1546 xge_hal_stats_pcim_info_t **pcim_info);
1548 xge_hal_status_e xge_hal_stats_device(xge_hal_device_h devh,
1549 xge_hal_stats_device_info_t **device_info);
1551 xge_hal_status_e xge_hal_stats_channel(xge_hal_channel_h channelh,
1552 xge_hal_stats_channel_info_t **channel_info);
1554 xge_hal_status_e xge_hal_stats_reset(xge_hal_device_h devh);
1557 __EXTERN_END_DECLS
1559 #endif /* XGE_HAL_STATS_H */