2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
4 * Copyright (c) 2002-2007 Neterion, Inc.
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 #include <dev/nxge/include/xgehal-mgmt.h>
32 #include <dev/nxge/include/xgehal-driver.h>
33 #include <dev/nxge/include/xgehal-device.h>
35 #ifdef XGE_OS_HAS_SNPRINTF
36 #define __hal_aux_snprintf(retbuf, bufsize, fmt, key, value, retsize) \
37 if (bufsize <= 0) return XGE_HAL_ERR_OUT_OF_SPACE; \
38 retsize = xge_os_snprintf(retbuf, bufsize, fmt, key, \
39 XGE_HAL_AUX_SEPA, value); \
40 if (retsize < 0 || retsize >= bufsize) return XGE_HAL_ERR_OUT_OF_SPACE;
42 #define __hal_aux_snprintf(retbuf, bufsize, fmt, key, value, retsize) \
43 if (bufsize <= 0) return XGE_HAL_ERR_OUT_OF_SPACE; \
44 retsize = xge_os_sprintf(retbuf, fmt, key, XGE_HAL_AUX_SEPA, value); \
45 xge_assert(retsize < bufsize); \
46 if (retsize < 0 || retsize >= bufsize) \
47 return XGE_HAL_ERR_OUT_OF_SPACE;
50 #define __HAL_AUX_ENTRY_DECLARE(size, buf) \
51 int entrysize = 0, leftsize = size; \
54 #define __HAL_AUX_ENTRY(key, value, fmt) \
55 ptr += entrysize; leftsize -= entrysize; \
56 __hal_aux_snprintf(ptr, leftsize, "%s%c"fmt"\n", key, value, entrysize)
58 #define __HAL_AUX_ENTRY_END(bufsize, retsize) \
59 leftsize -= entrysize; \
60 *retsize = bufsize - leftsize;
62 #define __hal_aux_pci_link_info(name, index, var) { \
63 __HAL_AUX_ENTRY(name, \
64 (unsigned long long)pcim.link_info[index].var, "%llu") \
67 #define __hal_aux_pci_aggr_info(name, index, var) { \
68 __HAL_AUX_ENTRY(name, \
69 (unsigned long long)pcim.aggr_info[index].var, "%llu") \
73 * xge_hal_aux_bar0_read - Read and format Xframe BAR0 register.
74 * @devh: HAL device handle.
75 * @offset: Register offset in the BAR0 space.
76 * @bufsize: Buffer size.
77 * @retbuf: Buffer pointer.
78 * @retsize: Size of the result. Cannot be greater than @bufsize.
80 * Read Xframe register from BAR0 space. The result is formatted as an ascii string.
82 * Returns: XGE_HAL_OK - success.
83 * XGE_HAL_ERR_OUT_OF_SPACE - Buffer size is very small.
84 * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
85 * XGE_HAL_ERR_INVALID_OFFSET - Register offset in the BAR space is not
87 * XGE_HAL_ERR_INVALID_BAR_ID - BAR id is not valid.
89 * See also: xge_hal_mgmt_reg_read().
91 xge_hal_status_e xge_hal_aux_bar0_read(xge_hal_device_h devh,
92 unsigned int offset, int bufsize, char *retbuf,
95 xge_hal_status_e status;
98 status = xge_hal_mgmt_reg_read(devh, 0, offset, &retval);
99 if (status != XGE_HAL_OK) {
103 if (bufsize < XGE_OS_SPRINTF_STRLEN) {
104 return XGE_HAL_ERR_OUT_OF_SPACE;
107 *retsize = xge_os_sprintf(retbuf, "0x%04X%c0x%08X%08X\n", offset,
108 XGE_HAL_AUX_SEPA, (u32)(retval>>32), (u32)retval);
114 * xge_hal_aux_bar1_read - Read and format Xframe BAR1 register.
115 * @devh: HAL device handle.
116 * @offset: Register offset in the BAR1 space.
117 * @bufsize: Buffer size.
118 * @retbuf: Buffer pointer.
119 * @retsize: Size of the result. Cannot be greater than @bufsize.
121 * Read Xframe register from BAR1 space. The result is formatted as ascii string.
122 * Returns: XGE_HAL_OK - success.
123 * XGE_HAL_ERR_OUT_OF_SPACE - Buffer size is very small.
124 * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
125 * XGE_HAL_ERR_INVALID_OFFSET - Register offset in the BAR space is not
127 * XGE_HAL_ERR_INVALID_BAR_ID - BAR id is not valid.
129 * See also: xge_hal_mgmt_reg_read().
131 xge_hal_status_e xge_hal_aux_bar1_read(xge_hal_device_h devh,
132 unsigned int offset, int bufsize, char *retbuf,
135 xge_hal_status_e status;
138 status = xge_hal_mgmt_reg_read(devh, 1, offset, &retval);
139 if (status != XGE_HAL_OK) {
143 if (bufsize < XGE_OS_SPRINTF_STRLEN) {
144 return XGE_HAL_ERR_OUT_OF_SPACE;
147 *retsize = xge_os_sprintf(retbuf, "0x%04X%c0x%08X%08X\n",
149 XGE_HAL_AUX_SEPA, (u32)(retval>>32), (u32)retval);
155 * xge_hal_aux_bar0_write - Write BAR0 register.
156 * @devh: HAL device handle.
157 * @offset: Register offset in the BAR0 space.
158 * @value: Regsister value (to write).
160 * Write BAR0 register.
162 * Returns: XGE_HAL_OK - success.
163 * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
164 * XGE_HAL_ERR_INVALID_OFFSET - Register offset in the BAR space is not
166 * XGE_HAL_ERR_INVALID_BAR_ID - BAR id is not valid.
168 * See also: xge_hal_mgmt_reg_write().
170 xge_hal_status_e xge_hal_aux_bar0_write(xge_hal_device_h devh,
171 unsigned int offset, u64 value)
173 xge_hal_status_e status;
175 status = xge_hal_mgmt_reg_write(devh, 0, offset, value);
176 if (status != XGE_HAL_OK) {
184 * xge_hal_aux_about_read - Retrieve and format about info.
185 * @devh: HAL device handle.
186 * @bufsize: Buffer size.
187 * @retbuf: Buffer pointer.
188 * @retsize: Size of the result. Cannot be greater than @bufsize.
190 * Retrieve about info (using xge_hal_mgmt_about()) and sprintf it
191 * into the provided @retbuf.
193 * Returns: XGE_HAL_OK - success.
194 * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
195 * XGE_HAL_ERR_VERSION_CONFLICT - Version it not maching.
196 * XGE_HAL_FAIL - Failed to retrieve the information.
198 * See also: xge_hal_mgmt_about(), xge_hal_aux_device_dump().
200 xge_hal_status_e xge_hal_aux_about_read(xge_hal_device_h devh, int bufsize,
201 char *retbuf, int *retsize)
203 xge_hal_status_e status;
204 xge_hal_mgmt_about_info_t about_info;
205 __HAL_AUX_ENTRY_DECLARE(bufsize, retbuf);
207 status = xge_hal_mgmt_about(devh, &about_info,
208 sizeof(xge_hal_mgmt_about_info_t));
209 if (status != XGE_HAL_OK) {
213 __HAL_AUX_ENTRY("vendor", about_info.vendor, "0x%x");
214 __HAL_AUX_ENTRY("device", about_info.device, "0x%x");
215 __HAL_AUX_ENTRY("subsys_vendor", about_info.subsys_vendor, "0x%x");
216 __HAL_AUX_ENTRY("subsys_device", about_info.subsys_device, "0x%x");
217 __HAL_AUX_ENTRY("board_rev", about_info.board_rev, "0x%x");
218 __HAL_AUX_ENTRY("vendor_name", about_info.vendor_name, "%s");
219 __HAL_AUX_ENTRY("chip_name", about_info.chip_name, "%s");
220 __HAL_AUX_ENTRY("media", about_info.media, "%s");
221 __HAL_AUX_ENTRY("hal_major", about_info.hal_major, "%s");
222 __HAL_AUX_ENTRY("hal_minor", about_info.hal_minor, "%s");
223 __HAL_AUX_ENTRY("hal_fix", about_info.hal_fix, "%s");
224 __HAL_AUX_ENTRY("hal_build", about_info.hal_build, "%s");
225 __HAL_AUX_ENTRY("ll_major", about_info.ll_major, "%s");
226 __HAL_AUX_ENTRY("ll_minor", about_info.ll_minor, "%s");
227 __HAL_AUX_ENTRY("ll_fix", about_info.ll_fix, "%s");
228 __HAL_AUX_ENTRY("ll_build", about_info.ll_build, "%s");
230 __HAL_AUX_ENTRY("transponder_temperature",
231 about_info.transponder_temperature, "%d C");
233 __HAL_AUX_ENTRY_END(bufsize, retsize);
239 * xge_hal_aux_stats_tmac_read - Read TMAC hardware statistics.
240 * @devh: HAL device handle.
241 * @bufsize: Buffer size.
242 * @retbuf: Buffer pointer.
243 * @retsize: Size of the result. Cannot be greater than @bufsize.
245 * Read TMAC hardware statistics. This is a subset of stats counters
246 * from xge_hal_stats_hw_info_t{}.
248 * Returns: XGE_HAL_OK - success.
249 * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
250 * XGE_HAL_ERR_VERSION_CONFLICT - Version it not maching.
252 * See also: xge_hal_mgmt_hw_stats{}, xge_hal_stats_hw_info_t{},
253 * xge_hal_aux_stats_pci_read(),
254 * xge_hal_aux_device_dump().
256 xge_hal_status_e xge_hal_aux_stats_tmac_read(xge_hal_device_h devh, int bufsize,
257 char *retbuf, int *retsize)
259 xge_hal_status_e status;
260 xge_hal_device_t *hldev = (xge_hal_device_t*)devh;
262 __HAL_AUX_ENTRY_DECLARE(bufsize, retbuf);
264 if (xge_hal_device_check_id(hldev) != XGE_HAL_CARD_TITAN) {
265 xge_hal_mgmt_hw_stats_t hw;
267 status = xge_hal_mgmt_hw_stats(devh, &hw,
268 sizeof(xge_hal_mgmt_hw_stats_t));
269 if (status != XGE_HAL_OK) {
273 __HAL_AUX_ENTRY("tmac_data_octets", hw.tmac_data_octets, "%u");
274 __HAL_AUX_ENTRY("tmac_frms", hw.tmac_frms, "%u");
275 __HAL_AUX_ENTRY("tmac_drop_frms", (unsigned long long)
276 hw.tmac_drop_frms, "%llu");
277 __HAL_AUX_ENTRY("tmac_bcst_frms", hw.tmac_bcst_frms, "%u");
278 __HAL_AUX_ENTRY("tmac_mcst_frms", hw.tmac_mcst_frms, "%u");
279 __HAL_AUX_ENTRY("tmac_pause_ctrl_frms", (unsigned long long)
280 hw.tmac_pause_ctrl_frms, "%llu");
281 __HAL_AUX_ENTRY("tmac_ucst_frms", hw.tmac_ucst_frms, "%u");
282 __HAL_AUX_ENTRY("tmac_ttl_octets", hw.tmac_ttl_octets, "%u");
283 __HAL_AUX_ENTRY("tmac_any_err_frms", hw.tmac_any_err_frms, "%u");
284 __HAL_AUX_ENTRY("tmac_nucst_frms", hw.tmac_nucst_frms, "%u");
285 __HAL_AUX_ENTRY("tmac_ttl_less_fb_octets", (unsigned long long)
286 hw.tmac_ttl_less_fb_octets, "%llu");
287 __HAL_AUX_ENTRY("tmac_vld_ip_octets", (unsigned long long)
288 hw.tmac_vld_ip_octets, "%llu");
289 __HAL_AUX_ENTRY("tmac_drop_ip", hw.tmac_drop_ip, "%u");
290 __HAL_AUX_ENTRY("tmac_vld_ip", hw.tmac_vld_ip, "%u");
291 __HAL_AUX_ENTRY("tmac_rst_tcp", hw.tmac_rst_tcp, "%u");
292 __HAL_AUX_ENTRY("tmac_icmp", hw.tmac_icmp, "%u");
293 __HAL_AUX_ENTRY("tmac_tcp", (unsigned long long)
294 hw.tmac_tcp, "%llu");
295 __HAL_AUX_ENTRY("reserved_0", hw.reserved_0, "%u");
296 __HAL_AUX_ENTRY("tmac_udp", hw.tmac_udp, "%u");
299 xge_hal_mgmt_pcim_stats_t pcim;
300 status = xge_hal_mgmt_pcim_stats(devh, &pcim,
301 sizeof(xge_hal_mgmt_pcim_stats_t));
302 if (status != XGE_HAL_OK) {
306 for (i = 0; i < XGE_HAL_MAC_LINKS; i++) {
307 __hal_aux_pci_link_info("tx_frms", i,
309 __hal_aux_pci_link_info("tx_ttl_eth_octets",
310 i, tx_ttl_eth_octets );
311 __hal_aux_pci_link_info("tx_data_octets", i,
313 __hal_aux_pci_link_info("tx_mcst_frms", i,
315 __hal_aux_pci_link_info("tx_bcst_frms", i,
317 __hal_aux_pci_link_info("tx_ucst_frms", i,
319 __hal_aux_pci_link_info("tx_tagged_frms", i,
321 __hal_aux_pci_link_info("tx_vld_ip", i,
323 __hal_aux_pci_link_info("tx_vld_ip_octets", i,
325 __hal_aux_pci_link_info("tx_icmp", i,
327 __hal_aux_pci_link_info("tx_tcp", i,
329 __hal_aux_pci_link_info("tx_rst_tcp", i,
331 __hal_aux_pci_link_info("tx_udp", i,
333 __hal_aux_pci_link_info("tx_unknown_protocol", i,
334 tx_unknown_protocol);
335 __hal_aux_pci_link_info("tx_parse_error", i,
337 __hal_aux_pci_link_info("tx_pause_ctrl_frms", i,
339 __hal_aux_pci_link_info("tx_lacpdu_frms", i,
341 __hal_aux_pci_link_info("tx_marker_pdu_frms", i,
343 __hal_aux_pci_link_info("tx_marker_resp_pdu_frms", i,
344 tx_marker_resp_pdu_frms);
345 __hal_aux_pci_link_info("tx_drop_ip", i,
347 __hal_aux_pci_link_info("tx_xgmii_char1_match", i,
348 tx_xgmii_char1_match);
349 __hal_aux_pci_link_info("tx_xgmii_char2_match", i,
350 tx_xgmii_char2_match);
351 __hal_aux_pci_link_info("tx_xgmii_column1_match", i,
352 tx_xgmii_column1_match);
353 __hal_aux_pci_link_info("tx_xgmii_column2_match", i,
354 tx_xgmii_column2_match);
355 __hal_aux_pci_link_info("tx_drop_frms", i,
357 __hal_aux_pci_link_info("tx_any_err_frms", i,
361 for (i = 0; i < XGE_HAL_MAC_AGGREGATORS; i++) {
362 __hal_aux_pci_aggr_info("tx_frms", i, tx_frms);
363 __hal_aux_pci_aggr_info("tx_mcst_frms", i,
365 __hal_aux_pci_aggr_info("tx_bcst_frms", i,
367 __hal_aux_pci_aggr_info("tx_discarded_frms", i,
369 __hal_aux_pci_aggr_info("tx_errored_frms", i,
374 __HAL_AUX_ENTRY_END(bufsize, retsize);
380 * xge_hal_aux_stats_rmac_read - Read RMAC hardware statistics.
381 * @devh: HAL device handle.
382 * @bufsize: Buffer size.
383 * @retbuf: Buffer pointer.
384 * @retsize: Size of the result. Cannot be greater than @bufsize.
386 * Read RMAC hardware statistics. This is a subset of stats counters
387 * from xge_hal_stats_hw_info_t{}.
389 * Returns: XGE_HAL_OK - success.
390 * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
391 * XGE_HAL_ERR_VERSION_CONFLICT - Version it not maching.
393 * See also: xge_hal_mgmt_hw_stats{}, xge_hal_stats_hw_info_t{},
394 * xge_hal_aux_stats_pci_read(), xge_hal_aux_stats_tmac_read(),
395 * xge_hal_aux_device_dump().
397 xge_hal_status_e xge_hal_aux_stats_rmac_read(xge_hal_device_h devh, int bufsize,
398 char *retbuf, int *retsize)
400 xge_hal_status_e status;
401 xge_hal_device_t *hldev = (xge_hal_device_t*)devh;
403 __HAL_AUX_ENTRY_DECLARE(bufsize, retbuf);
405 if (xge_hal_device_check_id(hldev) != XGE_HAL_CARD_TITAN) {
406 xge_hal_mgmt_hw_stats_t hw;
408 status = xge_hal_mgmt_hw_stats(devh, &hw,
409 sizeof(xge_hal_mgmt_hw_stats_t));
410 if (status != XGE_HAL_OK) {
414 __HAL_AUX_ENTRY("rmac_data_octets", hw.rmac_data_octets, "%u");
415 __HAL_AUX_ENTRY("rmac_vld_frms", hw.rmac_vld_frms, "%u");
416 __HAL_AUX_ENTRY("rmac_fcs_err_frms", (unsigned long long)
417 hw.rmac_fcs_err_frms, "%llu");
418 __HAL_AUX_ENTRY("mac_drop_frms", (unsigned long long)
419 hw.rmac_drop_frms, "%llu");
420 __HAL_AUX_ENTRY("rmac_vld_bcst_frms", hw.rmac_vld_bcst_frms,
422 __HAL_AUX_ENTRY("rmac_vld_mcst_frms", hw.rmac_vld_mcst_frms,
424 __HAL_AUX_ENTRY("rmac_out_rng_len_err_frms",
425 hw.rmac_out_rng_len_err_frms, "%u");
426 __HAL_AUX_ENTRY("rmac_in_rng_len_err_frms",
427 hw.rmac_in_rng_len_err_frms, "%u");
428 __HAL_AUX_ENTRY("rmac_long_frms", (unsigned long long)
429 hw.rmac_long_frms, "%llu");
430 __HAL_AUX_ENTRY("rmac_pause_ctrl_frms", (unsigned long long)
431 hw.rmac_pause_ctrl_frms, "%llu");
432 __HAL_AUX_ENTRY("rmac_unsup_ctrl_frms", (unsigned long long)
433 hw.rmac_unsup_ctrl_frms, "%llu");
434 __HAL_AUX_ENTRY("rmac_accepted_ucst_frms",
435 hw.rmac_accepted_ucst_frms, "%u");
436 __HAL_AUX_ENTRY("rmac_ttl_octets", hw.rmac_ttl_octets, "%u");
437 __HAL_AUX_ENTRY("rmac_discarded_frms", hw.rmac_discarded_frms,
439 __HAL_AUX_ENTRY("rmac_accepted_nucst_frms",
440 hw.rmac_accepted_nucst_frms, "%u");
441 __HAL_AUX_ENTRY("reserved_1", hw.reserved_1, "%u");
442 __HAL_AUX_ENTRY("rmac_drop_events", hw.rmac_drop_events, "%u");
443 __HAL_AUX_ENTRY("rmac_ttl_less_fb_octets", (unsigned long long)
444 hw.rmac_ttl_less_fb_octets, "%llu");
445 __HAL_AUX_ENTRY("rmac_ttl_frms", (unsigned long long)
446 hw.rmac_ttl_frms, "%llu");
447 __HAL_AUX_ENTRY("reserved_2", (unsigned long long)
448 hw.reserved_2, "%llu");
449 __HAL_AUX_ENTRY("rmac_usized_frms", hw.rmac_usized_frms, "%u");
450 __HAL_AUX_ENTRY("reserved_3", hw.reserved_3, "%u");
451 __HAL_AUX_ENTRY("rmac_frag_frms", hw.rmac_frag_frms, "%u");
452 __HAL_AUX_ENTRY("rmac_osized_frms", hw.rmac_osized_frms, "%u");
453 __HAL_AUX_ENTRY("reserved_4", hw.reserved_4, "%u");
454 __HAL_AUX_ENTRY("rmac_jabber_frms", hw.rmac_jabber_frms, "%u");
455 __HAL_AUX_ENTRY("rmac_ttl_64_frms", (unsigned long long)
456 hw.rmac_ttl_64_frms, "%llu");
457 __HAL_AUX_ENTRY("rmac_ttl_65_127_frms", (unsigned long long)
458 hw.rmac_ttl_65_127_frms, "%llu");
459 __HAL_AUX_ENTRY("reserved_5", (unsigned long long)
460 hw.reserved_5, "%llu");
461 __HAL_AUX_ENTRY("rmac_ttl_128_255_frms", (unsigned long long)
462 hw.rmac_ttl_128_255_frms, "%llu");
463 __HAL_AUX_ENTRY("rmac_ttl_256_511_frms", (unsigned long long)
464 hw.rmac_ttl_256_511_frms, "%llu");
465 __HAL_AUX_ENTRY("reserved_6", (unsigned long long)
466 hw.reserved_6, "%llu");
467 __HAL_AUX_ENTRY("rmac_ttl_512_1023_frms", (unsigned long long)
468 hw.rmac_ttl_512_1023_frms, "%llu");
469 __HAL_AUX_ENTRY("rmac_ttl_1024_1518_frms", (unsigned long long)
470 hw.rmac_ttl_1024_1518_frms, "%llu");
471 __HAL_AUX_ENTRY("rmac_ip", hw.rmac_ip, "%u");
472 __HAL_AUX_ENTRY("reserved_7", hw.reserved_7, "%u");
473 __HAL_AUX_ENTRY("rmac_ip_octets", (unsigned long long)
474 hw.rmac_ip_octets, "%llu");
475 __HAL_AUX_ENTRY("rmac_drop_ip", hw.rmac_drop_ip, "%u");
476 __HAL_AUX_ENTRY("rmac_hdr_err_ip", hw.rmac_hdr_err_ip, "%u");
477 __HAL_AUX_ENTRY("reserved_8", hw.reserved_8, "%u");
478 __HAL_AUX_ENTRY("rmac_icmp", hw.rmac_icmp, "%u");
479 __HAL_AUX_ENTRY("rmac_tcp", (unsigned long long)
480 hw.rmac_tcp, "%llu");
481 __HAL_AUX_ENTRY("rmac_err_drp_udp", hw.rmac_err_drp_udp, "%u");
482 __HAL_AUX_ENTRY("rmac_udp", hw.rmac_udp, "%u");
483 __HAL_AUX_ENTRY("rmac_xgmii_err_sym", (unsigned long long)
484 hw.rmac_xgmii_err_sym, "%llu");
485 __HAL_AUX_ENTRY("rmac_frms_q0", (unsigned long long)
486 hw.rmac_frms_q0, "%llu");
487 __HAL_AUX_ENTRY("rmac_frms_q1", (unsigned long long)
488 hw.rmac_frms_q1, "%llu");
489 __HAL_AUX_ENTRY("rmac_frms_q2", (unsigned long long)
490 hw.rmac_frms_q2, "%llu");
491 __HAL_AUX_ENTRY("rmac_frms_q3", (unsigned long long)
492 hw.rmac_frms_q3, "%llu");
493 __HAL_AUX_ENTRY("rmac_frms_q4", (unsigned long long)
494 hw.rmac_frms_q4, "%llu");
495 __HAL_AUX_ENTRY("rmac_frms_q5", (unsigned long long)
496 hw.rmac_frms_q5, "%llu");
497 __HAL_AUX_ENTRY("rmac_frms_q6", (unsigned long long)
498 hw.rmac_frms_q6, "%llu");
499 __HAL_AUX_ENTRY("rmac_frms_q7", (unsigned long long)
500 hw.rmac_frms_q7, "%llu");
501 __HAL_AUX_ENTRY("rmac_full_q3", hw.rmac_full_q3, "%d");
502 __HAL_AUX_ENTRY("rmac_full_q2", hw.rmac_full_q2, "%d");
503 __HAL_AUX_ENTRY("rmac_full_q1", hw.rmac_full_q1, "%d");
504 __HAL_AUX_ENTRY("rmac_full_q0", hw.rmac_full_q0, "%d");
505 __HAL_AUX_ENTRY("rmac_full_q7", hw.rmac_full_q7, "%d");
506 __HAL_AUX_ENTRY("rmac_full_q6", hw.rmac_full_q6, "%d");
507 __HAL_AUX_ENTRY("rmac_full_q5", hw.rmac_full_q5, "%d");
508 __HAL_AUX_ENTRY("rmac_full_q4", hw.rmac_full_q4, "%d");
509 __HAL_AUX_ENTRY("reserved_9", hw.reserved_9, "%u");
510 __HAL_AUX_ENTRY("rmac_pause_cnt", hw.rmac_pause_cnt, "%u");
511 __HAL_AUX_ENTRY("rmac_xgmii_data_err_cnt", (unsigned long long)
512 hw.rmac_xgmii_data_err_cnt, "%llu");
513 __HAL_AUX_ENTRY("rmac_xgmii_ctrl_err_cnt", (unsigned long long)
514 hw.rmac_xgmii_ctrl_err_cnt, "%llu");
515 __HAL_AUX_ENTRY("rmac_err_tcp", hw.rmac_err_tcp, "%u");
516 __HAL_AUX_ENTRY("rmac_accepted_ip", hw.rmac_accepted_ip, "%u");
519 xge_hal_mgmt_pcim_stats_t pcim;
520 status = xge_hal_mgmt_pcim_stats(devh, &pcim,
521 sizeof(xge_hal_mgmt_pcim_stats_t));
522 if (status != XGE_HAL_OK) {
525 for (i = 0; i < XGE_HAL_MAC_LINKS; i++) {
526 __hal_aux_pci_link_info("rx_ttl_frms", i,
528 __hal_aux_pci_link_info("rx_vld_frms", i,
530 __hal_aux_pci_link_info("rx_offld_frms", i,
532 __hal_aux_pci_link_info("rx_ttl_eth_octets", i,
534 __hal_aux_pci_link_info("rx_data_octets", i,
536 __hal_aux_pci_link_info("rx_offld_octets", i,
538 __hal_aux_pci_link_info("rx_vld_mcst_frms", i,
540 __hal_aux_pci_link_info("rx_vld_bcst_frms", i,
542 __hal_aux_pci_link_info("rx_accepted_ucst_frms", i,
543 rx_accepted_ucst_frms);
544 __hal_aux_pci_link_info("rx_accepted_nucst_frms", i,
545 rx_accepted_nucst_frms);
546 __hal_aux_pci_link_info("rx_tagged_frms", i,
548 __hal_aux_pci_link_info("rx_long_frms", i,
550 __hal_aux_pci_link_info("rx_usized_frms", i,
552 __hal_aux_pci_link_info("rx_osized_frms", i,
554 __hal_aux_pci_link_info("rx_frag_frms", i,
556 __hal_aux_pci_link_info("rx_jabber_frms", i,
558 __hal_aux_pci_link_info("rx_ttl_64_frms", i,
560 __hal_aux_pci_link_info("rx_ttl_65_127_frms", i,
562 __hal_aux_pci_link_info("rx_ttl_128_255_frms", i,
563 rx_ttl_128_255_frms);
564 __hal_aux_pci_link_info("rx_ttl_256_511_frms", i,
565 rx_ttl_256_511_frms);
566 __hal_aux_pci_link_info("rx_ttl_512_1023_frms", i,
567 rx_ttl_512_1023_frms);
568 __hal_aux_pci_link_info("rx_ttl_1024_1518_frms", i,
569 rx_ttl_1024_1518_frms);
570 __hal_aux_pci_link_info("rx_ttl_1519_4095_frms", i,
571 rx_ttl_1519_4095_frms);
572 __hal_aux_pci_link_info("rx_ttl_40956_8191_frms", i,
573 rx_ttl_40956_8191_frms);
574 __hal_aux_pci_link_info("rx_ttl_8192_max_frms", i,
575 rx_ttl_8192_max_frms);
576 __hal_aux_pci_link_info("rx_ttl_gt_max_frms", i,
578 __hal_aux_pci_link_info("rx_ip", i,
580 __hal_aux_pci_link_info("rx_ip_octets", i,
583 __hal_aux_pci_link_info("rx_hdr_err_ip", i,
586 __hal_aux_pci_link_info("rx_icmp", i,
588 __hal_aux_pci_link_info("rx_tcp", i,
590 __hal_aux_pci_link_info("rx_udp", i,
592 __hal_aux_pci_link_info("rx_err_tcp", i,
594 __hal_aux_pci_link_info("rx_pause_cnt", i,
596 __hal_aux_pci_link_info("rx_pause_ctrl_frms", i,
598 __hal_aux_pci_link_info("rx_unsup_ctrl_frms", i,
600 __hal_aux_pci_link_info("rx_in_rng_len_err_frms", i,
601 rx_in_rng_len_err_frms);
602 __hal_aux_pci_link_info("rx_out_rng_len_err_frms", i,
603 rx_out_rng_len_err_frms);
604 __hal_aux_pci_link_info("rx_drop_frms", i,
606 __hal_aux_pci_link_info("rx_discarded_frms", i,
608 __hal_aux_pci_link_info("rx_drop_ip", i,
610 __hal_aux_pci_link_info("rx_err_drp_udp", i,
612 __hal_aux_pci_link_info("rx_lacpdu_frms", i,
614 __hal_aux_pci_link_info("rx_marker_pdu_frms", i,
616 __hal_aux_pci_link_info("rx_marker_resp_pdu_frms", i,
617 rx_marker_resp_pdu_frms);
618 __hal_aux_pci_link_info("rx_unknown_pdu_frms", i,
619 rx_unknown_pdu_frms);
620 __hal_aux_pci_link_info("rx_illegal_pdu_frms", i,
621 rx_illegal_pdu_frms);
622 __hal_aux_pci_link_info("rx_fcs_discard", i,
624 __hal_aux_pci_link_info("rx_len_discard", i,
626 __hal_aux_pci_link_info("rx_pf_discard", i,
628 __hal_aux_pci_link_info("rx_trash_discard", i,
630 __hal_aux_pci_link_info("rx_rts_discard", i,
632 __hal_aux_pci_link_info("rx_wol_discard", i,
634 __hal_aux_pci_link_info("rx_red_discard", i,
636 __hal_aux_pci_link_info("rx_ingm_full_discard", i,
637 rx_ingm_full_discard);
638 __hal_aux_pci_link_info("rx_xgmii_data_err_cnt", i,
639 rx_xgmii_data_err_cnt);
640 __hal_aux_pci_link_info("rx_xgmii_ctrl_err_cnt", i,
641 rx_xgmii_ctrl_err_cnt);
642 __hal_aux_pci_link_info("rx_xgmii_err_sym", i,
644 __hal_aux_pci_link_info("rx_xgmii_char1_match", i,
645 rx_xgmii_char1_match);
646 __hal_aux_pci_link_info("rx_xgmii_char2_match", i,
647 rx_xgmii_char2_match);
648 __hal_aux_pci_link_info("rx_xgmii_column1_match", i,
649 rx_xgmii_column1_match);
650 __hal_aux_pci_link_info("rx_xgmii_column2_match", i,
651 rx_xgmii_column2_match);
652 __hal_aux_pci_link_info("rx_local_fault", i,
654 __hal_aux_pci_link_info("rx_remote_fault", i,
656 __hal_aux_pci_link_info("rx_queue_full", i,
659 for (i = 0; i < XGE_HAL_MAC_AGGREGATORS; i++) {
660 __hal_aux_pci_aggr_info("rx_frms", i, rx_frms);
661 __hal_aux_pci_link_info("rx_data_octets", i,
663 __hal_aux_pci_aggr_info("rx_mcst_frms", i,
665 __hal_aux_pci_aggr_info("rx_bcst_frms", i,
667 __hal_aux_pci_aggr_info("rx_discarded_frms", i,
669 __hal_aux_pci_aggr_info("rx_errored_frms", i,
671 __hal_aux_pci_aggr_info("rx_unknown_protocol_frms", i,
672 rx_unknown_protocol_frms);
676 __HAL_AUX_ENTRY_END(bufsize, retsize);
682 * xge_hal_aux_stats_herc_enchanced - Get Hercules hardware statistics.
683 * @devh: HAL device handle.
684 * @bufsize: Buffer size.
685 * @retbuf: Buffer pointer.
686 * @retsize: Size of the result. Cannot be greater than @bufsize.
688 * Read Hercules device hardware statistics.
690 * Returns: XGE_HAL_OK - success.
691 * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
692 * XGE_HAL_ERR_VERSION_CONFLICT - Version it not maching.
694 * See also: xge_hal_mgmt_hw_stats{}, xge_hal_stats_hw_info_t{},
695 * xge_hal_aux_stats_tmac_read(), xge_hal_aux_stats_rmac_read(),
696 * xge_hal_aux_device_dump().
698 xge_hal_status_e xge_hal_aux_stats_herc_enchanced(xge_hal_device_h devh,
699 int bufsize, char *retbuf, int *retsize)
701 xge_hal_status_e status;
702 xge_hal_mgmt_hw_stats_t hw;
703 xge_hal_device_t *hldev = (xge_hal_device_t*)devh;
705 __HAL_AUX_ENTRY_DECLARE(bufsize, retbuf);
707 if (xge_hal_device_check_id(hldev) == XGE_HAL_CARD_TITAN) {
709 __HAL_AUX_ENTRY_END(bufsize, retsize);
715 status = xge_hal_mgmt_hw_stats(devh, &hw,
716 sizeof(xge_hal_mgmt_hw_stats_t));
717 if (status != XGE_HAL_OK) {
720 __HAL_AUX_ENTRY("tmac_frms_oflow", hw.tmac_frms_oflow, "%u");
721 __HAL_AUX_ENTRY("tmac_data_octets_oflow", hw.tmac_data_octets_oflow,
723 __HAL_AUX_ENTRY("tmac_mcst_frms_oflow", hw.tmac_mcst_frms_oflow, "%u");
724 __HAL_AUX_ENTRY("tmac_bcst_frms_oflow", hw.tmac_bcst_frms_oflow, "%u");
725 __HAL_AUX_ENTRY("tmac_ttl_octets_oflow", hw.tmac_ttl_octets_oflow,
727 __HAL_AUX_ENTRY("tmac_ucst_frms_oflow", hw.tmac_ucst_frms_oflow, "%u");
728 __HAL_AUX_ENTRY("tmac_nucst_frms_oflow", hw.tmac_nucst_frms_oflow,
730 __HAL_AUX_ENTRY("tmac_any_err_frms_oflow", hw.tmac_any_err_frms_oflow,
732 __HAL_AUX_ENTRY("tmac_vlan_frms", (unsigned long long)hw.tmac_vlan_frms,
734 __HAL_AUX_ENTRY("tmac_vld_ip_oflow", hw.tmac_vld_ip_oflow, "%u");
735 __HAL_AUX_ENTRY("tmac_drop_ip_oflow", hw.tmac_drop_ip_oflow, "%u");
736 __HAL_AUX_ENTRY("tmac_icmp_oflow", hw.tmac_icmp_oflow, "%u");
737 __HAL_AUX_ENTRY("tmac_rst_tcp_oflow", hw.tmac_rst_tcp_oflow, "%u");
738 __HAL_AUX_ENTRY("tmac_udp_oflow", hw.tmac_udp_oflow, "%u");
739 __HAL_AUX_ENTRY("tpa_unknown_protocol", hw.tpa_unknown_protocol, "%u");
740 __HAL_AUX_ENTRY("tpa_parse_failure", hw.tpa_parse_failure, "%u");
741 __HAL_AUX_ENTRY("rmac_vld_frms_oflow", hw.rmac_vld_frms_oflow, "%u");
742 __HAL_AUX_ENTRY("rmac_data_octets_oflow", hw.rmac_data_octets_oflow,
744 __HAL_AUX_ENTRY("rmac_vld_mcst_frms_oflow", hw.rmac_vld_mcst_frms_oflow,
746 __HAL_AUX_ENTRY("rmac_vld_bcst_frms_oflow", hw.rmac_vld_bcst_frms_oflow,
748 __HAL_AUX_ENTRY("rmac_ttl_octets_oflow", hw.rmac_ttl_octets_oflow,
750 __HAL_AUX_ENTRY("rmac_accepted_ucst_frms_oflow",
751 hw.rmac_accepted_ucst_frms_oflow, "%u");
752 __HAL_AUX_ENTRY("rmac_accepted_nucst_frms_oflow",
753 hw.rmac_accepted_nucst_frms_oflow, "%u");
754 __HAL_AUX_ENTRY("rmac_discarded_frms_oflow",
755 hw.rmac_discarded_frms_oflow, "%u");
756 __HAL_AUX_ENTRY("rmac_drop_events_oflow", hw.rmac_drop_events_oflow,
758 __HAL_AUX_ENTRY("rmac_usized_frms_oflow", hw.rmac_usized_frms_oflow,
760 __HAL_AUX_ENTRY("rmac_osized_frms_oflow", hw.rmac_osized_frms_oflow,
762 __HAL_AUX_ENTRY("rmac_frag_frms_oflow", hw.rmac_frag_frms_oflow, "%u");
763 __HAL_AUX_ENTRY("rmac_jabber_frms_oflow", hw.rmac_jabber_frms_oflow,
765 __HAL_AUX_ENTRY("rmac_ip_oflow", hw.rmac_ip_oflow, "%u");
766 __HAL_AUX_ENTRY("rmac_drop_ip_oflow", hw.rmac_drop_ip_oflow, "%u");
767 __HAL_AUX_ENTRY("rmac_icmp_oflow", hw.rmac_icmp_oflow, "%u");
768 __HAL_AUX_ENTRY("rmac_udp_oflow", hw.rmac_udp_oflow, "%u");
769 __HAL_AUX_ENTRY("rmac_err_drp_udp_oflow", hw.rmac_err_drp_udp_oflow,
771 __HAL_AUX_ENTRY("rmac_pause_cnt_oflow", hw.rmac_pause_cnt_oflow, "%u");
772 __HAL_AUX_ENTRY("rmac_ttl_1519_4095_frms",
773 (unsigned long long)hw.rmac_ttl_1519_4095_frms, "%llu");
774 __HAL_AUX_ENTRY("rmac_ttl_4096_8191_frms",
775 (unsigned long long)hw.rmac_ttl_4096_8191_frms, "%llu");
776 __HAL_AUX_ENTRY("rmac_ttl_8192_max_frms",
777 (unsigned long long)hw.rmac_ttl_8192_max_frms, "%llu");
778 __HAL_AUX_ENTRY("rmac_ttl_gt_max_frms",
779 (unsigned long long)hw.rmac_ttl_gt_max_frms, "%llu");
780 __HAL_AUX_ENTRY("rmac_osized_alt_frms",
781 (unsigned long long)hw.rmac_osized_alt_frms, "%llu");
782 __HAL_AUX_ENTRY("rmac_jabber_alt_frms",
783 (unsigned long long)hw.rmac_jabber_alt_frms, "%llu");
784 __HAL_AUX_ENTRY("rmac_gt_max_alt_frms",
785 (unsigned long long)hw.rmac_gt_max_alt_frms, "%llu");
786 __HAL_AUX_ENTRY("rmac_vlan_frms",
787 (unsigned long long)hw.rmac_vlan_frms, "%llu");
788 __HAL_AUX_ENTRY("rmac_fcs_discard", hw.rmac_fcs_discard, "%u");
789 __HAL_AUX_ENTRY("rmac_len_discard", hw.rmac_len_discard, "%u");
790 __HAL_AUX_ENTRY("rmac_da_discard", hw.rmac_da_discard, "%u");
791 __HAL_AUX_ENTRY("rmac_pf_discard", hw.rmac_pf_discard, "%u");
792 __HAL_AUX_ENTRY("rmac_rts_discard", hw.rmac_rts_discard, "%u");
793 __HAL_AUX_ENTRY("rmac_red_discard", hw.rmac_red_discard, "%u");
794 __HAL_AUX_ENTRY("rmac_ingm_full_discard", hw.rmac_ingm_full_discard,
796 __HAL_AUX_ENTRY("rmac_accepted_ip_oflow", hw.rmac_accepted_ip_oflow,
798 __HAL_AUX_ENTRY("link_fault_cnt", hw.link_fault_cnt, "%u");
800 __HAL_AUX_ENTRY_END(bufsize, retsize);
806 * xge_hal_aux_stats_rmac_read - Read PCI hardware statistics.
807 * @devh: HAL device handle.
808 * @bufsize: Buffer size.
809 * @retbuf: Buffer pointer.
810 * @retsize: Size of the result. Cannot be greater than @bufsize.
812 * Read PCI statistics counters, including number of PCI read and
813 * write transactions, PCI retries, discards, etc.
814 * This is a subset of stats counters from xge_hal_stats_hw_info_t{}.
816 * Returns: XGE_HAL_OK - success.
817 * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
818 * XGE_HAL_ERR_VERSION_CONFLICT - Version it not maching.
820 * See also: xge_hal_mgmt_hw_stats{}, xge_hal_stats_hw_info_t{},
821 * xge_hal_aux_stats_tmac_read(), xge_hal_aux_stats_rmac_read(),
822 * xge_hal_aux_device_dump().
824 xge_hal_status_e xge_hal_aux_stats_pci_read(xge_hal_device_h devh, int bufsize,
825 char *retbuf, int *retsize)
827 xge_hal_status_e status;
828 xge_hal_mgmt_hw_stats_t hw;
829 xge_hal_device_t *hldev = (xge_hal_device_t*)devh;
831 __HAL_AUX_ENTRY_DECLARE(bufsize, retbuf);
833 if (xge_hal_device_check_id(hldev) == XGE_HAL_CARD_TITAN) {
835 __HAL_AUX_ENTRY_END(bufsize, retsize);
841 status = xge_hal_mgmt_hw_stats(devh, &hw,
842 sizeof(xge_hal_mgmt_hw_stats_t));
843 if (status != XGE_HAL_OK) {
847 __HAL_AUX_ENTRY("new_rd_req_cnt", hw.new_rd_req_cnt, "%u");
848 __HAL_AUX_ENTRY("rd_req_cnt", hw.rd_req_cnt, "%u");
849 __HAL_AUX_ENTRY("rd_rtry_cnt", hw.rd_rtry_cnt, "%u");
850 __HAL_AUX_ENTRY("new_rd_req_rtry_cnt", hw.new_rd_req_rtry_cnt, "%u");
851 __HAL_AUX_ENTRY("wr_req_cnt", hw.wr_req_cnt, "%u");
852 __HAL_AUX_ENTRY("wr_rtry_rd_ack_cnt", hw.wr_rtry_rd_ack_cnt, "%u");
853 __HAL_AUX_ENTRY("new_wr_req_rtry_cnt", hw.new_wr_req_rtry_cnt, "%u");
854 __HAL_AUX_ENTRY("new_wr_req_cnt", hw.new_wr_req_cnt, "%u");
855 __HAL_AUX_ENTRY("wr_disc_cnt", hw.wr_disc_cnt, "%u");
856 __HAL_AUX_ENTRY("wr_rtry_cnt", hw.wr_rtry_cnt, "%u");
857 __HAL_AUX_ENTRY("txp_wr_cnt", hw.txp_wr_cnt, "%u");
858 __HAL_AUX_ENTRY("rd_rtry_wr_ack_cnt", hw.rd_rtry_wr_ack_cnt, "%u");
859 __HAL_AUX_ENTRY("txd_wr_cnt", hw.txd_wr_cnt, "%u");
860 __HAL_AUX_ENTRY("txd_rd_cnt", hw.txd_rd_cnt, "%u");
861 __HAL_AUX_ENTRY("rxd_wr_cnt", hw.rxd_wr_cnt, "%u");
862 __HAL_AUX_ENTRY("rxd_rd_cnt", hw.rxd_rd_cnt, "%u");
863 __HAL_AUX_ENTRY("rxf_wr_cnt", hw.rxf_wr_cnt, "%u");
864 __HAL_AUX_ENTRY("txf_rd_cnt", hw.txf_rd_cnt, "%u");
866 __HAL_AUX_ENTRY_END(bufsize, retsize);
872 * xge_hal_aux_stats_hal_read - Read HAL (layer) statistics.
873 * @devh: HAL device handle.
874 * @bufsize: Buffer size.
875 * @retbuf: Buffer pointer.
876 * @retsize: Size of the result. Cannot be greater than @bufsize.
878 * Read HAL statistics.
880 * Returns: XGE_HAL_OK - success.
881 * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
882 * XGE_HAL_ERR_VERSION_CONFLICT - Version it not maching.
883 * XGE_HAL_INF_STATS_IS_NOT_READY - Statistics information is not
884 * currently available.
886 * See also: xge_hal_aux_device_dump().
888 xge_hal_status_e xge_hal_aux_stats_hal_read(xge_hal_device_h devh,
889 int bufsize, char *retbuf, int *retsize)
892 xge_hal_channel_t *channel;
893 xge_hal_device_t *hldev = (xge_hal_device_t*)devh;
894 xge_hal_status_e status;
895 xge_hal_mgmt_device_stats_t devstat;
896 xge_hal_mgmt_channel_stats_t chstat;
897 __HAL_AUX_ENTRY_DECLARE(bufsize, retbuf);
899 status = xge_hal_mgmt_device_stats(hldev, &devstat,
900 sizeof(xge_hal_mgmt_device_stats_t));
901 if (status != XGE_HAL_OK) {
905 if (!hldev->config.bimodal_interrupts) {
906 __HAL_AUX_ENTRY("rx_traffic_intr_cnt",
907 devstat.rx_traffic_intr_cnt, "%u");
909 __HAL_AUX_ENTRY("tx_traffic_intr_cnt", devstat.tx_traffic_intr_cnt, "%u");
910 __HAL_AUX_ENTRY("txpic_intr_cnt", devstat.txpic_intr_cnt, "%u");
911 __HAL_AUX_ENTRY("txdma_intr_cnt", devstat.txdma_intr_cnt, "%u");
912 __HAL_AUX_ENTRY("txmac_intr_cnt", devstat.txmac_intr_cnt, "%u");
913 __HAL_AUX_ENTRY("txxgxs_intr_cnt", devstat.txxgxs_intr_cnt, "%u");
914 __HAL_AUX_ENTRY("rxpic_intr_cnt", devstat.rxpic_intr_cnt, "%u");
915 __HAL_AUX_ENTRY("rxdma_intr_cnt", devstat.rxdma_intr_cnt, "%u");
916 __HAL_AUX_ENTRY("rxmac_intr_cnt", devstat.rxmac_intr_cnt, "%u");
917 __HAL_AUX_ENTRY("rxxgxs_intr_cnt", devstat.rxxgxs_intr_cnt, "%u");
918 __HAL_AUX_ENTRY("mc_intr_cnt", devstat.mc_intr_cnt, "%u");
919 __HAL_AUX_ENTRY("not_xge_intr_cnt", devstat.not_xge_intr_cnt, "%u");
920 __HAL_AUX_ENTRY("not_traffic_intr_cnt",
921 devstat.not_traffic_intr_cnt, "%u");
922 __HAL_AUX_ENTRY("traffic_intr_cnt", devstat.traffic_intr_cnt, "%u");
923 __HAL_AUX_ENTRY("total_intr_cnt", devstat.total_intr_cnt, "%u");
924 __HAL_AUX_ENTRY("soft_reset_cnt", devstat.soft_reset_cnt, "%u");
926 if (hldev->config.rxufca_hi_lim != hldev->config.rxufca_lo_lim &&
927 hldev->config.rxufca_lo_lim != 0) {
928 __HAL_AUX_ENTRY("rxufca_lo_adjust_cnt",
929 devstat.rxufca_lo_adjust_cnt, "%u");
930 __HAL_AUX_ENTRY("rxufca_hi_adjust_cnt",
931 devstat.rxufca_hi_adjust_cnt, "%u");
934 if (hldev->config.bimodal_interrupts) {
935 __HAL_AUX_ENTRY("bimodal_lo_adjust_cnt",
936 devstat.bimodal_lo_adjust_cnt, "%u");
937 __HAL_AUX_ENTRY("bimodal_hi_adjust_cnt",
938 devstat.bimodal_hi_adjust_cnt, "%u");
941 #if defined(XGE_HAL_CONFIG_LRO)
942 __HAL_AUX_ENTRY("tot_frms_lroised",
943 devstat.tot_frms_lroised, "%u");
944 __HAL_AUX_ENTRY("tot_lro_sessions",
945 devstat.tot_lro_sessions, "%u");
946 __HAL_AUX_ENTRY("lro_frm_len_exceed_cnt",
947 devstat.lro_frm_len_exceed_cnt, "%u");
948 __HAL_AUX_ENTRY("lro_sg_exceed_cnt",
949 devstat.lro_sg_exceed_cnt, "%u");
950 __HAL_AUX_ENTRY("lro_out_of_seq_pkt_cnt",
951 devstat.lro_out_of_seq_pkt_cnt, "%u");
952 __HAL_AUX_ENTRY("lro_dup_pkt_cnt",
953 devstat.lro_dup_pkt_cnt, "%u");
956 /* for each opened rx channel */
957 xge_list_for_each(item, &hldev->ring_channels) {
958 char key[XGE_OS_SPRINTF_STRLEN];
959 channel = xge_container_of(item, xge_hal_channel_t, item);
961 status = xge_hal_mgmt_channel_stats(channel, &chstat,
962 sizeof(xge_hal_mgmt_channel_stats_t));
963 if (status != XGE_HAL_OK) {
967 (void) xge_os_sprintf(key, "ring%d_", channel->post_qid);
969 xge_os_strcpy(key+6, "full_cnt");
970 __HAL_AUX_ENTRY(key, chstat.full_cnt, "%u");
971 xge_os_strcpy(key+6, "usage_max");
972 __HAL_AUX_ENTRY(key, chstat.usage_max, "%u");
973 xge_os_strcpy(key+6, "usage_cnt");
974 __HAL_AUX_ENTRY(key, channel->usage_cnt, "%u");
975 xge_os_strcpy(key+6, "reserve_free_swaps_cnt");
976 __HAL_AUX_ENTRY(key, chstat.reserve_free_swaps_cnt, "%u");
977 if (!hldev->config.bimodal_interrupts) {
978 xge_os_strcpy(key+6, "avg_compl_per_intr_cnt");
979 __HAL_AUX_ENTRY(key, chstat.avg_compl_per_intr_cnt, "%u");
981 xge_os_strcpy(key+6, "total_compl_cnt");
982 __HAL_AUX_ENTRY(key, chstat.total_compl_cnt, "%u");
983 xge_os_strcpy(key+6, "bump_cnt");
984 __HAL_AUX_ENTRY(key, chstat.ring_bump_cnt, "%u");
987 /* for each opened tx channel */
988 xge_list_for_each(item, &hldev->fifo_channels) {
989 char key[XGE_OS_SPRINTF_STRLEN];
990 channel = xge_container_of(item, xge_hal_channel_t, item);
992 status = xge_hal_mgmt_channel_stats(channel, &chstat,
993 sizeof(xge_hal_mgmt_channel_stats_t));
994 if (status != XGE_HAL_OK) {
998 (void) xge_os_sprintf(key, "fifo%d_", channel->post_qid);
1000 xge_os_strcpy(key+6, "full_cnt");
1001 __HAL_AUX_ENTRY(key, chstat.full_cnt, "%u");
1002 xge_os_strcpy(key+6, "usage_max");
1003 __HAL_AUX_ENTRY(key, chstat.usage_max, "%u");
1004 xge_os_strcpy(key+6, "usage_cnt");
1005 __HAL_AUX_ENTRY(key, channel->usage_cnt, "%u");
1006 xge_os_strcpy(key+6, "reserve_free_swaps_cnt");
1007 __HAL_AUX_ENTRY(key, chstat.reserve_free_swaps_cnt, "%u");
1008 xge_os_strcpy(key+6, "avg_compl_per_intr_cnt");
1009 __HAL_AUX_ENTRY(key, chstat.avg_compl_per_intr_cnt, "%u");
1010 xge_os_strcpy(key+6, "total_compl_cnt");
1011 __HAL_AUX_ENTRY(key, chstat.total_compl_cnt, "%u");
1012 xge_os_strcpy(key+6, "total_posts");
1013 __HAL_AUX_ENTRY(key, chstat.total_posts, "%u");
1014 xge_os_strcpy(key+6, "total_posts_many");
1015 __HAL_AUX_ENTRY(key, chstat.total_posts_many, "%u");
1016 xge_os_strcpy(key+6, "copied_frags");
1017 __HAL_AUX_ENTRY(key, chstat.copied_frags, "%u");
1018 xge_os_strcpy(key+6, "copied_buffers");
1019 __HAL_AUX_ENTRY(key, chstat.copied_buffers, "%u");
1020 xge_os_strcpy(key+6, "total_buffers");
1021 __HAL_AUX_ENTRY(key, chstat.total_buffers, "%u");
1022 xge_os_strcpy(key+6, "avg_buffers_per_post");
1023 __HAL_AUX_ENTRY(key, chstat.avg_buffers_per_post, "%u");
1024 xge_os_strcpy(key+6, "avg_buffer_size");
1025 __HAL_AUX_ENTRY(key, chstat.avg_buffer_size, "%u");
1026 xge_os_strcpy(key+6, "avg_post_size");
1027 __HAL_AUX_ENTRY(key, chstat.avg_post_size, "%u");
1028 xge_os_strcpy(key+6, "total_posts_dtrs_many");
1029 __HAL_AUX_ENTRY(key, chstat.total_posts_dtrs_many, "%u");
1030 xge_os_strcpy(key+6, "total_posts_frags_many");
1031 __HAL_AUX_ENTRY(key, chstat.total_posts_frags_many, "%u");
1032 xge_os_strcpy(key+6, "total_posts_dang_dtrs");
1033 __HAL_AUX_ENTRY(key, chstat.total_posts_dang_dtrs, "%u");
1034 xge_os_strcpy(key+6, "total_posts_dang_frags");
1035 __HAL_AUX_ENTRY(key, chstat.total_posts_dang_frags, "%u");
1038 __HAL_AUX_ENTRY_END(bufsize, retsize);
1046 * xge_hal_aux_stats_sw_dev_read - Read software device statistics.
1047 * @devh: HAL device handle.
1048 * @bufsize: Buffer size.
1049 * @retbuf: Buffer pointer.
1050 * @retsize: Size of the result. Cannot be greater than @bufsize.
1052 * Read software-maintained device statistics.
1054 * Returns: XGE_HAL_OK - success.
1055 * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
1056 * XGE_HAL_ERR_VERSION_CONFLICT - Version it not maching.
1057 * XGE_HAL_INF_STATS_IS_NOT_READY - Statistics information is not
1058 * currently available.
1060 * See also: xge_hal_aux_device_dump().
1062 xge_hal_status_e xge_hal_aux_stats_sw_dev_read(xge_hal_device_h devh,
1063 int bufsize, char *retbuf, int *retsize)
1065 xge_hal_device_t *hldev = (xge_hal_device_t*)devh;
1066 xge_hal_status_e status;
1067 xge_hal_mgmt_sw_stats_t sw_dev_err_stats;
1069 char buf[XGE_OS_SPRINTF_STRLEN];
1071 __HAL_AUX_ENTRY_DECLARE(bufsize, retbuf);
1073 status = xge_hal_mgmt_sw_stats(hldev, &sw_dev_err_stats,
1074 sizeof(xge_hal_mgmt_sw_stats_t));
1075 if (status != XGE_HAL_OK) {
1079 __HAL_AUX_ENTRY("sm_err_cnt",sw_dev_err_stats.sm_err_cnt, "%u");
1080 __HAL_AUX_ENTRY("single_ecc_err_cnt",sw_dev_err_stats.single_ecc_err_cnt, "%u");
1081 __HAL_AUX_ENTRY("double_ecc_err_cnt",sw_dev_err_stats.double_ecc_err_cnt, "%u");
1082 __HAL_AUX_ENTRY("ecc_err_cnt", sw_dev_err_stats.ecc_err_cnt, "%u");
1083 __HAL_AUX_ENTRY("parity_err_cnt",sw_dev_err_stats.parity_err_cnt, "%u");
1084 __HAL_AUX_ENTRY("serr_cnt",sw_dev_err_stats.serr_cnt, "%u");
1086 for (t_code = 1; t_code < 16; t_code++) {
1087 int t_code_cnt = sw_dev_err_stats.rxd_t_code_err_cnt[t_code];
1089 (void) xge_os_sprintf(buf, "rxd_t_code_%d", t_code);
1090 __HAL_AUX_ENTRY(buf, t_code_cnt, "%u");
1092 t_code_cnt = sw_dev_err_stats.txd_t_code_err_cnt[t_code];
1094 (void) xge_os_sprintf(buf, "txd_t_code_%d", t_code);
1095 __HAL_AUX_ENTRY(buf, t_code_cnt, "%u");
1098 __HAL_AUX_ENTRY("alarm_transceiver_temp_high",sw_dev_err_stats.
1099 stats_xpak.alarm_transceiver_temp_high, "%u");
1100 __HAL_AUX_ENTRY("alarm_transceiver_temp_low",sw_dev_err_stats.
1101 stats_xpak.alarm_transceiver_temp_low, "%u");
1102 __HAL_AUX_ENTRY("alarm_laser_bias_current_high",sw_dev_err_stats.
1103 stats_xpak.alarm_laser_bias_current_high, "%u");
1104 __HAL_AUX_ENTRY("alarm_laser_bias_current_low",sw_dev_err_stats.
1105 stats_xpak.alarm_laser_bias_current_low, "%u");
1106 __HAL_AUX_ENTRY("alarm_laser_output_power_high",sw_dev_err_stats.
1107 stats_xpak.alarm_laser_output_power_high, "%u");
1108 __HAL_AUX_ENTRY("alarm_laser_output_power_low",sw_dev_err_stats.
1109 stats_xpak.alarm_laser_output_power_low, "%u");
1110 __HAL_AUX_ENTRY("warn_transceiver_temp_high",sw_dev_err_stats.
1111 stats_xpak.warn_transceiver_temp_high, "%u");
1112 __HAL_AUX_ENTRY("warn_transceiver_temp_low",sw_dev_err_stats.
1113 stats_xpak.warn_transceiver_temp_low, "%u");
1114 __HAL_AUX_ENTRY("warn_laser_bias_current_high",sw_dev_err_stats.
1115 stats_xpak.warn_laser_bias_current_high, "%u");
1116 __HAL_AUX_ENTRY("warn_laser_bias_current_low",sw_dev_err_stats.
1117 stats_xpak.warn_laser_bias_current_low, "%u");
1118 __HAL_AUX_ENTRY("warn_laser_output_power_high",sw_dev_err_stats.
1119 stats_xpak.warn_laser_output_power_high, "%u");
1120 __HAL_AUX_ENTRY("warn_laser_output_power_low",sw_dev_err_stats.
1121 stats_xpak.warn_laser_output_power_low, "%u");
1123 __HAL_AUX_ENTRY_END(bufsize, retsize);
1129 * xge_hal_aux_pci_config_read - Retrieve and format PCI Configuration
1131 * @devh: HAL device handle.
1132 * @bufsize: Buffer size.
1133 * @retbuf: Buffer pointer.
1134 * @retsize: Size of the result. Cannot be greater than @bufsize.
1136 * Retrieve about info (using xge_hal_mgmt_pci_config()) and sprintf it
1137 * into the provided @retbuf.
1139 * Returns: XGE_HAL_OK - success.
1140 * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
1141 * XGE_HAL_ERR_VERSION_CONFLICT - Version it not maching.
1143 * See also: xge_hal_mgmt_pci_config(), xge_hal_aux_device_dump().
1145 xge_hal_status_e xge_hal_aux_pci_config_read(xge_hal_device_h devh, int bufsize,
1146 char *retbuf, int *retsize)
1148 xge_hal_status_e status;
1149 xge_hal_mgmt_pci_config_t pci_config;
1150 __HAL_AUX_ENTRY_DECLARE(bufsize, retbuf);
1152 status = xge_hal_mgmt_pci_config(devh, &pci_config,
1153 sizeof(xge_hal_mgmt_pci_config_t));
1154 if (status != XGE_HAL_OK) {
1158 __HAL_AUX_ENTRY("vendor_id", pci_config.vendor_id, "0x%04X");
1159 __HAL_AUX_ENTRY("device_id", pci_config.device_id, "0x%04X");
1160 __HAL_AUX_ENTRY("command", pci_config.command, "0x%04X");
1161 __HAL_AUX_ENTRY("status", pci_config.status, "0x%04X");
1162 __HAL_AUX_ENTRY("revision", pci_config.revision, "0x%02X");
1163 __HAL_AUX_ENTRY("pciClass1", pci_config.pciClass[0], "0x%02X");
1164 __HAL_AUX_ENTRY("pciClass2", pci_config.pciClass[1], "0x%02X");
1165 __HAL_AUX_ENTRY("pciClass3", pci_config.pciClass[2], "0x%02X");
1166 __HAL_AUX_ENTRY("cache_line_size",
1167 pci_config.cache_line_size, "0x%02X");
1168 __HAL_AUX_ENTRY("latency_timer", pci_config.latency_timer, "0x%02X");
1169 __HAL_AUX_ENTRY("header_type", pci_config.header_type, "0x%02X");
1170 __HAL_AUX_ENTRY("bist", pci_config.bist, "0x%02X");
1171 __HAL_AUX_ENTRY("base_addr0_lo", pci_config.base_addr0_lo, "0x%08X");
1172 __HAL_AUX_ENTRY("base_addr0_hi", pci_config.base_addr0_hi, "0x%08X");
1173 __HAL_AUX_ENTRY("base_addr1_lo", pci_config.base_addr1_lo, "0x%08X");
1174 __HAL_AUX_ENTRY("base_addr1_hi", pci_config.base_addr1_hi, "0x%08X");
1175 __HAL_AUX_ENTRY("not_Implemented1",
1176 pci_config.not_Implemented1, "0x%08X");
1177 __HAL_AUX_ENTRY("not_Implemented2", pci_config.not_Implemented2,
1179 __HAL_AUX_ENTRY("cardbus_cis_pointer", pci_config.cardbus_cis_pointer,
1181 __HAL_AUX_ENTRY("subsystem_vendor_id", pci_config.subsystem_vendor_id,
1183 __HAL_AUX_ENTRY("subsystem_id", pci_config.subsystem_id, "0x%04X");
1184 __HAL_AUX_ENTRY("rom_base", pci_config.rom_base, "0x%08X");
1185 __HAL_AUX_ENTRY("capabilities_pointer",
1186 pci_config.capabilities_pointer, "0x%02X");
1187 __HAL_AUX_ENTRY("interrupt_line", pci_config.interrupt_line, "0x%02X");
1188 __HAL_AUX_ENTRY("interrupt_pin", pci_config.interrupt_pin, "0x%02X");
1189 __HAL_AUX_ENTRY("min_grant", pci_config.min_grant, "0x%02X");
1190 __HAL_AUX_ENTRY("max_latency", pci_config.max_latency, "0x%02X");
1191 __HAL_AUX_ENTRY("msi_cap_id", pci_config.msi_cap_id, "0x%02X");
1192 __HAL_AUX_ENTRY("msi_next_ptr", pci_config.msi_next_ptr, "0x%02X");
1193 __HAL_AUX_ENTRY("msi_control", pci_config.msi_control, "0x%04X");
1194 __HAL_AUX_ENTRY("msi_lower_address", pci_config.msi_lower_address,
1196 __HAL_AUX_ENTRY("msi_higher_address", pci_config.msi_higher_address,
1198 __HAL_AUX_ENTRY("msi_data", pci_config.msi_data, "0x%04X");
1199 __HAL_AUX_ENTRY("msi_unused", pci_config.msi_unused, "0x%04X");
1200 __HAL_AUX_ENTRY("vpd_cap_id", pci_config.vpd_cap_id, "0x%02X");
1201 __HAL_AUX_ENTRY("vpd_next_cap", pci_config.vpd_next_cap, "0x%02X");
1202 __HAL_AUX_ENTRY("vpd_addr", pci_config.vpd_addr, "0x%04X");
1203 __HAL_AUX_ENTRY("vpd_data", pci_config.vpd_data, "0x%08X");
1204 __HAL_AUX_ENTRY("pcix_cap", pci_config.pcix_cap, "0x%02X");
1205 __HAL_AUX_ENTRY("pcix_next_cap", pci_config.pcix_next_cap, "0x%02X");
1206 __HAL_AUX_ENTRY("pcix_command", pci_config.pcix_command, "0x%04X");
1207 __HAL_AUX_ENTRY("pcix_status", pci_config.pcix_status, "0x%08X");
1209 if (xge_hal_device_check_id(devh) == XGE_HAL_CARD_HERC) {
1210 char key[XGE_OS_SPRINTF_STRLEN];
1214 i < (XGE_HAL_PCI_XFRAME_CONFIG_SPACE_SIZE - 0x68)/4;
1216 (void) xge_os_sprintf(key, "%03x:", 4*i + 0x68);
1217 __HAL_AUX_ENTRY(key, *((int *)pci_config.rsvd_b1 + i),
1222 __HAL_AUX_ENTRY_END(bufsize, retsize);
1229 * xge_hal_aux_channel_read - Read channels information.
1230 * @devh: HAL device handle.
1231 * @bufsize: Buffer size.
1232 * @retbuf: Buffer pointer.
1233 * @retsize: Size of the result. Cannot be greater than @bufsize.
1235 * Read HAL statistics.
1237 * Returns: XGE_HAL_OK - success.
1238 * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
1239 * XGE_HAL_ERR_OUT_OF_SPACE - Buffer size is very small.
1240 * See also: xge_hal_aux_device_dump().
1242 xge_hal_status_e xge_hal_aux_channel_read(xge_hal_device_h devh,
1243 int bufsize, char *retbuf, int *retsize)
1246 xge_hal_channel_t *channel;
1247 xge_hal_device_t *hldev = (xge_hal_device_t*)devh;
1248 __HAL_AUX_ENTRY_DECLARE(bufsize, retbuf);
1250 if (hldev->magic != XGE_HAL_MAGIC) {
1251 return XGE_HAL_ERR_INVALID_DEVICE;
1254 /* for each opened rx channel */
1255 xge_list_for_each(item, &hldev->ring_channels) {
1256 char key[XGE_OS_SPRINTF_STRLEN];
1257 channel = xge_container_of(item, xge_hal_channel_t, item);
1259 if (channel->is_open != 1)
1262 (void) xge_os_sprintf(key, "ring%d_", channel->post_qid);
1263 xge_os_strcpy(key+6, "type");
1264 __HAL_AUX_ENTRY(key, channel->type, "%u");
1265 xge_os_strcpy(key+6, "length");
1266 __HAL_AUX_ENTRY(key, channel->length, "%u");
1267 xge_os_strcpy(key+6, "is_open");
1268 __HAL_AUX_ENTRY(key, channel->is_open, "%u");
1269 xge_os_strcpy(key+6, "reserve_initial");
1270 __HAL_AUX_ENTRY(key, channel->reserve_initial, "%u");
1271 xge_os_strcpy(key+6, "reserve_max");
1272 __HAL_AUX_ENTRY(key, channel->reserve_max, "%u");
1273 xge_os_strcpy(key+6, "reserve_length");
1274 __HAL_AUX_ENTRY(key, channel->reserve_length, "%u");
1275 xge_os_strcpy(key+6, "reserve_top");
1276 __HAL_AUX_ENTRY(key, channel->reserve_top, "%u");
1277 xge_os_strcpy(key+6, "reserve_threshold");
1278 __HAL_AUX_ENTRY(key, channel->reserve_threshold, "%u");
1279 xge_os_strcpy(key+6, "free_length");
1280 __HAL_AUX_ENTRY(key, channel->free_length, "%u");
1281 xge_os_strcpy(key+6, "post_index");
1282 __HAL_AUX_ENTRY(key, channel->post_index, "%u");
1283 xge_os_strcpy(key+6, "compl_index");
1284 __HAL_AUX_ENTRY(key, channel->compl_index, "%u");
1285 xge_os_strcpy(key+6, "per_dtr_space");
1286 __HAL_AUX_ENTRY(key, channel->per_dtr_space, "%u");
1287 xge_os_strcpy(key+6, "usage_cnt");
1288 __HAL_AUX_ENTRY(key, channel->usage_cnt, "%u");
1291 /* for each opened tx channel */
1292 xge_list_for_each(item, &hldev->fifo_channels) {
1293 char key[XGE_OS_SPRINTF_STRLEN];
1294 channel = xge_container_of(item, xge_hal_channel_t, item);
1296 if (channel->is_open != 1)
1299 (void) xge_os_sprintf(key, "fifo%d_", channel->post_qid);
1300 xge_os_strcpy(key+6, "type");
1301 __HAL_AUX_ENTRY(key, channel->type, "%u");
1302 xge_os_strcpy(key+6, "length");
1303 __HAL_AUX_ENTRY(key, channel->length, "%u");
1304 xge_os_strcpy(key+6, "is_open");
1305 __HAL_AUX_ENTRY(key, channel->is_open, "%u");
1306 xge_os_strcpy(key+6, "reserve_initial");
1307 __HAL_AUX_ENTRY(key, channel->reserve_initial, "%u");
1308 xge_os_strcpy(key+6, "reserve_max");
1309 __HAL_AUX_ENTRY(key, channel->reserve_max, "%u");
1310 xge_os_strcpy(key+6, "reserve_length");
1311 __HAL_AUX_ENTRY(key, channel->reserve_length, "%u");
1312 xge_os_strcpy(key+6, "reserve_top");
1313 __HAL_AUX_ENTRY(key, channel->reserve_top, "%u");
1314 xge_os_strcpy(key+6, "reserve_threshold");
1315 __HAL_AUX_ENTRY(key, channel->reserve_threshold, "%u");
1316 xge_os_strcpy(key+6, "free_length");
1317 __HAL_AUX_ENTRY(key, channel->free_length, "%u");
1318 xge_os_strcpy(key+6, "post_index");
1319 __HAL_AUX_ENTRY(key, channel->post_index, "%u");
1320 xge_os_strcpy(key+6, "compl_index");
1321 __HAL_AUX_ENTRY(key, channel->compl_index, "%u");
1322 xge_os_strcpy(key+6, "per_dtr_space");
1323 __HAL_AUX_ENTRY(key, channel->per_dtr_space, "%u");
1324 xge_os_strcpy(key+6, "usage_cnt");
1325 __HAL_AUX_ENTRY(key, channel->usage_cnt, "%u");
1328 __HAL_AUX_ENTRY_END(bufsize, retsize);
1334 * xge_hal_aux_device_dump - Dump driver "about" info and device state.
1335 * @devh: HAL device handle.
1337 * Dump driver & device "about" info and device state,
1338 * including all BAR0 registers, hardware and software statistics, PCI
1339 * configuration space.
1340 * See also: xge_hal_aux_about_read(), xge_hal_mgmt_reg_read(),
1341 * xge_hal_aux_pci_config_read(), xge_hal_aux_stats_sw_dev_read(),
1342 * xge_hal_aux_stats_tmac_read(), xge_hal_aux_stats_rmac_read(),
1343 * xge_hal_aux_channel_read(), xge_hal_aux_stats_hal_read().
1345 * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
1346 * XGE_HAL_ERR_OUT_OF_SPACE - Buffer size is very small.
1349 xge_hal_aux_device_dump(xge_hal_device_h devh)
1351 xge_hal_device_t *hldev = (xge_hal_device_t*)devh;
1352 xge_hal_status_e status;
1357 xge_assert(hldev->dump_buf != NULL);
1359 xge_os_println("********* xge DEVICE DUMP BEGIN **********");
1361 status = xge_hal_aux_about_read(hldev, XGE_HAL_DUMP_BUF_SIZE,
1364 if (status != XGE_HAL_OK) {
1367 xge_os_println(hldev->dump_buf);
1370 for (offset = 0; offset < 1574; offset++) {
1372 status = xge_hal_mgmt_reg_read(hldev, 0, offset*8, &retval);
1373 if (status != XGE_HAL_OK) {
1377 if (!retval) continue;
1379 xge_os_printf("0x%04x 0x%08x%08x", offset*8,
1380 (u32)(retval>>32), (u32)retval);
1382 xge_os_println("\n");
1384 status = xge_hal_aux_pci_config_read(hldev, XGE_HAL_DUMP_BUF_SIZE,
1387 if (status != XGE_HAL_OK) {
1390 xge_os_println(hldev->dump_buf);
1392 status = xge_hal_aux_stats_tmac_read(hldev, XGE_HAL_DUMP_BUF_SIZE,
1395 if (status != XGE_HAL_OK) {
1398 xge_os_println(hldev->dump_buf);
1400 status = xge_hal_aux_stats_rmac_read(hldev, XGE_HAL_DUMP_BUF_SIZE,
1403 if (status != XGE_HAL_OK) {
1406 xge_os_println(hldev->dump_buf);
1408 status = xge_hal_aux_stats_pci_read(hldev, XGE_HAL_DUMP_BUF_SIZE,
1411 if (status != XGE_HAL_OK) {
1414 xge_os_println(hldev->dump_buf);
1416 if (xge_hal_device_check_id(hldev) == XGE_HAL_CARD_HERC) {
1417 status = xge_hal_aux_stats_herc_enchanced(hldev,
1418 XGE_HAL_DUMP_BUF_SIZE, hldev->dump_buf, &retsize);
1419 if (status != XGE_HAL_OK) {
1422 xge_os_println(hldev->dump_buf);
1425 status = xge_hal_aux_stats_sw_dev_read(hldev, XGE_HAL_DUMP_BUF_SIZE,
1426 hldev->dump_buf, &retsize);
1427 if (status != XGE_HAL_OK) {
1430 xge_os_println(hldev->dump_buf);
1432 status = xge_hal_aux_channel_read(hldev, XGE_HAL_DUMP_BUF_SIZE,
1435 if (status != XGE_HAL_OK) {
1438 xge_os_println(hldev->dump_buf);
1440 status = xge_hal_aux_stats_hal_read(hldev, XGE_HAL_DUMP_BUF_SIZE,
1443 if (status != XGE_HAL_OK) {
1446 xge_os_println(hldev->dump_buf);
1448 xge_os_println("********* XFRAME DEVICE DUMP END **********");
1456 * xge_hal_aux_driver_config_read - Read Driver configuration.
1457 * @bufsize: Buffer size.
1458 * @retbuf: Buffer pointer.
1459 * @retsize: Size of the result. Cannot be greater than @bufsize.
1461 * Read driver configuration,
1463 * Returns: XGE_HAL_OK - success.
1464 * XGE_HAL_ERR_VERSION_CONFLICT - Version it not maching.
1466 * See also: xge_hal_aux_device_config_read().
1469 xge_hal_aux_driver_config_read(int bufsize, char *retbuf, int *retsize)
1471 xge_hal_status_e status;
1472 xge_hal_driver_config_t drv_config;
1473 __HAL_AUX_ENTRY_DECLARE(bufsize, retbuf);
1475 status = xge_hal_mgmt_driver_config(&drv_config,
1476 sizeof(xge_hal_driver_config_t));
1477 if (status != XGE_HAL_OK) {
1481 __HAL_AUX_ENTRY("queue size initial",
1482 drv_config.queue_size_initial, "%u");
1483 __HAL_AUX_ENTRY("queue size max", drv_config.queue_size_max, "%u");
1484 __HAL_AUX_ENTRY_END(bufsize, retsize);
1491 * xge_hal_aux_device_config_read - Read device configuration.
1492 * @devh: HAL device handle.
1493 * @bufsize: Buffer size.
1494 * @retbuf: Buffer pointer.
1495 * @retsize: Size of the result. Cannot be greater than @bufsize.
1497 * Read device configuration,
1499 * Returns: XGE_HAL_OK - success.
1500 * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
1501 * XGE_HAL_ERR_VERSION_CONFLICT - Version it not maching.
1503 * See also: xge_hal_aux_driver_config_read().
1505 xge_hal_status_e xge_hal_aux_device_config_read(xge_hal_device_h devh,
1506 int bufsize, char *retbuf, int *retsize)
1509 xge_hal_status_e status;
1510 xge_hal_device_config_t *dev_config;
1511 xge_hal_device_t *hldev = (xge_hal_device_t *) devh;
1512 char key[XGE_OS_SPRINTF_STRLEN];
1513 __HAL_AUX_ENTRY_DECLARE(bufsize, retbuf);
1515 dev_config = (xge_hal_device_config_t *) xge_os_malloc(hldev->pdev,
1516 sizeof(xge_hal_device_config_t));
1517 if (dev_config == NULL) {
1518 return XGE_HAL_FAIL;
1521 status = xge_hal_mgmt_device_config(devh, dev_config,
1522 sizeof(xge_hal_device_config_t));
1523 if (status != XGE_HAL_OK) {
1524 xge_os_free(hldev->pdev, dev_config,
1525 sizeof(xge_hal_device_config_t));
1529 __HAL_AUX_ENTRY("mtu", dev_config->mtu, "%u");
1530 __HAL_AUX_ENTRY("isr_polling_count", dev_config->isr_polling_cnt, "%u");
1531 __HAL_AUX_ENTRY("latency_timer", dev_config->latency_timer, "%u");
1532 __HAL_AUX_ENTRY("max_splits_trans",
1533 dev_config->max_splits_trans, "%u");
1534 __HAL_AUX_ENTRY("mmrb_count", dev_config->mmrb_count, "%d");
1535 __HAL_AUX_ENTRY("shared_splits", dev_config->shared_splits, "%u");
1536 __HAL_AUX_ENTRY("stats_refresh_time_sec",
1537 dev_config->stats_refresh_time_sec, "%u");
1538 __HAL_AUX_ENTRY("pci_freq_mherz", dev_config->pci_freq_mherz, "%u");
1539 __HAL_AUX_ENTRY("intr_mode", dev_config->intr_mode, "%u");
1540 __HAL_AUX_ENTRY("ring_memblock_size",
1541 dev_config->ring.memblock_size, "%u");
1543 __HAL_AUX_ENTRY("sched_timer_us", dev_config->sched_timer_us, "%u");
1544 __HAL_AUX_ENTRY("sched_timer_one_shot",
1545 dev_config->sched_timer_one_shot, "%u");
1546 __HAL_AUX_ENTRY("rxufca_intr_thres", dev_config->rxufca_intr_thres, "%u");
1547 __HAL_AUX_ENTRY("rxufca_lo_lim", dev_config->rxufca_lo_lim, "%u");
1548 __HAL_AUX_ENTRY("rxufca_hi_lim", dev_config->rxufca_hi_lim, "%u");
1549 __HAL_AUX_ENTRY("rxufca_lbolt_period", dev_config->rxufca_lbolt_period, "%u");
1551 for(i = 0; i < XGE_HAL_MAX_RING_NUM; i++)
1553 xge_hal_ring_queue_t *ring = &dev_config->ring.queue[i];
1554 xge_hal_rti_config_t *rti = &ring->rti;
1556 if (!ring->configured)
1559 (void) xge_os_sprintf(key, "ring%d_", i);
1560 xge_os_strcpy(key+6, "inital");
1561 __HAL_AUX_ENTRY(key, ring->initial, "%u");
1562 xge_os_strcpy(key+6, "max");
1563 __HAL_AUX_ENTRY(key, ring->max, "%u");
1564 xge_os_strcpy(key+6, "buffer_mode");
1565 __HAL_AUX_ENTRY(key, ring->buffer_mode, "%u");
1566 xge_os_strcpy(key+6, "dram_size_mb");
1567 __HAL_AUX_ENTRY(key, ring->dram_size_mb, "%u");
1568 xge_os_strcpy(key+6, "backoff_interval_us");
1569 __HAL_AUX_ENTRY(key, ring->backoff_interval_us, "%u");
1570 xge_os_strcpy(key+6, "max_frame_len");
1571 __HAL_AUX_ENTRY(key, ring->max_frm_len, "%d");
1572 xge_os_strcpy(key+6, "priority");
1573 __HAL_AUX_ENTRY(key, ring->priority, "%u");
1574 xge_os_strcpy(key+6, "rth_en");
1575 __HAL_AUX_ENTRY(key, ring->rth_en, "%u");
1576 xge_os_strcpy(key+6, "no_snoop_bits");
1577 __HAL_AUX_ENTRY(key, ring->no_snoop_bits, "%u");
1578 xge_os_strcpy(key+6, "indicate_max_pkts");
1579 __HAL_AUX_ENTRY(key, ring->indicate_max_pkts, "%u");
1581 xge_os_strcpy(key+6, "urange_a");
1582 __HAL_AUX_ENTRY(key, rti->urange_a, "%u");
1583 xge_os_strcpy(key+6, "ufc_a");
1584 __HAL_AUX_ENTRY(key, rti->ufc_a, "%u");
1585 xge_os_strcpy(key+6, "urange_b");
1586 __HAL_AUX_ENTRY(key, rti->urange_b, "%u");
1587 xge_os_strcpy(key+6, "ufc_b");
1588 __HAL_AUX_ENTRY(key, rti->ufc_b, "%u");
1589 xge_os_strcpy(key+6, "urange_c");
1590 __HAL_AUX_ENTRY(key, rti->urange_c, "%u");
1591 xge_os_strcpy(key+6, "ufc_c");
1592 __HAL_AUX_ENTRY(key, rti->ufc_c, "%u");
1593 xge_os_strcpy(key+6, "ufc_d");
1594 __HAL_AUX_ENTRY(key, rti->ufc_d, "%u");
1595 xge_os_strcpy(key+6, "timer_val_us");
1596 __HAL_AUX_ENTRY(key, rti->timer_val_us, "%u");
1601 xge_hal_mac_config_t *mac= &dev_config->mac;
1603 __HAL_AUX_ENTRY("tmac_util_period",
1604 mac->tmac_util_period, "%u");
1605 __HAL_AUX_ENTRY("rmac_util_period",
1606 mac->rmac_util_period, "%u");
1607 __HAL_AUX_ENTRY("rmac_bcast_en",
1608 mac->rmac_bcast_en, "%u");
1609 __HAL_AUX_ENTRY("rmac_pause_gen_en",
1610 mac->rmac_pause_gen_en, "%d");
1611 __HAL_AUX_ENTRY("rmac_pause_rcv_en",
1612 mac->rmac_pause_rcv_en, "%d");
1613 __HAL_AUX_ENTRY("rmac_pause_time",
1614 mac->rmac_pause_time, "%u");
1615 __HAL_AUX_ENTRY("mc_pause_threshold_q0q3",
1616 mac->mc_pause_threshold_q0q3, "%u");
1617 __HAL_AUX_ENTRY("mc_pause_threshold_q4q7",
1618 mac->mc_pause_threshold_q4q7, "%u");
1622 __HAL_AUX_ENTRY("fifo_max_frags", dev_config->fifo.max_frags, "%u");
1623 __HAL_AUX_ENTRY("fifo_reserve_threshold",
1624 dev_config->fifo.reserve_threshold, "%u");
1625 __HAL_AUX_ENTRY("fifo_memblock_size",
1626 dev_config->fifo.memblock_size, "%u");
1627 #ifdef XGE_HAL_ALIGN_XMIT
1628 __HAL_AUX_ENTRY("fifo_alignment_size",
1629 dev_config->fifo.alignment_size, "%u");
1632 for (i = 0; i < XGE_HAL_MAX_FIFO_NUM; i++) {
1634 xge_hal_fifo_queue_t *fifo = &dev_config->fifo.queue[i];
1636 if (!fifo->configured)
1639 (void) xge_os_sprintf(key, "fifo%d_", i);
1640 xge_os_strcpy(key+6, "initial");
1641 __HAL_AUX_ENTRY(key, fifo->initial, "%u");
1642 xge_os_strcpy(key+6, "max");
1643 __HAL_AUX_ENTRY(key, fifo->max, "%u");
1644 xge_os_strcpy(key+6, "intr");
1645 __HAL_AUX_ENTRY(key, fifo->intr, "%u");
1646 xge_os_strcpy(key+6, "no_snoop_bits");
1647 __HAL_AUX_ENTRY(key, fifo->no_snoop_bits, "%u");
1649 for (j = 0; j < XGE_HAL_MAX_FIFO_TTI_NUM; j++) {
1650 xge_hal_tti_config_t *tti =
1651 &dev_config->fifo.queue[i].tti[j];
1656 (void) xge_os_sprintf(key, "fifo%d_tti%02d_", i,
1657 i * XGE_HAL_MAX_FIFO_TTI_NUM + j);
1658 xge_os_strcpy(key+12, "urange_a");
1659 __HAL_AUX_ENTRY(key, tti->urange_a, "%u");
1660 xge_os_strcpy(key+12, "ufc_a");
1661 __HAL_AUX_ENTRY(key, tti->ufc_a, "%u");
1662 xge_os_strcpy(key+12, "urange_b");
1663 __HAL_AUX_ENTRY(key, tti->urange_b, "%u");
1664 xge_os_strcpy(key+12, "ufc_b");
1665 __HAL_AUX_ENTRY(key, tti->ufc_b, "%u");
1666 xge_os_strcpy(key+12, "urange_c");
1667 __HAL_AUX_ENTRY(key, tti->urange_c, "%u");
1668 xge_os_strcpy(key+12, "ufc_c");
1669 __HAL_AUX_ENTRY(key, tti->ufc_c, "%u");
1670 xge_os_strcpy(key+12, "ufc_d");
1671 __HAL_AUX_ENTRY(key, tti->ufc_d, "%u");
1672 xge_os_strcpy(key+12, "timer_val_us");
1673 __HAL_AUX_ENTRY(key, tti->timer_val_us, "%u");
1674 xge_os_strcpy(key+12, "timer_ci_en");
1675 __HAL_AUX_ENTRY(key, tti->timer_ci_en, "%u");
1679 /* and bimodal TTIs */
1680 for (i=0; i<XGE_HAL_MAX_RING_NUM; i++) {
1681 xge_hal_tti_config_t *tti = &hldev->bimodal_tti[i];
1686 (void) xge_os_sprintf(key, "tti%02d_",
1687 XGE_HAL_MAX_FIFO_TTI_RING_0 + i);
1689 xge_os_strcpy(key+6, "urange_a");
1690 __HAL_AUX_ENTRY(key, tti->urange_a, "%u");
1691 xge_os_strcpy(key+6, "ufc_a");
1692 __HAL_AUX_ENTRY(key, tti->ufc_a, "%u");
1693 xge_os_strcpy(key+6, "urange_b");
1694 __HAL_AUX_ENTRY(key, tti->urange_b, "%u");
1695 xge_os_strcpy(key+6, "ufc_b");
1696 __HAL_AUX_ENTRY(key, tti->ufc_b, "%u");
1697 xge_os_strcpy(key+6, "urange_c");
1698 __HAL_AUX_ENTRY(key, tti->urange_c, "%u");
1699 xge_os_strcpy(key+6, "ufc_c");
1700 __HAL_AUX_ENTRY(key, tti->ufc_c, "%u");
1701 xge_os_strcpy(key+6, "ufc_d");
1702 __HAL_AUX_ENTRY(key, tti->ufc_d, "%u");
1703 xge_os_strcpy(key+6, "timer_val_us");
1704 __HAL_AUX_ENTRY(key, tti->timer_val_us, "%u");
1705 xge_os_strcpy(key+6, "timer_ac_en");
1706 __HAL_AUX_ENTRY(key, tti->timer_ac_en, "%u");
1707 xge_os_strcpy(key+6, "timer_ci_en");
1708 __HAL_AUX_ENTRY(key, tti->timer_ci_en, "%u");
1710 __HAL_AUX_ENTRY("dump_on_serr", dev_config->dump_on_serr, "%u");
1711 __HAL_AUX_ENTRY("dump_on_eccerr",
1712 dev_config->dump_on_eccerr, "%u");
1713 __HAL_AUX_ENTRY("dump_on_parityerr",
1714 dev_config->dump_on_parityerr, "%u");
1715 __HAL_AUX_ENTRY("rth_en", dev_config->rth_en, "%u");
1716 __HAL_AUX_ENTRY("rth_bucket_size", dev_config->rth_bucket_size, "%u");
1718 __HAL_AUX_ENTRY_END(bufsize, retsize);
1720 xge_os_free(hldev->pdev, dev_config,
1721 sizeof(xge_hal_device_config_t));