xref: /onnv-gate/usr/src/uts/common/io/xge/hal/xgehal/xgehal-mgmtaux.c (revision 6937:a5e2c8b5c817)
11256Syl150051 /*
21256Syl150051  * CDDL HEADER START
31256Syl150051  *
41256Syl150051  * The contents of this file are subject to the terms of the
51256Syl150051  * Common Development and Distribution License (the "License").
61256Syl150051  * You may not use this file except in compliance with the License.
71256Syl150051  *
81256Syl150051  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
91256Syl150051  * or http://www.opensolaris.org/os/licensing.
101256Syl150051  * See the License for the specific language governing permissions
111256Syl150051  * and limitations under the License.
121256Syl150051  *
131256Syl150051  * When distributing Covered Code, include this CDDL HEADER in each
141256Syl150051  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
151256Syl150051  * If applicable, add the following below this CDDL HEADER, with the
161256Syl150051  * fields enclosed by brackets "[]" replaced with your own identifying
171256Syl150051  * information: Portions Copyright [yyyy] [name of copyright owner]
181256Syl150051  *
191256Syl150051  * CDDL HEADER END
201256Syl150051  *
213115Syl150051  * Copyright (c) 2002-2006 Neterion, Inc.
221256Syl150051  */
231256Syl150051 
241256Syl150051 #include "xgehal-mgmt.h"
251256Syl150051 #include "xgehal-driver.h"
261256Syl150051 #include "xgehal-device.h"
271256Syl150051 
281256Syl150051 #ifdef XGE_OS_HAS_SNPRINTF
291256Syl150051 #define __hal_aux_snprintf(retbuf, bufsize, fmt, key, value, retsize) \
301256Syl150051     if (bufsize <= 0) return XGE_HAL_ERR_OUT_OF_SPACE; \
311256Syl150051     retsize = xge_os_snprintf(retbuf, bufsize, fmt, key, \
321256Syl150051 			XGE_HAL_AUX_SEPA, value); \
331256Syl150051     if (retsize < 0 || retsize >= bufsize) return XGE_HAL_ERR_OUT_OF_SPACE;
341256Syl150051 #else
351256Syl150051 #define __hal_aux_snprintf(retbuf, bufsize, fmt, key, value, retsize) \
361256Syl150051 	if (bufsize <= 0) return XGE_HAL_ERR_OUT_OF_SPACE; \
371256Syl150051         retsize = xge_os_sprintf(retbuf, fmt, key, XGE_HAL_AUX_SEPA, value); \
381256Syl150051 	xge_assert(retsize < bufsize); \
391256Syl150051 	if (retsize < 0 || retsize >= bufsize) \
401256Syl150051 		return XGE_HAL_ERR_OUT_OF_SPACE;
411256Syl150051 #endif
421256Syl150051 
431256Syl150051 #define __HAL_AUX_ENTRY_DECLARE(size, buf) \
441256Syl150051 	int entrysize = 0, leftsize = size; \
451256Syl150051 	char *ptr = buf;
461256Syl150051 
471256Syl150051 #define __HAL_AUX_ENTRY(key, value, fmt) \
481256Syl150051 	ptr += entrysize; leftsize -= entrysize; \
491256Syl150051 	__hal_aux_snprintf(ptr, leftsize, "%s%c"fmt"\n", key, value, entrysize)
501256Syl150051 
511256Syl150051 #define __HAL_AUX_ENTRY_END(bufsize, retsize) \
521256Syl150051 	leftsize -= entrysize; \
531256Syl150051 	*retsize = bufsize - leftsize;
541256Syl150051 
55*6937Sxw161283 #define	__hal_aux_pci_link_info(name, index, var) {	\
56*6937Sxw161283 		__HAL_AUX_ENTRY(name,			\
57*6937Sxw161283 		(unsigned long long)pcim.link_info[index].var, "%llu") \
58*6937Sxw161283 	}
59*6937Sxw161283 
60*6937Sxw161283 #define	__hal_aux_pci_aggr_info(name, index, var) { \
61*6937Sxw161283 		__HAL_AUX_ENTRY(name,				\
62*6937Sxw161283 		(unsigned long long)pcim.aggr_info[index].var, "%llu") \
63*6937Sxw161283 	}
64*6937Sxw161283 
651256Syl150051 /**
661256Syl150051  * xge_hal_aux_bar0_read - Read and format Xframe BAR0 register.
671256Syl150051  * @devh: HAL device handle.
681256Syl150051  * @offset: Register offset in the BAR0 space.
691256Syl150051  * @bufsize: Buffer size.
701256Syl150051  * @retbuf: Buffer pointer.
711256Syl150051  * @retsize: Size of the result. Cannot be greater than @bufsize.
721256Syl150051  *
731256Syl150051  * Read Xframe register from BAR0 space. The result is formatted as an ascii string.
741256Syl150051  *
751256Syl150051  * Returns: XGE_HAL_OK - success.
761256Syl150051  * XGE_HAL_ERR_OUT_OF_SPACE - Buffer size is very small.
771256Syl150051  * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
781256Syl150051  * XGE_HAL_ERR_INVALID_OFFSET - Register offset in the BAR space is not
791256Syl150051  * valid.
801256Syl150051  * XGE_HAL_ERR_INVALID_BAR_ID - BAR id is not valid.
811256Syl150051  *
821256Syl150051  * See also: xge_hal_mgmt_reg_read().
831256Syl150051  */
xge_hal_aux_bar0_read(xge_hal_device_h devh,unsigned int offset,int bufsize,char * retbuf,int * retsize)841256Syl150051 xge_hal_status_e xge_hal_aux_bar0_read(xge_hal_device_h devh,
851256Syl150051 			unsigned int offset, int bufsize, char *retbuf,
861256Syl150051 			int *retsize)
871256Syl150051 {
881256Syl150051 	xge_hal_status_e status;
891256Syl150051 	u64 retval;
901256Syl150051 
911256Syl150051 	status = xge_hal_mgmt_reg_read(devh, 0, offset, &retval);
921256Syl150051 	if (status != XGE_HAL_OK) {
931256Syl150051 		return status;
941256Syl150051 	}
951256Syl150051 
961256Syl150051 	if (bufsize < XGE_OS_SPRINTF_STRLEN) {
971256Syl150051 		return XGE_HAL_ERR_OUT_OF_SPACE;
981256Syl150051 	}
991256Syl150051 
100*6937Sxw161283 	*retsize = xge_os_snprintf(retbuf, bufsize, "0x%04X%c0x%08X%08X\n",
101*6937Sxw161283 	    offset, XGE_HAL_AUX_SEPA, (u32)(retval>>32), (u32)retval);
1021256Syl150051 
1031256Syl150051 	return XGE_HAL_OK;
1041256Syl150051 }
1051256Syl150051 
1061256Syl150051 /**
1071256Syl150051  * xge_hal_aux_bar1_read - Read and format Xframe BAR1 register.
1081256Syl150051  * @devh: HAL device handle.
1091256Syl150051  * @offset: Register offset in the BAR1 space.
1101256Syl150051  * @bufsize: Buffer size.
1111256Syl150051  * @retbuf: Buffer pointer.
1121256Syl150051  * @retsize: Size of the result. Cannot be greater than @bufsize.
1131256Syl150051  *
1141256Syl150051  * Read Xframe register from BAR1 space. The result is formatted as ascii string.
1151256Syl150051  * Returns: XGE_HAL_OK - success.
1161256Syl150051  * XGE_HAL_ERR_OUT_OF_SPACE - Buffer size is very small.
1171256Syl150051  * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
1181256Syl150051  * XGE_HAL_ERR_INVALID_OFFSET - Register offset in the BAR space is not
1191256Syl150051  * valid.
1201256Syl150051  * XGE_HAL_ERR_INVALID_BAR_ID - BAR id is not valid.
1211256Syl150051  *
1221256Syl150051  * See also: xge_hal_mgmt_reg_read().
1231256Syl150051  */
xge_hal_aux_bar1_read(xge_hal_device_h devh,unsigned int offset,int bufsize,char * retbuf,int * retsize)1241256Syl150051 xge_hal_status_e xge_hal_aux_bar1_read(xge_hal_device_h devh,
1251256Syl150051 			unsigned int offset, int bufsize, char *retbuf,
1261256Syl150051 			int *retsize)
1271256Syl150051 {
1281256Syl150051 	xge_hal_status_e status;
1291256Syl150051 	u64 retval;
1301256Syl150051 
1311256Syl150051 	status = xge_hal_mgmt_reg_read(devh, 1, offset, &retval);
132*6937Sxw161283 	if (status != XGE_HAL_OK)
1331256Syl150051 		return status;
1341256Syl150051 
135*6937Sxw161283 	if (bufsize < XGE_OS_SPRINTF_STRLEN)
1361256Syl150051 		return XGE_HAL_ERR_OUT_OF_SPACE;
1371256Syl150051 
138*6937Sxw161283         *retsize = xge_os_snprintf(retbuf, bufsize, "0x%04X%c0x%08X%08X\n",
139*6937Sxw161283             offset, XGE_HAL_AUX_SEPA, (u32)(retval>>32), (u32)retval);
1401256Syl150051 
1411256Syl150051 	return XGE_HAL_OK;
1421256Syl150051 }
1431256Syl150051 
1441256Syl150051 /**
1451256Syl150051  * xge_hal_aux_bar0_write - Write BAR0 register.
1461256Syl150051  * @devh: HAL device handle.
1471256Syl150051  * @offset: Register offset in the BAR0 space.
1481256Syl150051  * @value: Regsister value (to write).
1491256Syl150051  *
1501256Syl150051  * Write BAR0 register.
1511256Syl150051  *
1521256Syl150051  * Returns: XGE_HAL_OK - success.
1531256Syl150051  * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
1541256Syl150051  * XGE_HAL_ERR_INVALID_OFFSET - Register offset in the BAR space is not
1551256Syl150051  * valid.
1561256Syl150051  * XGE_HAL_ERR_INVALID_BAR_ID - BAR id is not valid.
1571256Syl150051  *
1581256Syl150051  * See also: xge_hal_mgmt_reg_write().
1591256Syl150051  */
xge_hal_aux_bar0_write(xge_hal_device_h devh,unsigned int offset,u64 value)1601256Syl150051 xge_hal_status_e xge_hal_aux_bar0_write(xge_hal_device_h devh,
1611256Syl150051 			unsigned int offset, u64 value)
1621256Syl150051 {
1631256Syl150051 	xge_hal_status_e status;
1641256Syl150051 
1651256Syl150051 	status = xge_hal_mgmt_reg_write(devh, 0, offset, value);
1661256Syl150051 	if (status != XGE_HAL_OK) {
1671256Syl150051 		return status;
1681256Syl150051 	}
1691256Syl150051 
1701256Syl150051 	return XGE_HAL_OK;
1711256Syl150051 }
1721256Syl150051 
1731256Syl150051 /**
1741256Syl150051  * xge_hal_aux_about_read - Retrieve and format about info.
1751256Syl150051  * @devh: HAL device handle.
1761256Syl150051  * @bufsize: Buffer size.
1771256Syl150051  * @retbuf: Buffer pointer.
1781256Syl150051  * @retsize: Size of the result. Cannot be greater than @bufsize.
1791256Syl150051  *
1801256Syl150051  * Retrieve about info (using xge_hal_mgmt_about()) and sprintf it
1811256Syl150051  * into the provided @retbuf.
1821256Syl150051  *
1831256Syl150051  * Returns: XGE_HAL_OK - success.
1841256Syl150051  * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
1851256Syl150051  * XGE_HAL_ERR_VERSION_CONFLICT - Version it not maching.
1861256Syl150051  * XGE_HAL_FAIL - Failed to retrieve the information.
1871256Syl150051  *
1881256Syl150051  * See also: xge_hal_mgmt_about(), xge_hal_aux_device_dump().
1891256Syl150051  */
xge_hal_aux_about_read(xge_hal_device_h devh,int bufsize,char * retbuf,int * retsize)1901256Syl150051 xge_hal_status_e xge_hal_aux_about_read(xge_hal_device_h devh, int bufsize,
1911256Syl150051 			char *retbuf, int *retsize)
1921256Syl150051 {
1931256Syl150051 	xge_hal_status_e status;
1941256Syl150051 	xge_hal_mgmt_about_info_t about_info;
1951256Syl150051 	__HAL_AUX_ENTRY_DECLARE(bufsize, retbuf);
1961256Syl150051 
1971256Syl150051 	status = xge_hal_mgmt_about(devh, &about_info,
1981256Syl150051 				  sizeof(xge_hal_mgmt_about_info_t));
1991256Syl150051 	if (status != XGE_HAL_OK) {
2001256Syl150051 		return status;
2011256Syl150051 	}
2021256Syl150051 
2031256Syl150051 	__HAL_AUX_ENTRY("vendor", about_info.vendor, "0x%x");
2041256Syl150051 	__HAL_AUX_ENTRY("device", about_info.device, "0x%x");
2051256Syl150051 	__HAL_AUX_ENTRY("subsys_vendor", about_info.subsys_vendor, "0x%x");
2061256Syl150051 	__HAL_AUX_ENTRY("subsys_device", about_info.subsys_device, "0x%x");
2071256Syl150051 	__HAL_AUX_ENTRY("board_rev", about_info.board_rev, "0x%x");
2081256Syl150051 	__HAL_AUX_ENTRY("vendor_name", about_info.vendor_name, "%s");
2091256Syl150051 	__HAL_AUX_ENTRY("chip_name", about_info.chip_name, "%s");
2101256Syl150051 	__HAL_AUX_ENTRY("media", about_info.media, "%s");
2111256Syl150051 	__HAL_AUX_ENTRY("hal_major", about_info.hal_major, "%s");
2121256Syl150051 	__HAL_AUX_ENTRY("hal_minor", about_info.hal_minor, "%s");
2131256Syl150051 	__HAL_AUX_ENTRY("hal_fix", about_info.hal_fix, "%s");
2141256Syl150051 	__HAL_AUX_ENTRY("hal_build", about_info.hal_build, "%s");
2151256Syl150051 	__HAL_AUX_ENTRY("ll_major", about_info.ll_major, "%s");
2161256Syl150051 	__HAL_AUX_ENTRY("ll_minor", about_info.ll_minor, "%s");
2171256Syl150051 	__HAL_AUX_ENTRY("ll_fix", about_info.ll_fix, "%s");
2181256Syl150051 	__HAL_AUX_ENTRY("ll_build", about_info.ll_build, "%s");
2191256Syl150051 
2203115Syl150051 	__HAL_AUX_ENTRY("transponder_temperature",
2213115Syl150051 			about_info.transponder_temperature, "%d C");
2223115Syl150051 
2231256Syl150051 	__HAL_AUX_ENTRY_END(bufsize, retsize);
2241256Syl150051 
2251256Syl150051 	return XGE_HAL_OK;
2261256Syl150051 }
2271256Syl150051 
2281256Syl150051 /**
2291256Syl150051  * xge_hal_aux_stats_tmac_read - Read TMAC hardware statistics.
2301256Syl150051  * @devh: HAL device handle.
2311256Syl150051  * @bufsize: Buffer size.
2321256Syl150051  * @retbuf: Buffer pointer.
2331256Syl150051  * @retsize: Size of the result. Cannot be greater than @bufsize.
2341256Syl150051  *
2351256Syl150051  * Read TMAC hardware statistics. This is a subset of stats counters
2361256Syl150051  * from xge_hal_stats_hw_info_t{}.
2371256Syl150051  *
2381256Syl150051  * Returns: XGE_HAL_OK - success.
2391256Syl150051  * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
2401256Syl150051  * XGE_HAL_ERR_VERSION_CONFLICT - Version it not maching.
2411256Syl150051  *
2421256Syl150051  * See also: xge_hal_mgmt_hw_stats{}, xge_hal_stats_hw_info_t{},
2431256Syl150051  * xge_hal_aux_stats_pci_read(),
2441256Syl150051  * xge_hal_aux_device_dump().
2451256Syl150051  */
xge_hal_aux_stats_tmac_read(xge_hal_device_h devh,int bufsize,char * retbuf,int * retsize)2461256Syl150051 xge_hal_status_e xge_hal_aux_stats_tmac_read(xge_hal_device_h devh, int	bufsize,
2471256Syl150051 				char *retbuf, int *retsize)
2481256Syl150051 {
2491256Syl150051 	xge_hal_status_e status;
250*6937Sxw161283 	xge_hal_device_t *hldev = (xge_hal_device_t*)devh;
251*6937Sxw161283 
2521256Syl150051 	__HAL_AUX_ENTRY_DECLARE(bufsize, retbuf);
2531256Syl150051 
254*6937Sxw161283 	if (xge_hal_device_check_id(hldev) != XGE_HAL_CARD_TITAN) {
255*6937Sxw161283 		xge_hal_mgmt_hw_stats_t hw;
2561256Syl150051 
257*6937Sxw161283 		status = xge_hal_mgmt_hw_stats(devh, &hw,
258*6937Sxw161283 				     sizeof(xge_hal_mgmt_hw_stats_t));
259*6937Sxw161283 		if (status != XGE_HAL_OK) {
260*6937Sxw161283 			return status;
261*6937Sxw161283 		}
262*6937Sxw161283 
263*6937Sxw161283 		__HAL_AUX_ENTRY("tmac_data_octets", hw.tmac_data_octets, "%u");
264*6937Sxw161283 		__HAL_AUX_ENTRY("tmac_frms", hw.tmac_frms, "%u");
265*6937Sxw161283 		__HAL_AUX_ENTRY("tmac_drop_frms", (unsigned long long)
266*6937Sxw161283 				hw.tmac_drop_frms, "%llu");
267*6937Sxw161283 		__HAL_AUX_ENTRY("tmac_bcst_frms", hw.tmac_bcst_frms, "%u");
268*6937Sxw161283 		__HAL_AUX_ENTRY("tmac_mcst_frms", hw.tmac_mcst_frms, "%u");
269*6937Sxw161283 		__HAL_AUX_ENTRY("tmac_pause_ctrl_frms", (unsigned long long)
2701256Syl150051 			hw.tmac_pause_ctrl_frms, "%llu");
271*6937Sxw161283 		__HAL_AUX_ENTRY("tmac_ucst_frms", hw.tmac_ucst_frms, "%u");
272*6937Sxw161283 		__HAL_AUX_ENTRY("tmac_ttl_octets", hw.tmac_ttl_octets, "%u");
273*6937Sxw161283 		__HAL_AUX_ENTRY("tmac_any_err_frms", hw.tmac_any_err_frms, "%u");
274*6937Sxw161283 		__HAL_AUX_ENTRY("tmac_nucst_frms", hw.tmac_nucst_frms, "%u");
275*6937Sxw161283 		__HAL_AUX_ENTRY("tmac_ttl_less_fb_octets", (unsigned long long)
2761256Syl150051 			hw.tmac_ttl_less_fb_octets, "%llu");
277*6937Sxw161283 		__HAL_AUX_ENTRY("tmac_vld_ip_octets", (unsigned long long)
2781256Syl150051 			hw.tmac_vld_ip_octets, "%llu");
279*6937Sxw161283 		__HAL_AUX_ENTRY("tmac_drop_ip", hw.tmac_drop_ip, "%u");
280*6937Sxw161283 		__HAL_AUX_ENTRY("tmac_vld_ip", hw.tmac_vld_ip, "%u");
281*6937Sxw161283 		__HAL_AUX_ENTRY("tmac_rst_tcp", hw.tmac_rst_tcp, "%u");
282*6937Sxw161283 		__HAL_AUX_ENTRY("tmac_icmp", hw.tmac_icmp, "%u");
283*6937Sxw161283 		__HAL_AUX_ENTRY("tmac_tcp", (unsigned long long)
2841256Syl150051 			hw.tmac_tcp, "%llu");
285*6937Sxw161283 		__HAL_AUX_ENTRY("reserved_0", hw.reserved_0, "%u");
286*6937Sxw161283 		__HAL_AUX_ENTRY("tmac_udp", hw.tmac_udp, "%u");
287*6937Sxw161283 	} else {
288*6937Sxw161283 		int	i;
289*6937Sxw161283 		xge_hal_mgmt_pcim_stats_t pcim;
290*6937Sxw161283 		status = xge_hal_mgmt_pcim_stats(devh, &pcim,
291*6937Sxw161283 				     sizeof(xge_hal_mgmt_pcim_stats_t));
292*6937Sxw161283 		if (status != XGE_HAL_OK) {
293*6937Sxw161283 			return status;
294*6937Sxw161283 		}
295*6937Sxw161283 
296*6937Sxw161283 		for (i = 0; i < XGE_HAL_MAC_LINKS; i++) {
297*6937Sxw161283 			__hal_aux_pci_link_info("tx_frms", i,
298*6937Sxw161283 				tx_frms);
299*6937Sxw161283 			__hal_aux_pci_link_info("tx_ttl_eth_octets",
300*6937Sxw161283 				i, tx_ttl_eth_octets );
301*6937Sxw161283 			__hal_aux_pci_link_info("tx_data_octets", i,
302*6937Sxw161283 				tx_data_octets);
303*6937Sxw161283 			__hal_aux_pci_link_info("tx_mcst_frms", i,
304*6937Sxw161283 				tx_mcst_frms);
305*6937Sxw161283 			__hal_aux_pci_link_info("tx_bcst_frms", i,
306*6937Sxw161283 				tx_bcst_frms);
307*6937Sxw161283 			__hal_aux_pci_link_info("tx_ucst_frms", i,
308*6937Sxw161283 				tx_ucst_frms);
309*6937Sxw161283 			__hal_aux_pci_link_info("tx_tagged_frms", i,
310*6937Sxw161283 				tx_tagged_frms);
311*6937Sxw161283 			__hal_aux_pci_link_info("tx_vld_ip", i,
312*6937Sxw161283 				tx_vld_ip);
313*6937Sxw161283 			__hal_aux_pci_link_info("tx_vld_ip_octets", i,
314*6937Sxw161283 				tx_vld_ip_octets);
315*6937Sxw161283 			__hal_aux_pci_link_info("tx_icmp", i,
316*6937Sxw161283 				tx_icmp);
317*6937Sxw161283 			__hal_aux_pci_link_info("tx_tcp", i,
318*6937Sxw161283 				tx_tcp);
319*6937Sxw161283 			__hal_aux_pci_link_info("tx_rst_tcp", i,
320*6937Sxw161283 				tx_rst_tcp);
321*6937Sxw161283 			__hal_aux_pci_link_info("tx_udp", i,
322*6937Sxw161283 				tx_udp);
323*6937Sxw161283 			__hal_aux_pci_link_info("tx_unknown_protocol", i,
324*6937Sxw161283 				tx_unknown_protocol);
325*6937Sxw161283 			__hal_aux_pci_link_info("tx_parse_error", i,
326*6937Sxw161283 				tx_parse_error);
327*6937Sxw161283 			__hal_aux_pci_link_info("tx_pause_ctrl_frms", i,
328*6937Sxw161283 				tx_pause_ctrl_frms);
329*6937Sxw161283 			__hal_aux_pci_link_info("tx_lacpdu_frms", i,
330*6937Sxw161283 				tx_lacpdu_frms);
331*6937Sxw161283 			__hal_aux_pci_link_info("tx_marker_pdu_frms", i,
332*6937Sxw161283 				tx_marker_pdu_frms);
333*6937Sxw161283 			__hal_aux_pci_link_info("tx_marker_resp_pdu_frms", i,
334*6937Sxw161283 				tx_marker_resp_pdu_frms);
335*6937Sxw161283 			__hal_aux_pci_link_info("tx_drop_ip", i,
336*6937Sxw161283 				tx_drop_ip);
337*6937Sxw161283 			__hal_aux_pci_link_info("tx_xgmii_char1_match", i,
338*6937Sxw161283 				tx_xgmii_char1_match);
339*6937Sxw161283 			__hal_aux_pci_link_info("tx_xgmii_char2_match", i,
340*6937Sxw161283 				tx_xgmii_char2_match);
341*6937Sxw161283 			__hal_aux_pci_link_info("tx_xgmii_column1_match", i,
342*6937Sxw161283 				tx_xgmii_column1_match);
343*6937Sxw161283 			__hal_aux_pci_link_info("tx_xgmii_column2_match", i,
344*6937Sxw161283 				tx_xgmii_column2_match);
345*6937Sxw161283 			__hal_aux_pci_link_info("tx_drop_frms", i,
346*6937Sxw161283 				tx_drop_frms);
347*6937Sxw161283 			__hal_aux_pci_link_info("tx_any_err_frms", i,
348*6937Sxw161283 				tx_any_err_frms);
349*6937Sxw161283 		}
350*6937Sxw161283 
351*6937Sxw161283 		for (i = 0; i < XGE_HAL_MAC_AGGREGATORS; i++) {
352*6937Sxw161283 			__hal_aux_pci_aggr_info("tx_frms", i, tx_frms);
353*6937Sxw161283 			__hal_aux_pci_aggr_info("tx_mcst_frms", i,
354*6937Sxw161283 				tx_mcst_frms);
355*6937Sxw161283 			__hal_aux_pci_aggr_info("tx_bcst_frms", i,
356*6937Sxw161283 				tx_bcst_frms);
357*6937Sxw161283 			__hal_aux_pci_aggr_info("tx_discarded_frms", i,
358*6937Sxw161283 				tx_discarded_frms);
359*6937Sxw161283 			__hal_aux_pci_aggr_info("tx_errored_frms", i,
360*6937Sxw161283 				tx_errored_frms);
361*6937Sxw161283 		}
362*6937Sxw161283 	}
3631256Syl150051 
3641256Syl150051 	__HAL_AUX_ENTRY_END(bufsize, retsize);
3651256Syl150051 
3661256Syl150051 	return XGE_HAL_OK;
3671256Syl150051 }
3681256Syl150051 
3691256Syl150051 /**
3701256Syl150051  * xge_hal_aux_stats_rmac_read - Read RMAC hardware statistics.
3711256Syl150051  * @devh: HAL device handle.
3721256Syl150051  * @bufsize: Buffer size.
3731256Syl150051  * @retbuf: Buffer pointer.
3741256Syl150051  * @retsize: Size of the result. Cannot be greater than @bufsize.
3751256Syl150051  *
3761256Syl150051  * Read RMAC hardware statistics. This is a subset of stats counters
3771256Syl150051  * from xge_hal_stats_hw_info_t{}.
3781256Syl150051  *
3791256Syl150051  * Returns: XGE_HAL_OK - success.
3801256Syl150051  * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
3811256Syl150051  * XGE_HAL_ERR_VERSION_CONFLICT - Version it not maching.
3821256Syl150051  *
3831256Syl150051  * See also: xge_hal_mgmt_hw_stats{}, xge_hal_stats_hw_info_t{},
3841256Syl150051  * xge_hal_aux_stats_pci_read(), xge_hal_aux_stats_tmac_read(),
3851256Syl150051  * xge_hal_aux_device_dump().
3861256Syl150051  */
xge_hal_aux_stats_rmac_read(xge_hal_device_h devh,int bufsize,char * retbuf,int * retsize)3871256Syl150051 xge_hal_status_e xge_hal_aux_stats_rmac_read(xge_hal_device_h devh, int	bufsize,
3881256Syl150051 				char *retbuf, int *retsize)
3891256Syl150051 {
3901256Syl150051 	xge_hal_status_e status;
391*6937Sxw161283 	xge_hal_device_t *hldev = (xge_hal_device_t*)devh;
392*6937Sxw161283 
3931256Syl150051 	__HAL_AUX_ENTRY_DECLARE(bufsize, retbuf);
3941256Syl150051 
395*6937Sxw161283 	if (xge_hal_device_check_id(hldev) != XGE_HAL_CARD_TITAN) {
396*6937Sxw161283 		xge_hal_mgmt_hw_stats_t hw;
397*6937Sxw161283 
398*6937Sxw161283 		status = xge_hal_mgmt_hw_stats(devh, &hw,
3991256Syl150051 				     sizeof(xge_hal_mgmt_hw_stats_t));
400*6937Sxw161283 		if (status != XGE_HAL_OK) {
401*6937Sxw161283 			return status;
402*6937Sxw161283 		}
4031256Syl150051 
404*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_data_octets", hw.rmac_data_octets, "%u");
405*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_vld_frms", hw.rmac_vld_frms, "%u");
406*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_fcs_err_frms", (unsigned long long)
407*6937Sxw161283 				hw.rmac_fcs_err_frms, "%llu");
408*6937Sxw161283 		__HAL_AUX_ENTRY("mac_drop_frms", (unsigned long long)
409*6937Sxw161283 				hw.rmac_drop_frms, "%llu");
410*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_vld_bcst_frms", hw.rmac_vld_bcst_frms,
411*6937Sxw161283 				"%u");
412*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_vld_mcst_frms", hw.rmac_vld_mcst_frms,
413*6937Sxw161283 				"%u");
414*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_out_rng_len_err_frms",
415*6937Sxw161283 				hw.rmac_out_rng_len_err_frms, "%u");
416*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_in_rng_len_err_frms",
417*6937Sxw161283 				hw.rmac_in_rng_len_err_frms, "%u");
418*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_long_frms", (unsigned long long)
419*6937Sxw161283 				hw.rmac_long_frms, "%llu");
420*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_pause_ctrl_frms", (unsigned long long)
421*6937Sxw161283 				hw.rmac_pause_ctrl_frms, "%llu");
422*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_unsup_ctrl_frms", (unsigned long long)
423*6937Sxw161283 				hw.rmac_unsup_ctrl_frms, "%llu");
424*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_accepted_ucst_frms",
425*6937Sxw161283 				hw.rmac_accepted_ucst_frms, "%u");
426*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_ttl_octets", hw.rmac_ttl_octets, "%u");
427*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_discarded_frms", hw.rmac_discarded_frms,
428*6937Sxw161283 			"%u");
429*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_accepted_nucst_frms",
430*6937Sxw161283 				hw.rmac_accepted_nucst_frms, "%u");
431*6937Sxw161283 		__HAL_AUX_ENTRY("reserved_1", hw.reserved_1, "%u");
432*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_drop_events", hw.rmac_drop_events, "%u");
433*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_ttl_less_fb_octets", (unsigned long long)
434*6937Sxw161283 				hw.rmac_ttl_less_fb_octets, "%llu");
435*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_ttl_frms", (unsigned long long)
436*6937Sxw161283 				hw.rmac_ttl_frms, "%llu");
437*6937Sxw161283 		__HAL_AUX_ENTRY("reserved_2", (unsigned long long)
438*6937Sxw161283 				hw.reserved_2, "%llu");
439*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_usized_frms", hw.rmac_usized_frms, "%u");
440*6937Sxw161283 		__HAL_AUX_ENTRY("reserved_3", hw.reserved_3, "%u");
441*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_frag_frms", hw.rmac_frag_frms, "%u");
442*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_osized_frms", hw.rmac_osized_frms, "%u");
443*6937Sxw161283 		__HAL_AUX_ENTRY("reserved_4", hw.reserved_4, "%u");
444*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_jabber_frms", hw.rmac_jabber_frms, "%u");
445*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_ttl_64_frms", (unsigned long long)
446*6937Sxw161283 				hw.rmac_ttl_64_frms, "%llu");
447*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_ttl_65_127_frms", (unsigned long long)
448*6937Sxw161283 				hw.rmac_ttl_65_127_frms, "%llu");
449*6937Sxw161283 		__HAL_AUX_ENTRY("reserved_5", (unsigned long long)
450*6937Sxw161283 				hw.reserved_5, "%llu");
451*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_ttl_128_255_frms", (unsigned long long)
452*6937Sxw161283 				hw.rmac_ttl_128_255_frms, "%llu");
453*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_ttl_256_511_frms", (unsigned long long)
454*6937Sxw161283 				hw.rmac_ttl_256_511_frms, "%llu");
455*6937Sxw161283 		__HAL_AUX_ENTRY("reserved_6", (unsigned long long)
456*6937Sxw161283 				hw.reserved_6, "%llu");
457*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_ttl_512_1023_frms", (unsigned long long)
458*6937Sxw161283 				hw.rmac_ttl_512_1023_frms, "%llu");
459*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_ttl_1024_1518_frms", (unsigned long long)
460*6937Sxw161283 				hw.rmac_ttl_1024_1518_frms, "%llu");
461*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_ip", hw.rmac_ip, "%u");
462*6937Sxw161283 		__HAL_AUX_ENTRY("reserved_7", hw.reserved_7, "%u");
463*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_ip_octets", (unsigned long long)
464*6937Sxw161283 				hw.rmac_ip_octets, "%llu");
465*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_drop_ip", hw.rmac_drop_ip, "%u");
466*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_hdr_err_ip", hw.rmac_hdr_err_ip, "%u");
467*6937Sxw161283 		__HAL_AUX_ENTRY("reserved_8", hw.reserved_8, "%u");
468*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_icmp", hw.rmac_icmp, "%u");
469*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_tcp", (unsigned long long)
470*6937Sxw161283 				hw.rmac_tcp, "%llu");
471*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_err_drp_udp", hw.rmac_err_drp_udp, "%u");
472*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_udp", hw.rmac_udp, "%u");
473*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_xgmii_err_sym", (unsigned long long)
474*6937Sxw161283 				hw.rmac_xgmii_err_sym, "%llu");
475*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_frms_q0", (unsigned long long)
476*6937Sxw161283 				hw.rmac_frms_q0, "%llu");
477*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_frms_q1", (unsigned long long)
478*6937Sxw161283 				hw.rmac_frms_q1, "%llu");
479*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_frms_q2", (unsigned long long)
480*6937Sxw161283 				hw.rmac_frms_q2, "%llu");
481*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_frms_q3", (unsigned long long)
482*6937Sxw161283 				hw.rmac_frms_q3, "%llu");
483*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_frms_q4", (unsigned long long)
484*6937Sxw161283 				hw.rmac_frms_q4, "%llu");
485*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_frms_q5", (unsigned long long)
486*6937Sxw161283 				hw.rmac_frms_q5, "%llu");
487*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_frms_q6", (unsigned long long)
488*6937Sxw161283 				hw.rmac_frms_q6, "%llu");
489*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_frms_q7", (unsigned long long)
490*6937Sxw161283 				hw.rmac_frms_q7, "%llu");
491*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_full_q3", hw.rmac_full_q3, "%d");
492*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_full_q2", hw.rmac_full_q2, "%d");
493*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_full_q1", hw.rmac_full_q1, "%d");
494*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_full_q0", hw.rmac_full_q0, "%d");
495*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_full_q7", hw.rmac_full_q7, "%d");
496*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_full_q6", hw.rmac_full_q6, "%d");
497*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_full_q5", hw.rmac_full_q5, "%d");
498*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_full_q4", hw.rmac_full_q4, "%d");
499*6937Sxw161283 		__HAL_AUX_ENTRY("reserved_9", hw.reserved_9, "%u");
500*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_pause_cnt", hw.rmac_pause_cnt, "%u");
501*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_xgmii_data_err_cnt", (unsigned long long)
502*6937Sxw161283 				hw.rmac_xgmii_data_err_cnt, "%llu");
503*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_xgmii_ctrl_err_cnt", (unsigned long long)
504*6937Sxw161283 				hw.rmac_xgmii_ctrl_err_cnt, "%llu");
505*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_err_tcp", hw.rmac_err_tcp, "%u");
506*6937Sxw161283 		__HAL_AUX_ENTRY("rmac_accepted_ip", hw.rmac_accepted_ip, "%u");
507*6937Sxw161283 	} else {
508*6937Sxw161283 		int i;
509*6937Sxw161283 		xge_hal_mgmt_pcim_stats_t pcim;
510*6937Sxw161283 		status = xge_hal_mgmt_pcim_stats(devh, &pcim,
511*6937Sxw161283 				     sizeof(xge_hal_mgmt_pcim_stats_t));
512*6937Sxw161283 		if (status != XGE_HAL_OK) {
513*6937Sxw161283 			return status;
514*6937Sxw161283 		}
515*6937Sxw161283 		for (i = 0; i < XGE_HAL_MAC_LINKS; i++) {
516*6937Sxw161283 			__hal_aux_pci_link_info("rx_ttl_frms", i,
517*6937Sxw161283 				rx_ttl_frms);
518*6937Sxw161283 			__hal_aux_pci_link_info("rx_vld_frms", i,
519*6937Sxw161283 				rx_vld_frms);
520*6937Sxw161283 			__hal_aux_pci_link_info("rx_offld_frms", i,
521*6937Sxw161283 				rx_offld_frms);
522*6937Sxw161283 			__hal_aux_pci_link_info("rx_ttl_eth_octets", i,
523*6937Sxw161283 				rx_ttl_eth_octets);
524*6937Sxw161283 			__hal_aux_pci_link_info("rx_data_octets", i,
525*6937Sxw161283 				rx_data_octets);
526*6937Sxw161283 			__hal_aux_pci_link_info("rx_offld_octets", i,
527*6937Sxw161283 				rx_offld_octets);
528*6937Sxw161283 			__hal_aux_pci_link_info("rx_vld_mcst_frms", i,
529*6937Sxw161283 				rx_vld_mcst_frms);
530*6937Sxw161283 			__hal_aux_pci_link_info("rx_vld_bcst_frms", i,
531*6937Sxw161283 				rx_vld_bcst_frms);
532*6937Sxw161283 			__hal_aux_pci_link_info("rx_accepted_ucst_frms", i,
533*6937Sxw161283 				rx_accepted_ucst_frms);
534*6937Sxw161283 			__hal_aux_pci_link_info("rx_accepted_nucst_frms", i,
535*6937Sxw161283 				rx_accepted_nucst_frms);
536*6937Sxw161283 			__hal_aux_pci_link_info("rx_tagged_frms", i,
537*6937Sxw161283 				rx_tagged_frms);
538*6937Sxw161283 			__hal_aux_pci_link_info("rx_long_frms", i,
539*6937Sxw161283 				rx_long_frms);
540*6937Sxw161283 			__hal_aux_pci_link_info("rx_usized_frms", i,
541*6937Sxw161283 				rx_usized_frms);
542*6937Sxw161283 			__hal_aux_pci_link_info("rx_osized_frms", i,
543*6937Sxw161283 				rx_osized_frms);
544*6937Sxw161283 			__hal_aux_pci_link_info("rx_frag_frms", i,
545*6937Sxw161283 				rx_frag_frms);
546*6937Sxw161283 			__hal_aux_pci_link_info("rx_jabber_frms", i,
547*6937Sxw161283 				rx_jabber_frms);
548*6937Sxw161283 			__hal_aux_pci_link_info("rx_ttl_64_frms", i,
549*6937Sxw161283 				rx_ttl_64_frms);
550*6937Sxw161283 			__hal_aux_pci_link_info("rx_ttl_65_127_frms", i,
551*6937Sxw161283 				rx_ttl_65_127_frms);
552*6937Sxw161283 			__hal_aux_pci_link_info("rx_ttl_128_255_frms", i,
553*6937Sxw161283 				rx_ttl_128_255_frms);
554*6937Sxw161283 			__hal_aux_pci_link_info("rx_ttl_256_511_frms", i,
555*6937Sxw161283 				rx_ttl_256_511_frms);
556*6937Sxw161283 			__hal_aux_pci_link_info("rx_ttl_512_1023_frms", i,
557*6937Sxw161283 				rx_ttl_512_1023_frms);
558*6937Sxw161283 			__hal_aux_pci_link_info("rx_ttl_1024_1518_frms", i,
559*6937Sxw161283 				rx_ttl_1024_1518_frms);
560*6937Sxw161283 			__hal_aux_pci_link_info("rx_ttl_1519_4095_frms", i,
561*6937Sxw161283 				rx_ttl_1519_4095_frms);
562*6937Sxw161283 			__hal_aux_pci_link_info("rx_ttl_40956_8191_frms", i,
563*6937Sxw161283 				rx_ttl_40956_8191_frms);
564*6937Sxw161283 			__hal_aux_pci_link_info("rx_ttl_8192_max_frms", i,
565*6937Sxw161283 				rx_ttl_8192_max_frms);
566*6937Sxw161283 			__hal_aux_pci_link_info("rx_ttl_gt_max_frms", i,
567*6937Sxw161283 				rx_ttl_gt_max_frms);
568*6937Sxw161283 			__hal_aux_pci_link_info("rx_ip", i,
569*6937Sxw161283 				rx_ip);
570*6937Sxw161283 			__hal_aux_pci_link_info("rx_ip_octets", i,
571*6937Sxw161283 				rx_ip_octets);
5721256Syl150051 
573*6937Sxw161283 			__hal_aux_pci_link_info("rx_hdr_err_ip", i,
574*6937Sxw161283 				rx_hdr_err_ip);
575*6937Sxw161283 
576*6937Sxw161283 			__hal_aux_pci_link_info("rx_icmp", i,
577*6937Sxw161283 				rx_icmp);
578*6937Sxw161283 			__hal_aux_pci_link_info("rx_tcp", i,
579*6937Sxw161283 				rx_tcp);
580*6937Sxw161283 			__hal_aux_pci_link_info("rx_udp", i,
581*6937Sxw161283 				rx_udp);
582*6937Sxw161283 			__hal_aux_pci_link_info("rx_err_tcp", i,
583*6937Sxw161283 				rx_err_tcp);
584*6937Sxw161283 			__hal_aux_pci_link_info("rx_pause_cnt", i,
585*6937Sxw161283 				rx_pause_cnt);
586*6937Sxw161283 			__hal_aux_pci_link_info("rx_pause_ctrl_frms", i,
587*6937Sxw161283 				rx_pause_ctrl_frms);
588*6937Sxw161283 			__hal_aux_pci_link_info("rx_unsup_ctrl_frms", i,
589*6937Sxw161283 				rx_pause_cnt);
590*6937Sxw161283 			__hal_aux_pci_link_info("rx_in_rng_len_err_frms", i,
591*6937Sxw161283 				rx_in_rng_len_err_frms);
592*6937Sxw161283 			__hal_aux_pci_link_info("rx_out_rng_len_err_frms", i,
593*6937Sxw161283 				rx_out_rng_len_err_frms);
594*6937Sxw161283 			__hal_aux_pci_link_info("rx_drop_frms", i,
595*6937Sxw161283 				rx_drop_frms);
596*6937Sxw161283 			__hal_aux_pci_link_info("rx_discarded_frms", i,
597*6937Sxw161283 				rx_discarded_frms);
598*6937Sxw161283 			__hal_aux_pci_link_info("rx_drop_ip", i,
599*6937Sxw161283 				rx_drop_ip);
600*6937Sxw161283 			__hal_aux_pci_link_info("rx_err_drp_udp", i,
601*6937Sxw161283 				rx_err_drp_udp);
602*6937Sxw161283 			__hal_aux_pci_link_info("rx_lacpdu_frms", i,
603*6937Sxw161283 				rx_lacpdu_frms);
604*6937Sxw161283 			__hal_aux_pci_link_info("rx_marker_pdu_frms", i,
605*6937Sxw161283 				rx_marker_pdu_frms);
606*6937Sxw161283 			__hal_aux_pci_link_info("rx_marker_resp_pdu_frms", i,
607*6937Sxw161283 				rx_marker_resp_pdu_frms);
608*6937Sxw161283 			__hal_aux_pci_link_info("rx_unknown_pdu_frms", i,
609*6937Sxw161283 				rx_unknown_pdu_frms);
610*6937Sxw161283 			__hal_aux_pci_link_info("rx_illegal_pdu_frms", i,
611*6937Sxw161283 				rx_illegal_pdu_frms);
612*6937Sxw161283 			__hal_aux_pci_link_info("rx_fcs_discard", i,
613*6937Sxw161283 				rx_fcs_discard);
614*6937Sxw161283 			__hal_aux_pci_link_info("rx_len_discard", i,
615*6937Sxw161283 				rx_len_discard);
616*6937Sxw161283 			__hal_aux_pci_link_info("rx_pf_discard", i,
617*6937Sxw161283 				rx_pf_discard);
618*6937Sxw161283 			__hal_aux_pci_link_info("rx_trash_discard", i,
619*6937Sxw161283 				rx_trash_discard);
620*6937Sxw161283 			__hal_aux_pci_link_info("rx_rts_discard", i,
621*6937Sxw161283 				rx_trash_discard);
622*6937Sxw161283 			__hal_aux_pci_link_info("rx_wol_discard", i,
623*6937Sxw161283 				rx_wol_discard);
624*6937Sxw161283 			__hal_aux_pci_link_info("rx_red_discard", i,
625*6937Sxw161283 				rx_red_discard);
626*6937Sxw161283 			__hal_aux_pci_link_info("rx_ingm_full_discard", i,
627*6937Sxw161283 				rx_ingm_full_discard);
628*6937Sxw161283 			__hal_aux_pci_link_info("rx_xgmii_data_err_cnt", i,
629*6937Sxw161283 				rx_xgmii_data_err_cnt);
630*6937Sxw161283 			__hal_aux_pci_link_info("rx_xgmii_ctrl_err_cnt", i,
631*6937Sxw161283 				rx_xgmii_ctrl_err_cnt);
632*6937Sxw161283 			__hal_aux_pci_link_info("rx_xgmii_err_sym", i,
633*6937Sxw161283 				rx_xgmii_err_sym);
634*6937Sxw161283 			__hal_aux_pci_link_info("rx_xgmii_char1_match", i,
635*6937Sxw161283 				rx_xgmii_char1_match);
636*6937Sxw161283 			__hal_aux_pci_link_info("rx_xgmii_char2_match", i,
637*6937Sxw161283 				rx_xgmii_char2_match);
638*6937Sxw161283 			__hal_aux_pci_link_info("rx_xgmii_column1_match", i,
639*6937Sxw161283 				rx_xgmii_column1_match);
640*6937Sxw161283 			__hal_aux_pci_link_info("rx_xgmii_column2_match", i,
641*6937Sxw161283 				rx_xgmii_column2_match);
642*6937Sxw161283 			__hal_aux_pci_link_info("rx_local_fault", i,
643*6937Sxw161283 				rx_local_fault);
644*6937Sxw161283 			__hal_aux_pci_link_info("rx_remote_fault", i,
645*6937Sxw161283 				rx_remote_fault);
646*6937Sxw161283 			__hal_aux_pci_link_info("rx_queue_full", i,
647*6937Sxw161283 				rx_queue_full);
648*6937Sxw161283 		}
649*6937Sxw161283 		for (i = 0; i < XGE_HAL_MAC_AGGREGATORS; i++) {
650*6937Sxw161283 			__hal_aux_pci_aggr_info("rx_frms", i, rx_frms);
651*6937Sxw161283 			__hal_aux_pci_link_info("rx_data_octets", i,
652*6937Sxw161283 				rx_data_octets);
653*6937Sxw161283 			__hal_aux_pci_aggr_info("rx_mcst_frms", i,
654*6937Sxw161283 				rx_mcst_frms);
655*6937Sxw161283 			__hal_aux_pci_aggr_info("rx_bcst_frms", i,
656*6937Sxw161283 				rx_bcst_frms);
657*6937Sxw161283 			__hal_aux_pci_aggr_info("rx_discarded_frms", i,
658*6937Sxw161283 				rx_discarded_frms);
659*6937Sxw161283 			__hal_aux_pci_aggr_info("rx_errored_frms", i,
660*6937Sxw161283 				rx_errored_frms);
661*6937Sxw161283 			__hal_aux_pci_aggr_info("rx_unknown_protocol_frms", i,
662*6937Sxw161283 				rx_unknown_protocol_frms);
663*6937Sxw161283 		}
664*6937Sxw161283 
665*6937Sxw161283 	}
6661256Syl150051 	__HAL_AUX_ENTRY_END(bufsize, retsize);
6671256Syl150051 
6681256Syl150051 	return XGE_HAL_OK;
6691256Syl150051 }
6701256Syl150051 
6711256Syl150051 /**
6721256Syl150051  * xge_hal_aux_stats_herc_enchanced - Get Hercules hardware statistics.
6731256Syl150051  * @devh: HAL device handle.
6741256Syl150051  * @bufsize: Buffer size.
6751256Syl150051  * @retbuf: Buffer pointer.
6761256Syl150051  * @retsize: Size of the result. Cannot be greater than @bufsize.
6771256Syl150051  *
6781256Syl150051  * Read Hercules device hardware statistics.
6791256Syl150051  *
6801256Syl150051  * Returns: XGE_HAL_OK - success.
6811256Syl150051  * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
6821256Syl150051  * XGE_HAL_ERR_VERSION_CONFLICT - Version it not maching.
6831256Syl150051  *
6841256Syl150051  * See also: xge_hal_mgmt_hw_stats{}, xge_hal_stats_hw_info_t{},
6851256Syl150051  * xge_hal_aux_stats_tmac_read(), xge_hal_aux_stats_rmac_read(),
6861256Syl150051  * xge_hal_aux_device_dump().
6871256Syl150051 */
xge_hal_aux_stats_herc_enchanced(xge_hal_device_h devh,int bufsize,char * retbuf,int * retsize)6881256Syl150051 xge_hal_status_e xge_hal_aux_stats_herc_enchanced(xge_hal_device_h devh,
6891256Syl150051 				  int bufsize, char *retbuf, int *retsize)
6901256Syl150051 {
6911256Syl150051 	xge_hal_status_e status;
6921256Syl150051 	xge_hal_mgmt_hw_stats_t hw;
693*6937Sxw161283 	xge_hal_device_t *hldev = (xge_hal_device_t*)devh;
694*6937Sxw161283 
6951256Syl150051 	__HAL_AUX_ENTRY_DECLARE(bufsize, retbuf);
6961256Syl150051 
697*6937Sxw161283 	if (xge_hal_device_check_id(hldev) == XGE_HAL_CARD_TITAN) {
698*6937Sxw161283 
699*6937Sxw161283 		__HAL_AUX_ENTRY_END(bufsize, retsize);
700*6937Sxw161283 
701*6937Sxw161283 		return XGE_HAL_OK;
702*6937Sxw161283 	}
703*6937Sxw161283 
704*6937Sxw161283 
7051256Syl150051 	status = xge_hal_mgmt_hw_stats(devh, &hw,
7061256Syl150051 				     sizeof(xge_hal_mgmt_hw_stats_t));
7071256Syl150051 	if (status != XGE_HAL_OK) {
7081256Syl150051 		return status;
7091256Syl150051 	}
7101256Syl150051 	__HAL_AUX_ENTRY("tmac_frms_oflow", hw.tmac_frms_oflow, "%u");
7111256Syl150051 	__HAL_AUX_ENTRY("tmac_data_octets_oflow", hw.tmac_data_octets_oflow,
7121256Syl150051 			"%u");
7131256Syl150051 	__HAL_AUX_ENTRY("tmac_mcst_frms_oflow", hw.tmac_mcst_frms_oflow, "%u");
7141256Syl150051 	__HAL_AUX_ENTRY("tmac_bcst_frms_oflow", hw.tmac_bcst_frms_oflow, "%u");
7151256Syl150051 	__HAL_AUX_ENTRY("tmac_ttl_octets_oflow", hw.tmac_ttl_octets_oflow,
7161256Syl150051 			"%u");
7171256Syl150051 	__HAL_AUX_ENTRY("tmac_ucst_frms_oflow", hw.tmac_ucst_frms_oflow, "%u");
7181256Syl150051 	__HAL_AUX_ENTRY("tmac_nucst_frms_oflow", hw.tmac_nucst_frms_oflow,
7191256Syl150051 			"%u");
7201256Syl150051 	__HAL_AUX_ENTRY("tmac_any_err_frms_oflow", hw.tmac_any_err_frms_oflow,
7211256Syl150051 			"%u");
7221256Syl150051 	__HAL_AUX_ENTRY("tmac_vlan_frms", (unsigned long long)hw.tmac_vlan_frms,
7231256Syl150051 			"%llu");
7241256Syl150051 	__HAL_AUX_ENTRY("tmac_vld_ip_oflow", hw.tmac_vld_ip_oflow, "%u");
7251256Syl150051 	__HAL_AUX_ENTRY("tmac_drop_ip_oflow", hw.tmac_drop_ip_oflow, "%u");
7261256Syl150051 	__HAL_AUX_ENTRY("tmac_icmp_oflow", hw.tmac_icmp_oflow, "%u");
7271256Syl150051 	__HAL_AUX_ENTRY("tmac_rst_tcp_oflow", hw.tmac_rst_tcp_oflow, "%u");
7281256Syl150051 	__HAL_AUX_ENTRY("tmac_udp_oflow", hw.tmac_udp_oflow, "%u");
7291256Syl150051 	__HAL_AUX_ENTRY("tpa_unknown_protocol", hw.tpa_unknown_protocol, "%u");
7301256Syl150051 	__HAL_AUX_ENTRY("tpa_parse_failure", hw.tpa_parse_failure, "%u");
7311256Syl150051 	__HAL_AUX_ENTRY("rmac_vld_frms_oflow", hw.rmac_vld_frms_oflow, "%u");
7321256Syl150051 	__HAL_AUX_ENTRY("rmac_data_octets_oflow", hw.rmac_data_octets_oflow,
7331256Syl150051 			"%u");
7341256Syl150051 	__HAL_AUX_ENTRY("rmac_vld_mcst_frms_oflow", hw.rmac_vld_mcst_frms_oflow,
7351256Syl150051 			"%u");
7361256Syl150051 	__HAL_AUX_ENTRY("rmac_vld_bcst_frms_oflow", hw.rmac_vld_bcst_frms_oflow,
7371256Syl150051 			"%u");
7381256Syl150051 	__HAL_AUX_ENTRY("rmac_ttl_octets_oflow", hw.rmac_ttl_octets_oflow,
7391256Syl150051 			"%u");
7401256Syl150051 	__HAL_AUX_ENTRY("rmac_accepted_ucst_frms_oflow",
7411256Syl150051 			hw.rmac_accepted_ucst_frms_oflow, "%u");
7421256Syl150051 	__HAL_AUX_ENTRY("rmac_accepted_nucst_frms_oflow",
7431256Syl150051 			hw.rmac_accepted_nucst_frms_oflow, "%u");
7441256Syl150051 	__HAL_AUX_ENTRY("rmac_discarded_frms_oflow",
7451256Syl150051 			hw.rmac_discarded_frms_oflow, "%u");
7461256Syl150051 	__HAL_AUX_ENTRY("rmac_drop_events_oflow", hw.rmac_drop_events_oflow,
7471256Syl150051 			"%u");
7481256Syl150051 	__HAL_AUX_ENTRY("rmac_usized_frms_oflow", hw.rmac_usized_frms_oflow,
7491256Syl150051 			"%u");
7501256Syl150051 	__HAL_AUX_ENTRY("rmac_osized_frms_oflow", hw.rmac_osized_frms_oflow,
7511256Syl150051 			"%u");
7521256Syl150051 	__HAL_AUX_ENTRY("rmac_frag_frms_oflow", hw.rmac_frag_frms_oflow, "%u");
7531256Syl150051 	__HAL_AUX_ENTRY("rmac_jabber_frms_oflow", hw.rmac_jabber_frms_oflow,
7541256Syl150051 			"%u");
7551256Syl150051 	__HAL_AUX_ENTRY("rmac_ip_oflow", hw.rmac_ip_oflow, "%u");
7561256Syl150051 	__HAL_AUX_ENTRY("rmac_drop_ip_oflow", hw.rmac_drop_ip_oflow, "%u");
7571256Syl150051 	__HAL_AUX_ENTRY("rmac_icmp_oflow", hw.rmac_icmp_oflow, "%u");
7581256Syl150051 	__HAL_AUX_ENTRY("rmac_udp_oflow", hw.rmac_udp_oflow, "%u");
7591256Syl150051 	__HAL_AUX_ENTRY("rmac_err_drp_udp_oflow", hw.rmac_err_drp_udp_oflow,
7601256Syl150051 			"%u");
7611256Syl150051 	__HAL_AUX_ENTRY("rmac_pause_cnt_oflow", hw.rmac_pause_cnt_oflow, "%u");
7621256Syl150051 	__HAL_AUX_ENTRY("rmac_ttl_1519_4095_frms",
7631256Syl150051 			(unsigned long long)hw.rmac_ttl_1519_4095_frms, "%llu");
7641256Syl150051 	__HAL_AUX_ENTRY("rmac_ttl_4096_8191_frms",
7651256Syl150051 			(unsigned long long)hw.rmac_ttl_4096_8191_frms, "%llu");
7661256Syl150051 	__HAL_AUX_ENTRY("rmac_ttl_8192_max_frms",
7671256Syl150051 			(unsigned long long)hw.rmac_ttl_8192_max_frms, "%llu");
7681256Syl150051 	__HAL_AUX_ENTRY("rmac_ttl_gt_max_frms",
7691256Syl150051 			(unsigned long long)hw.rmac_ttl_gt_max_frms, "%llu");
7701256Syl150051 	__HAL_AUX_ENTRY("rmac_osized_alt_frms",
7711256Syl150051 			(unsigned long long)hw.rmac_osized_alt_frms, "%llu");
7721256Syl150051 	__HAL_AUX_ENTRY("rmac_jabber_alt_frms",
7731256Syl150051 			(unsigned long long)hw.rmac_jabber_alt_frms, "%llu");
7741256Syl150051 	__HAL_AUX_ENTRY("rmac_gt_max_alt_frms",
7751256Syl150051 			(unsigned long long)hw.rmac_gt_max_alt_frms, "%llu");
7761256Syl150051 	__HAL_AUX_ENTRY("rmac_vlan_frms",
7771256Syl150051 			(unsigned long long)hw.rmac_vlan_frms, "%llu");
7781256Syl150051 	__HAL_AUX_ENTRY("rmac_fcs_discard", hw.rmac_fcs_discard, "%u");
7791256Syl150051 	__HAL_AUX_ENTRY("rmac_len_discard", hw.rmac_len_discard, "%u");
7801256Syl150051 	__HAL_AUX_ENTRY("rmac_da_discard", hw.rmac_da_discard, "%u");
7811256Syl150051 	__HAL_AUX_ENTRY("rmac_pf_discard", hw.rmac_pf_discard, "%u");
7821256Syl150051 	__HAL_AUX_ENTRY("rmac_rts_discard", hw.rmac_rts_discard, "%u");
7831256Syl150051 	__HAL_AUX_ENTRY("rmac_red_discard", hw.rmac_red_discard, "%u");
7841256Syl150051 	__HAL_AUX_ENTRY("rmac_ingm_full_discard", hw.rmac_ingm_full_discard,
7851256Syl150051 			"%u");
7861256Syl150051 	__HAL_AUX_ENTRY("rmac_accepted_ip_oflow", hw.rmac_accepted_ip_oflow,
7871256Syl150051 			"%u");
7881256Syl150051 	__HAL_AUX_ENTRY("link_fault_cnt", hw.link_fault_cnt, "%u");
7891256Syl150051 
7901256Syl150051 	__HAL_AUX_ENTRY_END(bufsize, retsize);
7911256Syl150051 
7921256Syl150051 	return XGE_HAL_OK;
7931256Syl150051 }
7941256Syl150051 
7951256Syl150051 /**
7961256Syl150051  * xge_hal_aux_stats_rmac_read - Read PCI hardware statistics.
7971256Syl150051  * @devh: HAL device handle.
7981256Syl150051  * @bufsize: Buffer size.
7991256Syl150051  * @retbuf: Buffer pointer.
8001256Syl150051  * @retsize: Size of the result. Cannot be greater than @bufsize.
8011256Syl150051  *
8021256Syl150051  * Read PCI statistics counters, including number of PCI read and
8031256Syl150051  * write transactions, PCI retries, discards, etc.
8041256Syl150051  * This is a subset of stats counters from xge_hal_stats_hw_info_t{}.
8051256Syl150051  *
8061256Syl150051  * Returns: XGE_HAL_OK - success.
8071256Syl150051  * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
8081256Syl150051  * XGE_HAL_ERR_VERSION_CONFLICT - Version it not maching.
8091256Syl150051  *
8101256Syl150051  * See also: xge_hal_mgmt_hw_stats{}, xge_hal_stats_hw_info_t{},
8111256Syl150051  * xge_hal_aux_stats_tmac_read(), xge_hal_aux_stats_rmac_read(),
8121256Syl150051  * xge_hal_aux_device_dump().
8131256Syl150051  */
xge_hal_aux_stats_pci_read(xge_hal_device_h devh,int bufsize,char * retbuf,int * retsize)8141256Syl150051 xge_hal_status_e xge_hal_aux_stats_pci_read(xge_hal_device_h devh, int bufsize,
8151256Syl150051 				char *retbuf, int *retsize)
8161256Syl150051 {
8171256Syl150051 	xge_hal_status_e status;
8181256Syl150051 	xge_hal_mgmt_hw_stats_t hw;
819*6937Sxw161283 	xge_hal_device_t *hldev = (xge_hal_device_t*)devh;
820*6937Sxw161283 
8211256Syl150051 	__HAL_AUX_ENTRY_DECLARE(bufsize, retbuf);
8221256Syl150051 
823*6937Sxw161283 	if (xge_hal_device_check_id(hldev) == XGE_HAL_CARD_TITAN) {
824*6937Sxw161283 
825*6937Sxw161283 		__HAL_AUX_ENTRY_END(bufsize, retsize);
826*6937Sxw161283 
827*6937Sxw161283 		return XGE_HAL_OK;
828*6937Sxw161283 	}
829*6937Sxw161283 
830*6937Sxw161283 
8311256Syl150051 	status = xge_hal_mgmt_hw_stats(devh, &hw,
8321256Syl150051 				     sizeof(xge_hal_mgmt_hw_stats_t));
8331256Syl150051 	if (status != XGE_HAL_OK) {
8341256Syl150051 		return status;
8351256Syl150051 	}
8361256Syl150051 
8371256Syl150051 	__HAL_AUX_ENTRY("new_rd_req_cnt", hw.new_rd_req_cnt, "%u");
8381256Syl150051 	__HAL_AUX_ENTRY("rd_req_cnt", hw.rd_req_cnt, "%u");
8391256Syl150051 	__HAL_AUX_ENTRY("rd_rtry_cnt", hw.rd_rtry_cnt, "%u");
8401256Syl150051 	__HAL_AUX_ENTRY("new_rd_req_rtry_cnt", hw.new_rd_req_rtry_cnt, "%u");
8411256Syl150051 	__HAL_AUX_ENTRY("wr_req_cnt", hw.wr_req_cnt, "%u");
8421256Syl150051 	__HAL_AUX_ENTRY("wr_rtry_rd_ack_cnt", hw.wr_rtry_rd_ack_cnt, "%u");
8431256Syl150051 	__HAL_AUX_ENTRY("new_wr_req_rtry_cnt", hw.new_wr_req_rtry_cnt, "%u");
8441256Syl150051 	__HAL_AUX_ENTRY("new_wr_req_cnt", hw.new_wr_req_cnt, "%u");
8451256Syl150051 	__HAL_AUX_ENTRY("wr_disc_cnt", hw.wr_disc_cnt, "%u");
8461256Syl150051 	__HAL_AUX_ENTRY("wr_rtry_cnt", hw.wr_rtry_cnt, "%u");
8471256Syl150051 	__HAL_AUX_ENTRY("txp_wr_cnt", hw.txp_wr_cnt, "%u");
8481256Syl150051 	__HAL_AUX_ENTRY("rd_rtry_wr_ack_cnt", hw.rd_rtry_wr_ack_cnt, "%u");
8491256Syl150051 	__HAL_AUX_ENTRY("txd_wr_cnt", hw.txd_wr_cnt, "%u");
8501256Syl150051 	__HAL_AUX_ENTRY("txd_rd_cnt", hw.txd_rd_cnt, "%u");
8511256Syl150051 	__HAL_AUX_ENTRY("rxd_wr_cnt", hw.rxd_wr_cnt, "%u");
8521256Syl150051 	__HAL_AUX_ENTRY("rxd_rd_cnt", hw.rxd_rd_cnt, "%u");
8531256Syl150051 	__HAL_AUX_ENTRY("rxf_wr_cnt", hw.rxf_wr_cnt, "%u");
8541256Syl150051 	__HAL_AUX_ENTRY("txf_rd_cnt", hw.txf_rd_cnt, "%u");
8551256Syl150051 
8561256Syl150051 	__HAL_AUX_ENTRY_END(bufsize, retsize);
8571256Syl150051 
8581256Syl150051 	return XGE_HAL_OK;
8591256Syl150051 }
8601256Syl150051 
8611256Syl150051 /**
8621256Syl150051  * xge_hal_aux_stats_hal_read - Read HAL (layer) statistics.
8631256Syl150051  * @devh: HAL device handle.
8641256Syl150051  * @bufsize: Buffer size.
8651256Syl150051  * @retbuf: Buffer pointer.
8661256Syl150051  * @retsize: Size of the result. Cannot be greater than @bufsize.
8671256Syl150051  *
8681256Syl150051  * Read HAL statistics.
8691256Syl150051  *
8701256Syl150051  * Returns: XGE_HAL_OK - success.
8711256Syl150051  * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
8721256Syl150051  * XGE_HAL_ERR_VERSION_CONFLICT - Version it not maching.
8731256Syl150051  * XGE_HAL_INF_STATS_IS_NOT_READY - Statistics information is not
8741256Syl150051  * currently available.
8751256Syl150051  *
8761256Syl150051  * See also: xge_hal_aux_device_dump().
8771256Syl150051  */
xge_hal_aux_stats_hal_read(xge_hal_device_h devh,int bufsize,char * retbuf,int * retsize)8781256Syl150051 xge_hal_status_e xge_hal_aux_stats_hal_read(xge_hal_device_h devh,
8791256Syl150051 			int bufsize, char *retbuf, int *retsize)
8801256Syl150051 {
8811256Syl150051 	xge_list_t *item;
8821256Syl150051 	xge_hal_channel_t *channel;
8831256Syl150051 	xge_hal_device_t *hldev = (xge_hal_device_t*)devh;
8841256Syl150051 	xge_hal_status_e status;
8851256Syl150051 	xge_hal_mgmt_device_stats_t devstat;
8861256Syl150051 	xge_hal_mgmt_channel_stats_t chstat;
8871256Syl150051 	__HAL_AUX_ENTRY_DECLARE(bufsize, retbuf);
8881256Syl150051 
889*6937Sxw161283 	int dest_size;
890*6937Sxw161283 	char *dest_addr;
891*6937Sxw161283 	char key[XGE_OS_SPRINTF_STRLEN];
892*6937Sxw161283 
8931256Syl150051 	status = xge_hal_mgmt_device_stats(hldev, &devstat,
8941256Syl150051 				     sizeof(xge_hal_mgmt_device_stats_t));
8951256Syl150051 	if (status != XGE_HAL_OK) {
8961256Syl150051 		return status;
8971256Syl150051 	}
8981256Syl150051 
8993115Syl150051 	if (!hldev->config.bimodal_interrupts) {
9003115Syl150051 		__HAL_AUX_ENTRY("rx_traffic_intr_cnt",
9013115Syl150051 				devstat.rx_traffic_intr_cnt, "%u");
9023115Syl150051 	}
9031256Syl150051 	__HAL_AUX_ENTRY("tx_traffic_intr_cnt", devstat.tx_traffic_intr_cnt, "%u");
9043115Syl150051 	__HAL_AUX_ENTRY("txpic_intr_cnt", devstat.txpic_intr_cnt, "%u");
9053115Syl150051 	__HAL_AUX_ENTRY("txdma_intr_cnt", devstat.txdma_intr_cnt, "%u");
9063115Syl150051 	__HAL_AUX_ENTRY("txmac_intr_cnt", devstat.txmac_intr_cnt, "%u");
9073115Syl150051 	__HAL_AUX_ENTRY("txxgxs_intr_cnt", devstat.txxgxs_intr_cnt, "%u");
9083115Syl150051 	__HAL_AUX_ENTRY("rxpic_intr_cnt", devstat.rxpic_intr_cnt, "%u");
9093115Syl150051 	__HAL_AUX_ENTRY("rxdma_intr_cnt", devstat.rxdma_intr_cnt, "%u");
9103115Syl150051 	__HAL_AUX_ENTRY("rxmac_intr_cnt", devstat.rxmac_intr_cnt, "%u");
9113115Syl150051 	__HAL_AUX_ENTRY("rxxgxs_intr_cnt", devstat.rxxgxs_intr_cnt, "%u");
9123115Syl150051 	__HAL_AUX_ENTRY("mc_intr_cnt", devstat.mc_intr_cnt, "%u");
913*6937Sxw161283 	__HAL_AUX_ENTRY("not_xge_intr_cnt", devstat.not_xge_intr_cnt, "%u");
9141256Syl150051 	__HAL_AUX_ENTRY("not_traffic_intr_cnt",
9151256Syl150051 			devstat.not_traffic_intr_cnt, "%u");
9161256Syl150051 	__HAL_AUX_ENTRY("traffic_intr_cnt", devstat.traffic_intr_cnt, "%u");
9171256Syl150051 	__HAL_AUX_ENTRY("total_intr_cnt", devstat.total_intr_cnt, "%u");
9181256Syl150051 	__HAL_AUX_ENTRY("soft_reset_cnt", devstat.soft_reset_cnt, "%u");
9193115Syl150051 
9203115Syl150051 	if (hldev->config.rxufca_hi_lim != hldev->config.rxufca_lo_lim &&
9213115Syl150051 	    hldev->config.rxufca_lo_lim != 0) {
9223115Syl150051 		__HAL_AUX_ENTRY("rxufca_lo_adjust_cnt",
9233115Syl150051 				devstat.rxufca_lo_adjust_cnt, "%u");
9243115Syl150051 		__HAL_AUX_ENTRY("rxufca_hi_adjust_cnt",
9253115Syl150051 				devstat.rxufca_hi_adjust_cnt, "%u");
9263115Syl150051 	}
9273115Syl150051 
9283115Syl150051 	if (hldev->config.bimodal_interrupts) {
9293115Syl150051 		__HAL_AUX_ENTRY("bimodal_lo_adjust_cnt",
9303115Syl150051 				devstat.bimodal_lo_adjust_cnt, "%u");
9313115Syl150051 		__HAL_AUX_ENTRY("bimodal_hi_adjust_cnt",
9323115Syl150051 				devstat.bimodal_hi_adjust_cnt, "%u");
9333115Syl150051 	}
9343115Syl150051 
9351256Syl150051 #if defined(XGE_HAL_CONFIG_LRO)
9361256Syl150051 	__HAL_AUX_ENTRY("tot_frms_lroised",
9371256Syl150051 			devstat.tot_frms_lroised, "%u");
9381256Syl150051 	__HAL_AUX_ENTRY("tot_lro_sessions",
9391256Syl150051 			devstat.tot_lro_sessions, "%u");
9403115Syl150051 	__HAL_AUX_ENTRY("lro_frm_len_exceed_cnt",
9413115Syl150051 			devstat.lro_frm_len_exceed_cnt, "%u");
9423115Syl150051 	__HAL_AUX_ENTRY("lro_sg_exceed_cnt",
9433115Syl150051 			devstat.lro_sg_exceed_cnt, "%u");
9443115Syl150051 	__HAL_AUX_ENTRY("lro_out_of_seq_pkt_cnt",
9453115Syl150051 			devstat.lro_out_of_seq_pkt_cnt, "%u");
9463115Syl150051 	__HAL_AUX_ENTRY("lro_dup_pkt_cnt",
9473115Syl150051 			devstat.lro_dup_pkt_cnt, "%u");
9481256Syl150051 #endif
9491256Syl150051 
9501256Syl150051 	/* for each opened rx channel */
9511256Syl150051 	xge_list_for_each(item, &hldev->ring_channels) {
952*6937Sxw161283 		channel = xge_container_of(item, xge_hal_channel_t, item);
953*6937Sxw161283 		status = xge_hal_mgmt_channel_stats(channel, &chstat,
954*6937Sxw161283 				     sizeof(xge_hal_mgmt_channel_stats_t));
955*6937Sxw161283 		if (status != XGE_HAL_OK) {
956*6937Sxw161283 			return status;
957*6937Sxw161283 		}
958*6937Sxw161283 
959*6937Sxw161283 		(void) xge_os_snprintf(key, sizeof(key), "ring%d_", channel->post_qid);
960*6937Sxw161283 
961*6937Sxw161283 		dest_addr = key + strlen(key);
962*6937Sxw161283 		dest_size = sizeof(key) - strlen(key);
963*6937Sxw161283 
964*6937Sxw161283 		xge_os_strlcpy(dest_addr, "full_cnt", dest_size);
965*6937Sxw161283 		__HAL_AUX_ENTRY(key, chstat.full_cnt, "%u");
966*6937Sxw161283 
967*6937Sxw161283 		xge_os_strlcpy(dest_addr, "usage_max", dest_size);
968*6937Sxw161283 		__HAL_AUX_ENTRY(key, chstat.usage_max, "%u");
969*6937Sxw161283 
970*6937Sxw161283 		xge_os_strlcpy(dest_addr, "usage_cnt", dest_size);
971*6937Sxw161283 		__HAL_AUX_ENTRY(key, channel->usage_cnt, "%u");
972*6937Sxw161283 
973*6937Sxw161283 		xge_os_strlcpy(dest_addr, "reserve_free_swaps_cnt", dest_size);
974*6937Sxw161283 		__HAL_AUX_ENTRY(key, chstat.reserve_free_swaps_cnt, "%u");
975*6937Sxw161283 
976*6937Sxw161283 		if (!hldev->config.bimodal_interrupts) {
977*6937Sxw161283 			xge_os_strlcpy(dest_addr, "avg_compl_per_intr_cnt", dest_size);
978*6937Sxw161283 			__HAL_AUX_ENTRY(key, chstat.avg_compl_per_intr_cnt, "%u");
979*6937Sxw161283 		}
980*6937Sxw161283 
981*6937Sxw161283 		xge_os_strlcpy(dest_addr, "total_compl_cnt", dest_size);
982*6937Sxw161283 		__HAL_AUX_ENTRY(key, chstat.total_compl_cnt, "%u");
983*6937Sxw161283 
984*6937Sxw161283 		xge_os_strlcpy(dest_addr, "bump_cnt", dest_size);
985*6937Sxw161283 		__HAL_AUX_ENTRY(key, chstat.ring_bump_cnt, "%u");
986*6937Sxw161283 	}
987*6937Sxw161283 
988*6937Sxw161283 	/* for each opened tx channel */
989*6937Sxw161283 	xge_list_for_each(item, &hldev->fifo_channels) {
9901256Syl150051 		channel = xge_container_of(item, xge_hal_channel_t, item);
9911256Syl150051 
9921256Syl150051 		status = xge_hal_mgmt_channel_stats(channel, &chstat,
9931256Syl150051 				     sizeof(xge_hal_mgmt_channel_stats_t));
9941256Syl150051 		if (status != XGE_HAL_OK) {
9951256Syl150051 			return status;
9961256Syl150051 		}
9971256Syl150051 
998*6937Sxw161283 		(void) xge_os_snprintf(key, sizeof(key), "fifo%d_", channel->post_qid);
9991256Syl150051 
1000*6937Sxw161283 		dest_addr = key + strlen(key);
1001*6937Sxw161283 		dest_size = sizeof(key) - strlen(key);
1002*6937Sxw161283 
1003*6937Sxw161283 		xge_os_strlcpy(dest_addr, "full_cnt", dest_size);
10043115Syl150051 		__HAL_AUX_ENTRY(key, chstat.full_cnt, "%u");
1005*6937Sxw161283 
1006*6937Sxw161283 		xge_os_strlcpy(dest_addr, "usage_max", dest_size);
10073115Syl150051 		__HAL_AUX_ENTRY(key, chstat.usage_max, "%u");
1008*6937Sxw161283 
1009*6937Sxw161283 		xge_os_strlcpy(dest_addr, "usage_cnt", dest_size);
10103115Syl150051 		__HAL_AUX_ENTRY(key, channel->usage_cnt, "%u");
1011*6937Sxw161283 
1012*6937Sxw161283 		xge_os_strlcpy(dest_addr, "reserve_free_swaps_cnt", dest_size);
10131256Syl150051 		__HAL_AUX_ENTRY(key, chstat.reserve_free_swaps_cnt, "%u");
1014*6937Sxw161283 
1015*6937Sxw161283 		xge_os_strlcpy(dest_addr, "avg_compl_per_intr_cnt", dest_size);
1016*6937Sxw161283 		__HAL_AUX_ENTRY(key, chstat.avg_compl_per_intr_cnt, "%u");
1017*6937Sxw161283 
1018*6937Sxw161283 		xge_os_strlcpy(dest_addr, "total_compl_cnt", dest_size);
10191256Syl150051 		__HAL_AUX_ENTRY(key, chstat.total_compl_cnt, "%u");
10201256Syl150051 
1021*6937Sxw161283 		xge_os_strlcpy(dest_addr, "total_posts", dest_size);
1022*6937Sxw161283 		__HAL_AUX_ENTRY(key, chstat.total_posts, "%u");
10231256Syl150051 
1024*6937Sxw161283 		xge_os_strlcpy(dest_addr, "total_posts_many", dest_size);
1025*6937Sxw161283 		__HAL_AUX_ENTRY(key, chstat.total_posts_many, "%u");
10261256Syl150051 
1027*6937Sxw161283 		xge_os_strlcpy(dest_addr, "copied_frags", dest_size);
10283115Syl150051 		__HAL_AUX_ENTRY(key, chstat.copied_frags, "%u");
1029*6937Sxw161283 
1030*6937Sxw161283 		xge_os_strlcpy(dest_addr, "copied_buffers", dest_size);
10313115Syl150051 		__HAL_AUX_ENTRY(key, chstat.copied_buffers, "%u");
1032*6937Sxw161283 
1033*6937Sxw161283 		xge_os_strlcpy(dest_addr, "total_buffers", dest_size);
10341256Syl150051 		__HAL_AUX_ENTRY(key, chstat.total_buffers, "%u");
1035*6937Sxw161283 
1036*6937Sxw161283 		xge_os_strlcpy(dest_addr, "avg_buffers_per_post", dest_size);
10371256Syl150051 		__HAL_AUX_ENTRY(key, chstat.avg_buffers_per_post, "%u");
1038*6937Sxw161283 
1039*6937Sxw161283 		xge_os_strlcpy(dest_addr, "avg_buffer_size", dest_size);
10401256Syl150051 		__HAL_AUX_ENTRY(key, chstat.avg_buffer_size, "%u");
1041*6937Sxw161283 
1042*6937Sxw161283 		xge_os_strlcpy(dest_addr, "avg_post_size", dest_size);
10431256Syl150051 		__HAL_AUX_ENTRY(key, chstat.avg_post_size, "%u");
1044*6937Sxw161283 
1045*6937Sxw161283 		xge_os_strlcpy(dest_addr, "total_posts_dtrs_many", dest_size);
10461256Syl150051 		__HAL_AUX_ENTRY(key, chstat.total_posts_dtrs_many, "%u");
1047*6937Sxw161283 
1048*6937Sxw161283 		xge_os_strlcpy(dest_addr, "total_posts_frags_many", dest_size);
10491256Syl150051 		__HAL_AUX_ENTRY(key, chstat.total_posts_frags_many, "%u");
1050*6937Sxw161283 
1051*6937Sxw161283 		xge_os_strlcpy(dest_addr, "total_posts_dang_dtrs", dest_size);
10521256Syl150051 		__HAL_AUX_ENTRY(key, chstat.total_posts_dang_dtrs, "%u");
1053*6937Sxw161283 
1054*6937Sxw161283 		xge_os_strlcpy(dest_addr, "total_posts_dang_frags", dest_size);
10551256Syl150051 		__HAL_AUX_ENTRY(key, chstat.total_posts_dang_frags, "%u");
10561256Syl150051 	}
10571256Syl150051 
10581256Syl150051 	__HAL_AUX_ENTRY_END(bufsize, retsize);
10591256Syl150051 
10601256Syl150051 	return XGE_HAL_OK;
10611256Syl150051 }
10621256Syl150051 
10631256Syl150051 
10641256Syl150051 
10651256Syl150051 /**
10661256Syl150051  * xge_hal_aux_stats_sw_dev_read - Read software device statistics.
10671256Syl150051  * @devh: HAL device handle.
10681256Syl150051  * @bufsize: Buffer size.
10691256Syl150051  * @retbuf: Buffer pointer.
10701256Syl150051  * @retsize: Size of the result. Cannot be greater than @bufsize.
10711256Syl150051  *
10721256Syl150051  * Read software-maintained device statistics.
10731256Syl150051  *
10741256Syl150051  * Returns: XGE_HAL_OK - success.
10751256Syl150051  * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
10761256Syl150051  * XGE_HAL_ERR_VERSION_CONFLICT - Version it not maching.
10771256Syl150051  * XGE_HAL_INF_STATS_IS_NOT_READY - Statistics information is not
10781256Syl150051  * currently available.
10791256Syl150051  *
10801256Syl150051  * See also: xge_hal_aux_device_dump().
10811256Syl150051  */
xge_hal_aux_stats_sw_dev_read(xge_hal_device_h devh,int bufsize,char * retbuf,int * retsize)10821256Syl150051 xge_hal_status_e xge_hal_aux_stats_sw_dev_read(xge_hal_device_h devh,
10831256Syl150051 				int bufsize, char *retbuf, int *retsize)
10841256Syl150051 {
10851256Syl150051 	xge_hal_device_t *hldev = (xge_hal_device_t*)devh;
10861256Syl150051 	xge_hal_status_e status;
10871256Syl150051 	xge_hal_mgmt_sw_stats_t sw_dev_err_stats;
1088*6937Sxw161283 	int t_code, t_code_cnt;
10891256Syl150051 	char buf[XGE_OS_SPRINTF_STRLEN];
10901256Syl150051 
10911256Syl150051 	__HAL_AUX_ENTRY_DECLARE(bufsize, retbuf);
10921256Syl150051 
10931256Syl150051 	status = xge_hal_mgmt_sw_stats(hldev, &sw_dev_err_stats,
10941256Syl150051 				     sizeof(xge_hal_mgmt_sw_stats_t));
10951256Syl150051 	if (status != XGE_HAL_OK) {
10961256Syl150051 		return status;
10971256Syl150051 	}
10981256Syl150051 
10991256Syl150051 	__HAL_AUX_ENTRY("sm_err_cnt",sw_dev_err_stats.sm_err_cnt, "%u");
11001256Syl150051 	__HAL_AUX_ENTRY("single_ecc_err_cnt",sw_dev_err_stats.single_ecc_err_cnt, "%u");
11011256Syl150051 	__HAL_AUX_ENTRY("double_ecc_err_cnt",sw_dev_err_stats.double_ecc_err_cnt, "%u");
11021256Syl150051 	__HAL_AUX_ENTRY("ecc_err_cnt", sw_dev_err_stats.ecc_err_cnt, "%u");
11031256Syl150051 	__HAL_AUX_ENTRY("parity_err_cnt",sw_dev_err_stats.parity_err_cnt, "%u");
11041256Syl150051 	__HAL_AUX_ENTRY("serr_cnt",sw_dev_err_stats.serr_cnt, "%u");
11051256Syl150051 
11061256Syl150051 	for (t_code = 1; t_code < 16; t_code++) {
1107*6937Sxw161283 	        t_code_cnt = sw_dev_err_stats.rxd_t_code_err_cnt[t_code];
11081256Syl150051 	        if (t_code_cnt)  {
1109*6937Sxw161283 			(void) xge_os_snprintf(buf, sizeof(buf), "rxd_t_code_%d", t_code);
11101256Syl150051 			__HAL_AUX_ENTRY(buf, t_code_cnt, "%u");
11111256Syl150051 	        }
11121256Syl150051 	        t_code_cnt = sw_dev_err_stats.txd_t_code_err_cnt[t_code];
11131256Syl150051 		if (t_code_cnt)	{
1114*6937Sxw161283 			(void) xge_os_snprintf(buf, sizeof(buf), "txd_t_code_%d", t_code);
11151256Syl150051 			__HAL_AUX_ENTRY(buf, t_code_cnt, "%u");
11161256Syl150051 		}
11171256Syl150051 	}
11183115Syl150051 	__HAL_AUX_ENTRY("alarm_transceiver_temp_high",sw_dev_err_stats.
11193115Syl150051 			stats_xpak.alarm_transceiver_temp_high, "%u");
11203115Syl150051 	__HAL_AUX_ENTRY("alarm_transceiver_temp_low",sw_dev_err_stats.
11213115Syl150051 			stats_xpak.alarm_transceiver_temp_low, "%u");
11223115Syl150051 	__HAL_AUX_ENTRY("alarm_laser_bias_current_high",sw_dev_err_stats.
11233115Syl150051 			stats_xpak.alarm_laser_bias_current_high, "%u");
11243115Syl150051 	__HAL_AUX_ENTRY("alarm_laser_bias_current_low",sw_dev_err_stats.
11253115Syl150051 			stats_xpak.alarm_laser_bias_current_low, "%u");
11263115Syl150051 	__HAL_AUX_ENTRY("alarm_laser_output_power_high",sw_dev_err_stats.
11273115Syl150051 			stats_xpak.alarm_laser_output_power_high, "%u");
11283115Syl150051 	__HAL_AUX_ENTRY("alarm_laser_output_power_low",sw_dev_err_stats.
11293115Syl150051 			stats_xpak.alarm_laser_output_power_low, "%u");
11303115Syl150051 	__HAL_AUX_ENTRY("warn_transceiver_temp_high",sw_dev_err_stats.
11313115Syl150051 			stats_xpak.warn_transceiver_temp_high, "%u");
11323115Syl150051 	__HAL_AUX_ENTRY("warn_transceiver_temp_low",sw_dev_err_stats.
11333115Syl150051 			stats_xpak.warn_transceiver_temp_low, "%u");
11343115Syl150051 	__HAL_AUX_ENTRY("warn_laser_bias_current_high",sw_dev_err_stats.
11353115Syl150051 			stats_xpak.warn_laser_bias_current_high, "%u");
11363115Syl150051 	__HAL_AUX_ENTRY("warn_laser_bias_current_low",sw_dev_err_stats.
11373115Syl150051 			stats_xpak.warn_laser_bias_current_low, "%u");
11383115Syl150051 	__HAL_AUX_ENTRY("warn_laser_output_power_high",sw_dev_err_stats.
11393115Syl150051 			stats_xpak.warn_laser_output_power_high, "%u");
11403115Syl150051 	__HAL_AUX_ENTRY("warn_laser_output_power_low",sw_dev_err_stats.
11413115Syl150051 			stats_xpak.warn_laser_output_power_low, "%u");
11421256Syl150051 
11431256Syl150051 	__HAL_AUX_ENTRY_END(bufsize, retsize);
11441256Syl150051 
11451256Syl150051 	return XGE_HAL_OK;
11461256Syl150051 }
11471256Syl150051 
11481256Syl150051 /**
11491256Syl150051  * xge_hal_aux_pci_config_read - Retrieve and format PCI Configuration
11501256Syl150051  * info.
11511256Syl150051  * @devh: HAL device handle.
11521256Syl150051  * @bufsize: Buffer size.
11531256Syl150051  * @retbuf: Buffer pointer.
11541256Syl150051  * @retsize: Size of the result. Cannot be greater than @bufsize.
11551256Syl150051  *
11561256Syl150051  * Retrieve about info (using xge_hal_mgmt_pci_config()) and sprintf it
11571256Syl150051  * into the provided @retbuf.
11581256Syl150051  *
11591256Syl150051  * Returns: XGE_HAL_OK - success.
11601256Syl150051  * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
11611256Syl150051  * XGE_HAL_ERR_VERSION_CONFLICT - Version it not maching.
11621256Syl150051  *
11631256Syl150051  * See also: xge_hal_mgmt_pci_config(), xge_hal_aux_device_dump().
11641256Syl150051  */
xge_hal_aux_pci_config_read(xge_hal_device_h devh,int bufsize,char * retbuf,int * retsize)11651256Syl150051 xge_hal_status_e xge_hal_aux_pci_config_read(xge_hal_device_h devh, int	bufsize,
11661256Syl150051 				char *retbuf, int *retsize)
11671256Syl150051 {
1168*6937Sxw161283 	int i;
11691256Syl150051 	xge_hal_status_e status;
11701256Syl150051 	xge_hal_mgmt_pci_config_t pci_config;
1171*6937Sxw161283 	char key[XGE_OS_SPRINTF_STRLEN];
1172*6937Sxw161283 
11731256Syl150051 	__HAL_AUX_ENTRY_DECLARE(bufsize, retbuf);
11741256Syl150051 
11751256Syl150051 	status = xge_hal_mgmt_pci_config(devh, &pci_config,
11761256Syl150051 				  sizeof(xge_hal_mgmt_pci_config_t));
11771256Syl150051 	if (status != XGE_HAL_OK) {
11781256Syl150051 		return status;
11791256Syl150051 	}
11801256Syl150051 
11811256Syl150051 	__HAL_AUX_ENTRY("vendor_id", pci_config.vendor_id, "0x%04X");
11821256Syl150051 	__HAL_AUX_ENTRY("device_id", pci_config.device_id, "0x%04X");
11831256Syl150051 	__HAL_AUX_ENTRY("command", pci_config.command, "0x%04X");
11841256Syl150051 	__HAL_AUX_ENTRY("status", pci_config.status, "0x%04X");
11851256Syl150051 	__HAL_AUX_ENTRY("revision", pci_config.revision, "0x%02X");
11861256Syl150051 	__HAL_AUX_ENTRY("pciClass1", pci_config.pciClass[0], "0x%02X");
11871256Syl150051 	__HAL_AUX_ENTRY("pciClass2", pci_config.pciClass[1], "0x%02X");
11881256Syl150051 	__HAL_AUX_ENTRY("pciClass3", pci_config.pciClass[2], "0x%02X");
11891256Syl150051 	__HAL_AUX_ENTRY("cache_line_size",
11901256Syl150051 			pci_config.cache_line_size, "0x%02X");
11911256Syl150051 	__HAL_AUX_ENTRY("latency_timer", pci_config.latency_timer, "0x%02X");
11921256Syl150051 	__HAL_AUX_ENTRY("header_type", pci_config.header_type, "0x%02X");
11931256Syl150051 	__HAL_AUX_ENTRY("bist", pci_config.bist, "0x%02X");
11941256Syl150051 	__HAL_AUX_ENTRY("base_addr0_lo", pci_config.base_addr0_lo, "0x%08X");
11951256Syl150051 	__HAL_AUX_ENTRY("base_addr0_hi", pci_config.base_addr0_hi, "0x%08X");
11961256Syl150051 	__HAL_AUX_ENTRY("base_addr1_lo", pci_config.base_addr1_lo, "0x%08X");
11971256Syl150051 	__HAL_AUX_ENTRY("base_addr1_hi", pci_config.base_addr1_hi, "0x%08X");
11981256Syl150051 	__HAL_AUX_ENTRY("not_Implemented1",
11991256Syl150051 			pci_config.not_Implemented1, "0x%08X");
12001256Syl150051 	__HAL_AUX_ENTRY("not_Implemented2", pci_config.not_Implemented2,
12011256Syl150051 			"0x%08X");
12021256Syl150051 	__HAL_AUX_ENTRY("cardbus_cis_pointer", pci_config.cardbus_cis_pointer,
12031256Syl150051 			"0x%08X");
12041256Syl150051 	__HAL_AUX_ENTRY("subsystem_vendor_id", pci_config.subsystem_vendor_id,
12051256Syl150051 			"0x%04X");
12061256Syl150051 	__HAL_AUX_ENTRY("subsystem_id", pci_config.subsystem_id, "0x%04X");
12071256Syl150051 	__HAL_AUX_ENTRY("rom_base", pci_config.rom_base, "0x%08X");
12081256Syl150051 	__HAL_AUX_ENTRY("capabilities_pointer",
12091256Syl150051 			pci_config.capabilities_pointer, "0x%02X");
12101256Syl150051 	__HAL_AUX_ENTRY("interrupt_line", pci_config.interrupt_line, "0x%02X");
12111256Syl150051 	__HAL_AUX_ENTRY("interrupt_pin", pci_config.interrupt_pin, "0x%02X");
12121256Syl150051 	__HAL_AUX_ENTRY("min_grant", pci_config.min_grant, "0x%02X");
12131256Syl150051 	__HAL_AUX_ENTRY("max_latency", pci_config.max_latency, "0x%02X");
12141256Syl150051 	__HAL_AUX_ENTRY("msi_cap_id", pci_config.msi_cap_id, "0x%02X");
12151256Syl150051 	__HAL_AUX_ENTRY("msi_next_ptr", pci_config.msi_next_ptr, "0x%02X");
12161256Syl150051 	__HAL_AUX_ENTRY("msi_control", pci_config.msi_control, "0x%04X");
12171256Syl150051 	__HAL_AUX_ENTRY("msi_lower_address", pci_config.msi_lower_address,
12181256Syl150051 			"0x%08X");
12191256Syl150051 	__HAL_AUX_ENTRY("msi_higher_address", pci_config.msi_higher_address,
12201256Syl150051 			"0x%08X");
12211256Syl150051 	__HAL_AUX_ENTRY("msi_data", pci_config.msi_data, "0x%04X");
12221256Syl150051 	__HAL_AUX_ENTRY("msi_unused", pci_config.msi_unused, "0x%04X");
12231256Syl150051 	__HAL_AUX_ENTRY("vpd_cap_id", pci_config.vpd_cap_id, "0x%02X");
12241256Syl150051 	__HAL_AUX_ENTRY("vpd_next_cap", pci_config.vpd_next_cap, "0x%02X");
12251256Syl150051 	__HAL_AUX_ENTRY("vpd_addr", pci_config.vpd_addr, "0x%04X");
12261256Syl150051 	__HAL_AUX_ENTRY("vpd_data", pci_config.vpd_data, "0x%08X");
12271256Syl150051 	__HAL_AUX_ENTRY("pcix_cap", pci_config.pcix_cap, "0x%02X");
12281256Syl150051 	__HAL_AUX_ENTRY("pcix_next_cap", pci_config.pcix_next_cap, "0x%02X");
12291256Syl150051 	__HAL_AUX_ENTRY("pcix_command", pci_config.pcix_command, "0x%04X");
12301256Syl150051 	__HAL_AUX_ENTRY("pcix_status", pci_config.pcix_status, "0x%08X");
12311256Syl150051 
12321256Syl150051 	if (xge_hal_device_check_id(devh) == XGE_HAL_CARD_HERC) {
1233*6937Sxw161283 		for (i = 0; i < (XGE_HAL_PCI_XFRAME_CONFIG_SPACE_SIZE - 0x68)/4; i++) {
1234*6937Sxw161283 			(void) xge_os_snprintf(key, sizeof(key), "%03x:", 4*i + 0x68);
1235*6937Sxw161283 			__HAL_AUX_ENTRY(key, *((int *)pci_config.rsvd_b1 + i), "0x%08X");
12361256Syl150051 		}
12371256Syl150051 	}
12381256Syl150051 
12391256Syl150051 	__HAL_AUX_ENTRY_END(bufsize, retsize);
12401256Syl150051 
12411256Syl150051 	return XGE_HAL_OK;
12421256Syl150051 }
12431256Syl150051 
12441256Syl150051 
12451256Syl150051 /**
12461256Syl150051  * xge_hal_aux_channel_read - Read channels information.
12471256Syl150051  * @devh: HAL device handle.
12481256Syl150051  * @bufsize: Buffer size.
12491256Syl150051  * @retbuf: Buffer pointer.
12501256Syl150051  * @retsize: Size of the result. Cannot be greater than @bufsize.
12511256Syl150051  *
12521256Syl150051  * Read HAL statistics.
12531256Syl150051  *
12541256Syl150051  * Returns: XGE_HAL_OK - success.
12551256Syl150051  * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
12561256Syl150051  * XGE_HAL_ERR_OUT_OF_SPACE - Buffer size is very small.
12571256Syl150051  * See also: xge_hal_aux_device_dump().
12581256Syl150051  */
xge_hal_aux_channel_read(xge_hal_device_h devh,int bufsize,char * retbuf,int * retsize)12591256Syl150051 xge_hal_status_e xge_hal_aux_channel_read(xge_hal_device_h devh,
12601256Syl150051 				int bufsize, char *retbuf, int *retsize)
12611256Syl150051 {
12621256Syl150051 	xge_list_t *item;
12631256Syl150051 	xge_hal_channel_t *channel;
12641256Syl150051 	xge_hal_device_t *hldev = (xge_hal_device_t*)devh;
12651256Syl150051 	__HAL_AUX_ENTRY_DECLARE(bufsize, retbuf);
12661256Syl150051 
1267*6937Sxw161283 	int dest_size;
1268*6937Sxw161283 	char *dest_addr;
1269*6937Sxw161283 	char key[XGE_OS_SPRINTF_STRLEN];
1270*6937Sxw161283 
12711256Syl150051 	if (hldev->magic != XGE_HAL_MAGIC) {
12721256Syl150051                 return XGE_HAL_ERR_INVALID_DEVICE;
12731256Syl150051         }
12741256Syl150051 
12751256Syl150051 	/* for each opened rx channel */
12761256Syl150051 	xge_list_for_each(item, &hldev->ring_channels) {
12771256Syl150051 		channel = xge_container_of(item, xge_hal_channel_t, item);
12781256Syl150051 
12791256Syl150051 		if (channel->is_open != 1)
12801256Syl150051 			continue;
12811256Syl150051 
1282*6937Sxw161283 		(void) xge_os_snprintf(key, sizeof(key), "ring%d_", channel->post_qid);
1283*6937Sxw161283 
1284*6937Sxw161283 		dest_addr = key + strlen(key);
1285*6937Sxw161283 		dest_size = sizeof(key) - strlen(key);
1286*6937Sxw161283 
1287*6937Sxw161283 		xge_os_strlcpy(dest_addr, "type", dest_size);
12881256Syl150051 		__HAL_AUX_ENTRY(key, channel->type, "%u");
1289*6937Sxw161283 
1290*6937Sxw161283 		xge_os_strlcpy(dest_addr, "length", dest_size);
12911256Syl150051 		__HAL_AUX_ENTRY(key, channel->length, "%u");
1292*6937Sxw161283 
1293*6937Sxw161283 		xge_os_strlcpy(dest_addr, "is_open", dest_size);
12941256Syl150051 		__HAL_AUX_ENTRY(key, channel->is_open, "%u");
1295*6937Sxw161283 
1296*6937Sxw161283 		xge_os_strlcpy(dest_addr, "reserve_initial", dest_size);
12971256Syl150051 		__HAL_AUX_ENTRY(key, channel->reserve_initial, "%u");
1298*6937Sxw161283 
1299*6937Sxw161283 		xge_os_strlcpy(dest_addr, "reserve_max", dest_size);
13001256Syl150051 		__HAL_AUX_ENTRY(key, channel->reserve_max, "%u");
1301*6937Sxw161283 
1302*6937Sxw161283 		xge_os_strlcpy(dest_addr, "reserve_length", dest_size);
13031256Syl150051 		__HAL_AUX_ENTRY(key, channel->reserve_length, "%u");
1304*6937Sxw161283 
1305*6937Sxw161283 		xge_os_strlcpy(dest_addr, "reserve_top", dest_size);
13061256Syl150051 		__HAL_AUX_ENTRY(key, channel->reserve_top, "%u");
1307*6937Sxw161283 
1308*6937Sxw161283 		xge_os_strlcpy(dest_addr, "reserve_threshold", dest_size);
13091256Syl150051 		__HAL_AUX_ENTRY(key, channel->reserve_threshold, "%u");
1310*6937Sxw161283 
1311*6937Sxw161283 		xge_os_strlcpy(dest_addr, "free_length", dest_size);
13121256Syl150051 		__HAL_AUX_ENTRY(key, channel->free_length, "%u");
1313*6937Sxw161283 
1314*6937Sxw161283 		xge_os_strlcpy(dest_addr, "post_index", dest_size);
13151256Syl150051 		__HAL_AUX_ENTRY(key, channel->post_index, "%u");
1316*6937Sxw161283 
1317*6937Sxw161283 		xge_os_strlcpy(dest_addr, "compl_index", dest_size);
13181256Syl150051 		__HAL_AUX_ENTRY(key, channel->compl_index, "%u");
1319*6937Sxw161283 
1320*6937Sxw161283 		xge_os_strlcpy(dest_addr, "per_dtr_space", dest_size);
13211256Syl150051 		__HAL_AUX_ENTRY(key, channel->per_dtr_space, "%u");
1322*6937Sxw161283 
1323*6937Sxw161283 		xge_os_strlcpy(dest_addr, "usage_cnt", dest_size);
13243115Syl150051 		__HAL_AUX_ENTRY(key, channel->usage_cnt, "%u");
13251256Syl150051 	}
13261256Syl150051 
13271256Syl150051 	/* for each opened tx channel */
13281256Syl150051 	xge_list_for_each(item, &hldev->fifo_channels) {
13291256Syl150051 		channel = xge_container_of(item, xge_hal_channel_t, item);
13301256Syl150051 		if (channel->is_open != 1)
13311256Syl150051 			continue;
13321256Syl150051 
1333*6937Sxw161283 		(void) xge_os_snprintf(key, sizeof(key), "fifo%d_", channel->post_qid);
1334*6937Sxw161283 
1335*6937Sxw161283 		dest_addr = key + strlen(key);
1336*6937Sxw161283 		dest_size = sizeof(key) - strlen(key);
1337*6937Sxw161283 
1338*6937Sxw161283 		xge_os_strlcpy(dest_addr, "type", dest_size);
13391256Syl150051 		__HAL_AUX_ENTRY(key, channel->type, "%u");
1340*6937Sxw161283 
1341*6937Sxw161283 		xge_os_strlcpy(dest_addr, "length", dest_size);
13421256Syl150051 		__HAL_AUX_ENTRY(key, channel->length, "%u");
1343*6937Sxw161283 
1344*6937Sxw161283 		xge_os_strlcpy(dest_addr, "is_open", dest_size);
13451256Syl150051 		__HAL_AUX_ENTRY(key, channel->is_open, "%u");
1346*6937Sxw161283 
1347*6937Sxw161283 		xge_os_strlcpy(dest_addr, "reserve_initial", dest_size);
13481256Syl150051 		__HAL_AUX_ENTRY(key, channel->reserve_initial, "%u");
1349*6937Sxw161283 
1350*6937Sxw161283 		xge_os_strlcpy(dest_addr, "reserve_max", dest_size);
13511256Syl150051 		__HAL_AUX_ENTRY(key, channel->reserve_max, "%u");
1352*6937Sxw161283 
1353*6937Sxw161283 		xge_os_strlcpy(dest_addr, "reserve_length", dest_size);
13541256Syl150051 		__HAL_AUX_ENTRY(key, channel->reserve_length, "%u");
1355*6937Sxw161283 
1356*6937Sxw161283 		xge_os_strlcpy(dest_addr, "reserve_top", dest_size);
13571256Syl150051 		__HAL_AUX_ENTRY(key, channel->reserve_top, "%u");
1358*6937Sxw161283 
1359*6937Sxw161283 		xge_os_strlcpy(dest_addr, "reserve_threshold", dest_size);
13601256Syl150051 		__HAL_AUX_ENTRY(key, channel->reserve_threshold, "%u");
1361*6937Sxw161283 
1362*6937Sxw161283 		xge_os_strlcpy(dest_addr, "free_length", dest_size);
13631256Syl150051 		__HAL_AUX_ENTRY(key, channel->free_length, "%u");
1364*6937Sxw161283 
1365*6937Sxw161283 		xge_os_strlcpy(dest_addr, "post_index", dest_size);
13661256Syl150051 		__HAL_AUX_ENTRY(key, channel->post_index, "%u");
1367*6937Sxw161283 
1368*6937Sxw161283 		xge_os_strlcpy(dest_addr, "compl_index", dest_size);
13691256Syl150051 		__HAL_AUX_ENTRY(key, channel->compl_index, "%u");
1370*6937Sxw161283 
1371*6937Sxw161283 		xge_os_strlcpy(dest_addr, "per_dtr_space", dest_size);
13721256Syl150051 		__HAL_AUX_ENTRY(key, channel->per_dtr_space, "%u");
1373*6937Sxw161283 
1374*6937Sxw161283 		xge_os_strlcpy(dest_addr, "usage_cnt", dest_size);
13753115Syl150051 		__HAL_AUX_ENTRY(key, channel->usage_cnt, "%u");
13761256Syl150051 	}
13771256Syl150051 
13781256Syl150051 	__HAL_AUX_ENTRY_END(bufsize, retsize);
13791256Syl150051 
13801256Syl150051 	return XGE_HAL_OK;
13811256Syl150051 }
13821256Syl150051 
13831256Syl150051 /**
13841256Syl150051  * xge_hal_aux_device_dump - Dump driver "about" info and device state.
13851256Syl150051  * @devh: HAL device handle.
13861256Syl150051  *
13871256Syl150051  * Dump driver & device "about" info and device state,
13881256Syl150051  * including all BAR0 registers, hardware and software statistics, PCI
13891256Syl150051  * configuration space.
13901256Syl150051  * See also: xge_hal_aux_about_read(), xge_hal_mgmt_reg_read(),
13911256Syl150051  * xge_hal_aux_pci_config_read(), xge_hal_aux_stats_sw_dev_read(),
13921256Syl150051  * xge_hal_aux_stats_tmac_read(), xge_hal_aux_stats_rmac_read(),
13931256Syl150051  * xge_hal_aux_channel_read(), xge_hal_aux_stats_hal_read().
13941256Syl150051  * Returns:
13951256Syl150051  * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
13961256Syl150051  * XGE_HAL_ERR_OUT_OF_SPACE - Buffer size is very small.
13971256Syl150051  */
13981256Syl150051 xge_hal_status_e
xge_hal_aux_device_dump(xge_hal_device_h devh)13991256Syl150051 xge_hal_aux_device_dump(xge_hal_device_h devh)
14001256Syl150051 {
14011256Syl150051 	xge_hal_device_t *hldev = (xge_hal_device_t*)devh;
14021256Syl150051 	xge_hal_status_e status;
14031256Syl150051 	int retsize;
14041256Syl150051 	int offset;
14051256Syl150051 	u64 retval;
14061256Syl150051 
14071256Syl150051 	xge_assert(hldev->dump_buf != NULL);
14081256Syl150051 
14091256Syl150051 	xge_os_println("********* xge DEVICE DUMP BEGIN **********");
14101256Syl150051 
14111256Syl150051 	status = xge_hal_aux_about_read(hldev, XGE_HAL_DUMP_BUF_SIZE,
14121256Syl150051 	                                hldev->dump_buf,
14131256Syl150051 	                                &retsize);
14141256Syl150051 	if (status != XGE_HAL_OK) {
14151256Syl150051 		goto error;
14161256Syl150051 	}
14171256Syl150051 	xge_os_println(hldev->dump_buf);
14181256Syl150051 
14191256Syl150051 
14201256Syl150051 	for (offset = 0; offset < 1574; offset++) {
14211256Syl150051 
14221256Syl150051 		status = xge_hal_mgmt_reg_read(hldev, 0, offset*8, &retval);
14231256Syl150051 		if (status != XGE_HAL_OK) {
14241256Syl150051 			goto error;
14251256Syl150051 		}
14261256Syl150051 
14271256Syl150051 		if (!retval) continue;
14281256Syl150051 
14291256Syl150051 		xge_os_printf("0x%04x 0x%08x%08x", offset*8,
14301256Syl150051 					(u32)(retval>>32), (u32)retval);
14311256Syl150051 	}
14321256Syl150051 	xge_os_println("\n");
14331256Syl150051 
14341256Syl150051 	status = xge_hal_aux_pci_config_read(hldev, XGE_HAL_DUMP_BUF_SIZE,
14351256Syl150051 	                                     hldev->dump_buf,
14361256Syl150051 	                                     &retsize);
14371256Syl150051 	if (status != XGE_HAL_OK) {
14381256Syl150051 		goto error;
14391256Syl150051 	}
14401256Syl150051 	xge_os_println(hldev->dump_buf);
14411256Syl150051 
14421256Syl150051 	status = xge_hal_aux_stats_tmac_read(hldev, XGE_HAL_DUMP_BUF_SIZE,
14431256Syl150051 	                                     hldev->dump_buf,
14441256Syl150051 	                                     &retsize);
14451256Syl150051 	if (status != XGE_HAL_OK) {
14461256Syl150051 		goto error;
14471256Syl150051 	}
14481256Syl150051 	xge_os_println(hldev->dump_buf);
14491256Syl150051 
14501256Syl150051 	status = xge_hal_aux_stats_rmac_read(hldev, XGE_HAL_DUMP_BUF_SIZE,
14511256Syl150051 	                                     hldev->dump_buf,
14521256Syl150051 	                                     &retsize);
14531256Syl150051 	if (status != XGE_HAL_OK) {
14541256Syl150051 		goto error;
14551256Syl150051 	}
14561256Syl150051 	xge_os_println(hldev->dump_buf);
14571256Syl150051 
14581256Syl150051 	status = xge_hal_aux_stats_pci_read(hldev, XGE_HAL_DUMP_BUF_SIZE,
14591256Syl150051 	                                    hldev->dump_buf,
14601256Syl150051 	                                    &retsize);
14611256Syl150051 	if (status != XGE_HAL_OK) {
14621256Syl150051 		goto error;
14631256Syl150051 	}
14641256Syl150051 	xge_os_println(hldev->dump_buf);
14651256Syl150051 
14661256Syl150051 	if (xge_hal_device_check_id(hldev) == XGE_HAL_CARD_HERC) {
14671256Syl150051 		status = xge_hal_aux_stats_herc_enchanced(hldev,
14681256Syl150051 			     XGE_HAL_DUMP_BUF_SIZE, hldev->dump_buf, &retsize);
14691256Syl150051 		if (status != XGE_HAL_OK) {
14701256Syl150051 			goto error;
14711256Syl150051 		}
14721256Syl150051 		xge_os_println(hldev->dump_buf);
14731256Syl150051 	}
14741256Syl150051 
14751256Syl150051 	status = xge_hal_aux_stats_sw_dev_read(hldev, XGE_HAL_DUMP_BUF_SIZE,
14761256Syl150051 					     hldev->dump_buf, &retsize);
14771256Syl150051 	if (status != XGE_HAL_OK) {
14781256Syl150051 		goto error;
14791256Syl150051 	}
14801256Syl150051 	xge_os_println(hldev->dump_buf);
14811256Syl150051 
14821256Syl150051 	status = xge_hal_aux_channel_read(hldev, XGE_HAL_DUMP_BUF_SIZE,
14831256Syl150051 	                                  hldev->dump_buf,
14841256Syl150051 	                                  &retsize);
14851256Syl150051 	if (status != XGE_HAL_OK) {
14861256Syl150051 		goto error;
14871256Syl150051 	}
14881256Syl150051 	xge_os_println(hldev->dump_buf);
14891256Syl150051 
14901256Syl150051 	status = xge_hal_aux_stats_hal_read(hldev, XGE_HAL_DUMP_BUF_SIZE,
14911256Syl150051 	                                    hldev->dump_buf,
14921256Syl150051 	                                    &retsize);
14931256Syl150051 	if (status != XGE_HAL_OK) {
14941256Syl150051 		goto error;
14951256Syl150051 	}
14961256Syl150051 	xge_os_println(hldev->dump_buf);
14971256Syl150051 
14981256Syl150051 	xge_os_println("********* XFRAME DEVICE DUMP END **********");
14991256Syl150051 
15001256Syl150051 error:
15011256Syl150051 	return status;
15021256Syl150051 }
15031256Syl150051 
15041256Syl150051 
15051256Syl150051 /**
15061256Syl150051  * xge_hal_aux_driver_config_read - Read Driver configuration.
15071256Syl150051  * @bufsize: Buffer size.
15081256Syl150051  * @retbuf: Buffer pointer.
15091256Syl150051  * @retsize: Size of the result. Cannot be greater than @bufsize.
15101256Syl150051  *
15111256Syl150051  * Read driver configuration,
15121256Syl150051  *
15131256Syl150051  * Returns: XGE_HAL_OK - success.
15141256Syl150051  * XGE_HAL_ERR_VERSION_CONFLICT - Version it not maching.
15151256Syl150051  *
15161256Syl150051  * See also: xge_hal_aux_device_config_read().
15171256Syl150051  */
15181256Syl150051 xge_hal_status_e
xge_hal_aux_driver_config_read(int bufsize,char * retbuf,int * retsize)15191256Syl150051 xge_hal_aux_driver_config_read(int bufsize, char *retbuf, int *retsize)
15201256Syl150051 {
15211256Syl150051 	xge_hal_status_e status;
15221256Syl150051 	xge_hal_driver_config_t  drv_config;
15231256Syl150051 	__HAL_AUX_ENTRY_DECLARE(bufsize, retbuf);
15241256Syl150051 
15251256Syl150051 	status = xge_hal_mgmt_driver_config(&drv_config,
15261256Syl150051 					  sizeof(xge_hal_driver_config_t));
15271256Syl150051 	if (status != XGE_HAL_OK) {
15281256Syl150051 		return status;
15291256Syl150051 	}
15301256Syl150051 
15311256Syl150051 	__HAL_AUX_ENTRY("queue size initial",
15321256Syl150051 			drv_config.queue_size_initial, "%u");
15331256Syl150051 	__HAL_AUX_ENTRY("queue size max", drv_config.queue_size_max, "%u");
15341256Syl150051 	__HAL_AUX_ENTRY_END(bufsize, retsize);
15351256Syl150051 
15361256Syl150051 	return XGE_HAL_OK;
15371256Syl150051 }
15381256Syl150051 
15391256Syl150051 
15401256Syl150051 /**
15411256Syl150051  * xge_hal_aux_device_config_read - Read device configuration.
15421256Syl150051  * @devh: HAL device handle.
15431256Syl150051  * @bufsize: Buffer size.
15441256Syl150051  * @retbuf: Buffer pointer.
15451256Syl150051  * @retsize: Size of the result. Cannot be greater than @bufsize.
15461256Syl150051  *
15471256Syl150051  * Read device configuration,
15481256Syl150051  *
15491256Syl150051  * Returns: XGE_HAL_OK - success.
15501256Syl150051  * XGE_HAL_ERR_INVALID_DEVICE - Device is not valid.
15511256Syl150051  * XGE_HAL_ERR_VERSION_CONFLICT - Version it not maching.
15521256Syl150051  *
15531256Syl150051  * See also: xge_hal_aux_driver_config_read().
15541256Syl150051  */
xge_hal_aux_device_config_read(xge_hal_device_h devh,int bufsize,char * retbuf,int * retsize)15551256Syl150051 xge_hal_status_e xge_hal_aux_device_config_read(xge_hal_device_h devh,
15561256Syl150051 				int bufsize, char *retbuf, int *retsize)
15571256Syl150051 {
1558*6937Sxw161283 	int i, j;
15591256Syl150051 	xge_hal_status_e status;
1560*6937Sxw161283 	xge_hal_device_config_t *dev_config;
1561*6937Sxw161283 	xge_hal_ring_queue_t *ring;
1562*6937Sxw161283 	xge_hal_fifo_queue_t *fifo;
1563*6937Sxw161283 	xge_hal_rti_config_t *rti;
1564*6937Sxw161283 	xge_hal_tti_config_t *tti;
1565*6937Sxw161283 	xge_hal_mac_config_t *mac;
1566*6937Sxw161283 
1567*6937Sxw161283 	int dest_size;
1568*6937Sxw161283 	char *dest_addr;
15691256Syl150051 	char key[XGE_OS_SPRINTF_STRLEN];
1570*6937Sxw161283 
1571*6937Sxw161283 	xge_hal_device_t *hldev = (xge_hal_device_t*)devh;
15721256Syl150051 	__HAL_AUX_ENTRY_DECLARE(bufsize, retbuf);
15731256Syl150051 
1574*6937Sxw161283 	dev_config = (xge_hal_device_config_t *) xge_os_malloc(hldev->pdev,
1575*6937Sxw161283 										sizeof(xge_hal_device_config_t));
1576*6937Sxw161283 	if (dev_config == NULL) {
1577*6937Sxw161283 		return XGE_HAL_FAIL;
1578*6937Sxw161283 	}
1579*6937Sxw161283 
1580*6937Sxw161283 	status = xge_hal_mgmt_device_config(devh, dev_config,
15811256Syl150051 					  sizeof(xge_hal_device_config_t));
15821256Syl150051 	if (status != XGE_HAL_OK) {
1583*6937Sxw161283 		xge_os_free(hldev->pdev, dev_config,
1584*6937Sxw161283 			    sizeof(xge_hal_device_config_t));
15851256Syl150051 		return status;
15861256Syl150051 	}
15871256Syl150051 
1588*6937Sxw161283 	__HAL_AUX_ENTRY("mtu", dev_config->mtu, "%u");
1589*6937Sxw161283 	__HAL_AUX_ENTRY("isr_polling_count", dev_config->isr_polling_cnt, "%u");
1590*6937Sxw161283 	__HAL_AUX_ENTRY("latency_timer", dev_config->latency_timer, "%u");
15913115Syl150051 	__HAL_AUX_ENTRY("max_splits_trans",
1592*6937Sxw161283 			dev_config->max_splits_trans, "%u");
1593*6937Sxw161283 	__HAL_AUX_ENTRY("mmrb_count", dev_config->mmrb_count, "%d");
1594*6937Sxw161283 	__HAL_AUX_ENTRY("shared_splits", dev_config->shared_splits, "%u");
15953115Syl150051 	__HAL_AUX_ENTRY("stats_refresh_time_sec",
1596*6937Sxw161283 			dev_config->stats_refresh_time_sec, "%u");
1597*6937Sxw161283 	__HAL_AUX_ENTRY("pci_freq_mherz", dev_config->pci_freq_mherz, "%u");
1598*6937Sxw161283 	__HAL_AUX_ENTRY("intr_mode", dev_config->intr_mode, "%u");
15993115Syl150051 	__HAL_AUX_ENTRY("ring_memblock_size",
1600*6937Sxw161283 			dev_config->ring.memblock_size,  "%u");
16013115Syl150051 
1602*6937Sxw161283 	__HAL_AUX_ENTRY("sched_timer_us", dev_config->sched_timer_us, "%u");
16033115Syl150051 	__HAL_AUX_ENTRY("sched_timer_one_shot",
1604*6937Sxw161283 			dev_config->sched_timer_one_shot,  "%u");
1605*6937Sxw161283 	__HAL_AUX_ENTRY("rxufca_intr_thres", dev_config->rxufca_intr_thres,  "%u");
1606*6937Sxw161283 	__HAL_AUX_ENTRY("rxufca_lo_lim", dev_config->rxufca_lo_lim,  "%u");
1607*6937Sxw161283 	__HAL_AUX_ENTRY("rxufca_hi_lim", dev_config->rxufca_hi_lim,  "%u");
1608*6937Sxw161283 	__HAL_AUX_ENTRY("rxufca_lbolt_period", dev_config->rxufca_lbolt_period,  "%u");
16091256Syl150051 
16101256Syl150051 	for(i = 0; i < XGE_HAL_MAX_RING_NUM;  i++)
16111256Syl150051 	{
1612*6937Sxw161283 		ring = &dev_config->ring.queue[i];
1613*6937Sxw161283 		rti =  &ring->rti;
16141256Syl150051 
16151256Syl150051 		if (!ring->configured)
16161256Syl150051 			continue;
16171256Syl150051 
1618*6937Sxw161283 		(void) xge_os_snprintf(key, sizeof(key), "ring%d_", i);
1619*6937Sxw161283 
1620*6937Sxw161283 		dest_addr = key + strlen(key);
1621*6937Sxw161283 		dest_size = sizeof(key) - strlen(key);
1622*6937Sxw161283 
1623*6937Sxw161283 		xge_os_strlcpy(dest_addr, "inital", dest_size);
16241256Syl150051 		__HAL_AUX_ENTRY(key, ring->initial, "%u");
1625*6937Sxw161283 
1626*6937Sxw161283 		xge_os_strlcpy(dest_addr, "max", dest_size);
16271256Syl150051 		__HAL_AUX_ENTRY(key, ring->max, "%u");
1628*6937Sxw161283 
1629*6937Sxw161283 		xge_os_strlcpy(dest_addr, "buffer_mode", dest_size);
16301256Syl150051 		__HAL_AUX_ENTRY(key, ring->buffer_mode, "%u");
1631*6937Sxw161283 
1632*6937Sxw161283 		xge_os_strlcpy(dest_addr, "dram_size_mb", dest_size);
16331256Syl150051 		__HAL_AUX_ENTRY(key, ring->dram_size_mb, "%u");
1634*6937Sxw161283 
1635*6937Sxw161283 		xge_os_strlcpy(dest_addr, "backoff_interval_us", dest_size);
16361256Syl150051 		__HAL_AUX_ENTRY(key, ring->backoff_interval_us, "%u");
1637*6937Sxw161283 
1638*6937Sxw161283 		xge_os_strlcpy(dest_addr, "max_frame_len", dest_size);
16391256Syl150051 		__HAL_AUX_ENTRY(key, ring->max_frm_len, "%d");
1640*6937Sxw161283 
1641*6937Sxw161283 		xge_os_strlcpy(dest_addr, "priority", dest_size);
16421256Syl150051 		__HAL_AUX_ENTRY(key, ring->priority,  "%u");
1643*6937Sxw161283 
1644*6937Sxw161283 		xge_os_strlcpy(dest_addr, "rth_en", dest_size);
16451256Syl150051 		__HAL_AUX_ENTRY(key, ring->rth_en,  "%u");
1646*6937Sxw161283 
1647*6937Sxw161283 		xge_os_strlcpy(dest_addr, "no_snoop_bits", dest_size);
16481256Syl150051 		__HAL_AUX_ENTRY(key, ring->no_snoop_bits,  "%u");
1649*6937Sxw161283 
1650*6937Sxw161283 		xge_os_strlcpy(dest_addr, "indicate_max_pkts", dest_size);
16513115Syl150051 		__HAL_AUX_ENTRY(key, ring->indicate_max_pkts,  "%u");
16523115Syl150051 
1653*6937Sxw161283 		xge_os_strlcpy(dest_addr, "urange_a", dest_size);
16541256Syl150051 		__HAL_AUX_ENTRY(key, rti->urange_a,  "%u");
1655*6937Sxw161283 
1656*6937Sxw161283 		xge_os_strlcpy(dest_addr, "ufc_a", dest_size);
16571256Syl150051 		__HAL_AUX_ENTRY(key, rti->ufc_a,  "%u");
1658*6937Sxw161283 
1659*6937Sxw161283 		xge_os_strlcpy(dest_addr, "urange_b", dest_size);
16601256Syl150051 		__HAL_AUX_ENTRY(key, rti->urange_b,  "%u");
1661*6937Sxw161283 
1662*6937Sxw161283 		xge_os_strlcpy(dest_addr, "ufc_b", dest_size);
16631256Syl150051 		__HAL_AUX_ENTRY(key, rti->ufc_b,  "%u");
1664*6937Sxw161283 
1665*6937Sxw161283 		xge_os_strlcpy(dest_addr, "urange_c", dest_size);
16661256Syl150051 		__HAL_AUX_ENTRY(key, rti->urange_c,  "%u");
1667*6937Sxw161283 
1668*6937Sxw161283 		xge_os_strlcpy(dest_addr, "ufc_c", dest_size);
16691256Syl150051 		__HAL_AUX_ENTRY(key, rti->ufc_c,  "%u");
1670*6937Sxw161283 
1671*6937Sxw161283 		xge_os_strlcpy(dest_addr, "ufc_d", dest_size);
16721256Syl150051 		__HAL_AUX_ENTRY(key, rti->ufc_d,  "%u");
1673*6937Sxw161283 
1674*6937Sxw161283 		xge_os_strlcpy(dest_addr, "timer_val_us", dest_size);
16751256Syl150051 		__HAL_AUX_ENTRY(key, rti->timer_val_us,  "%u");
16761256Syl150051 	}
16771256Syl150051 
16783115Syl150051 
16791256Syl150051 	{
1680*6937Sxw161283 		mac= &dev_config->mac;
16811256Syl150051 
16823115Syl150051 		__HAL_AUX_ENTRY("tmac_util_period",
16831256Syl150051 				mac->tmac_util_period, "%u");
16843115Syl150051 		__HAL_AUX_ENTRY("rmac_util_period",
16851256Syl150051 				mac->rmac_util_period, "%u");
16863115Syl150051 		__HAL_AUX_ENTRY("rmac_bcast_en",
16871256Syl150051 				mac->rmac_bcast_en, "%u");
16883115Syl150051 		__HAL_AUX_ENTRY("rmac_pause_gen_en",
16891256Syl150051 				mac->rmac_pause_gen_en, "%d");
16903115Syl150051 		__HAL_AUX_ENTRY("rmac_pause_rcv_en",
16911256Syl150051 				mac->rmac_pause_rcv_en, "%d");
16923115Syl150051 		__HAL_AUX_ENTRY("rmac_pause_time",
16931256Syl150051 				mac->rmac_pause_time, "%u");
16943115Syl150051 		__HAL_AUX_ENTRY("mc_pause_threshold_q0q3",
16951256Syl150051 				mac->mc_pause_threshold_q0q3, "%u");
16963115Syl150051 		__HAL_AUX_ENTRY("mc_pause_threshold_q4q7",
16971256Syl150051 				mac->mc_pause_threshold_q4q7, "%u");
16981256Syl150051 	}
16991256Syl150051 
17001256Syl150051 
1701*6937Sxw161283 	__HAL_AUX_ENTRY("fifo_max_frags",
1702*6937Sxw161283 	    dev_config->fifo.max_frags, "%u");
17033115Syl150051 	__HAL_AUX_ENTRY("fifo_reserve_threshold",
1704*6937Sxw161283 			dev_config->fifo.reserve_threshold, "%u");
17053115Syl150051 	__HAL_AUX_ENTRY("fifo_memblock_size",
1706*6937Sxw161283 			dev_config->fifo.memblock_size, "%u");
17071256Syl150051 #ifdef XGE_HAL_ALIGN_XMIT
17083115Syl150051 	__HAL_AUX_ENTRY("fifo_alignment_size",
1709*6937Sxw161283 			dev_config->fifo.alignment_size, "%u");
17101256Syl150051 #endif
17111256Syl150051 
17123115Syl150051 	for (i = 0; i < XGE_HAL_MAX_FIFO_NUM;  i++) {
1713*6937Sxw161283 		fifo = &dev_config->fifo.queue[i];
17141256Syl150051 
17151256Syl150051 		if (!fifo->configured)
17161256Syl150051 			continue;
17171256Syl150051 
1718*6937Sxw161283 		(void) xge_os_snprintf(key, sizeof(key), "fifo%d_", i);
1719*6937Sxw161283 
1720*6937Sxw161283 		dest_addr = key + strlen(key);
1721*6937Sxw161283 		dest_size = sizeof(key) - strlen(key);
1722*6937Sxw161283 
1723*6937Sxw161283 		xge_os_strlcpy(dest_addr, "initial", dest_size);
17241256Syl150051 		__HAL_AUX_ENTRY(key, fifo->initial, "%u");
1725*6937Sxw161283 
1726*6937Sxw161283 		xge_os_strlcpy(dest_addr, "max", dest_size);
17271256Syl150051 		__HAL_AUX_ENTRY(key, fifo->max, "%u");
1728*6937Sxw161283 
1729*6937Sxw161283 		xge_os_strlcpy(dest_addr, "intr", dest_size);
17301256Syl150051 		__HAL_AUX_ENTRY(key, fifo->intr, "%u");
1731*6937Sxw161283 
1732*6937Sxw161283 		xge_os_strlcpy(dest_addr, "no_snoop_bits", dest_size);
17331256Syl150051 		__HAL_AUX_ENTRY(key, fifo->no_snoop_bits, "%u");
17343115Syl150051 
17353115Syl150051 		for (j = 0; j < XGE_HAL_MAX_FIFO_TTI_NUM; j++) {
1736*6937Sxw161283 			tti = &dev_config->fifo.queue[i].tti[j];
17373115Syl150051 			if (!tti->enabled)
17383115Syl150051 				continue;
17393115Syl150051 
1740*6937Sxw161283 			(void) xge_os_snprintf(key, sizeof(key), "fifo%d_tti%02d_", i,
17413115Syl150051 				i * XGE_HAL_MAX_FIFO_TTI_NUM + j);
1742*6937Sxw161283 
1743*6937Sxw161283 			dest_addr = key + strlen(key);
1744*6937Sxw161283 			dest_size = sizeof(key) - strlen(key);
1745*6937Sxw161283 
1746*6937Sxw161283 			xge_os_strlcpy(dest_addr, "urange_a", dest_size);
17473115Syl150051 			__HAL_AUX_ENTRY(key, tti->urange_a, "%u");
1748*6937Sxw161283 
1749*6937Sxw161283 			xge_os_strlcpy(dest_addr, "ufc_a", dest_size);
17503115Syl150051 			__HAL_AUX_ENTRY(key, tti->ufc_a, "%u");
1751*6937Sxw161283 
1752*6937Sxw161283 			xge_os_strlcpy(dest_addr, "urange_b", dest_size);
17533115Syl150051 			__HAL_AUX_ENTRY(key, tti->urange_b, "%u");
1754*6937Sxw161283 
1755*6937Sxw161283 			xge_os_strlcpy(dest_addr, "ufc_b", dest_size);
17563115Syl150051 			__HAL_AUX_ENTRY(key, tti->ufc_b, "%u");
1757*6937Sxw161283 
1758*6937Sxw161283 			xge_os_strlcpy(dest_addr, "urange_c", dest_size);
17593115Syl150051 			__HAL_AUX_ENTRY(key, tti->urange_c, "%u");
1760*6937Sxw161283 
1761*6937Sxw161283 			xge_os_strlcpy(dest_addr, "ufc_c", dest_size);
17623115Syl150051 			__HAL_AUX_ENTRY(key, tti->ufc_c, "%u");
1763*6937Sxw161283 
1764*6937Sxw161283 			xge_os_strlcpy(dest_addr, "ufc_d", dest_size);
17653115Syl150051 			__HAL_AUX_ENTRY(key, tti->ufc_d, "%u");
1766*6937Sxw161283 
1767*6937Sxw161283 			xge_os_strlcpy(dest_addr, "timer_val_us", dest_size);
17683115Syl150051 			__HAL_AUX_ENTRY(key, tti->timer_val_us, "%u");
1769*6937Sxw161283 
1770*6937Sxw161283 			xge_os_strlcpy(dest_addr, "timer_ci_en", dest_size);
17713115Syl150051 			__HAL_AUX_ENTRY(key, tti->timer_ci_en, "%u");
17723115Syl150051 		}
17731256Syl150051 	}
17743115Syl150051 
17753115Syl150051 	/* and bimodal TTIs */
17763115Syl150051 	for (i=0; i<XGE_HAL_MAX_RING_NUM; i++) {
1777*6937Sxw161283 		tti = &hldev->bimodal_tti[i];
17783115Syl150051 		if (!tti->enabled)
17793115Syl150051 			continue;
17803115Syl150051 
1781*6937Sxw161283 		(void) xge_os_snprintf(key, sizeof(key), "tti%02d_",
17823115Syl150051 			      XGE_HAL_MAX_FIFO_TTI_RING_0 + i);
17833115Syl150051 
1784*6937Sxw161283 		dest_addr = key + strlen(key);
1785*6937Sxw161283 		dest_size = sizeof(key) - strlen(key);
1786*6937Sxw161283 
1787*6937Sxw161283 		xge_os_strlcpy(dest_addr, "urange_a", dest_size);
17883115Syl150051 		__HAL_AUX_ENTRY(key, tti->urange_a, "%u");
1789*6937Sxw161283 
1790*6937Sxw161283 		xge_os_strlcpy(dest_addr, "ufc_a", dest_size);
17913115Syl150051 		__HAL_AUX_ENTRY(key, tti->ufc_a, "%u");
1792*6937Sxw161283 
1793*6937Sxw161283 		xge_os_strlcpy(dest_addr, "urange_b", dest_size);
17943115Syl150051 		__HAL_AUX_ENTRY(key, tti->urange_b, "%u");
1795*6937Sxw161283 
1796*6937Sxw161283 		xge_os_strlcpy(dest_addr, "ufc_b", dest_size);
17973115Syl150051 		__HAL_AUX_ENTRY(key, tti->ufc_b, "%u");
1798*6937Sxw161283 
1799*6937Sxw161283 		xge_os_strlcpy(dest_addr, "urange_c", dest_size);
18003115Syl150051 		__HAL_AUX_ENTRY(key, tti->urange_c, "%u");
1801*6937Sxw161283 
1802*6937Sxw161283 		xge_os_strlcpy(dest_addr, "ufc_c", dest_size);
18033115Syl150051 		__HAL_AUX_ENTRY(key, tti->ufc_c, "%u");
1804*6937Sxw161283 
1805*6937Sxw161283 		xge_os_strlcpy(dest_addr, "ufc_d", dest_size);
18063115Syl150051 		__HAL_AUX_ENTRY(key, tti->ufc_d, "%u");
1807*6937Sxw161283 
1808*6937Sxw161283 		xge_os_strlcpy(dest_addr, "timer_val_us", dest_size);
18093115Syl150051 		__HAL_AUX_ENTRY(key, tti->timer_val_us, "%u");
1810*6937Sxw161283 
1811*6937Sxw161283 		xge_os_strlcpy(dest_addr, "timer_ac_en", dest_size);
18123115Syl150051 		__HAL_AUX_ENTRY(key, tti->timer_ac_en, "%u");
1813*6937Sxw161283 
1814*6937Sxw161283 		xge_os_strlcpy(dest_addr, "timer_ci_en", dest_size);
18153115Syl150051 		__HAL_AUX_ENTRY(key, tti->timer_ci_en, "%u");
18163115Syl150051 	}
1817*6937Sxw161283 	__HAL_AUX_ENTRY("dump_on_serr", dev_config->dump_on_serr, "%u");
18183115Syl150051 	__HAL_AUX_ENTRY("dump_on_eccerr",
1819*6937Sxw161283 			dev_config->dump_on_eccerr, "%u");
18203115Syl150051 	__HAL_AUX_ENTRY("dump_on_parityerr",
1821*6937Sxw161283 			dev_config->dump_on_parityerr, "%u");
1822*6937Sxw161283 	__HAL_AUX_ENTRY("rth_en", dev_config->rth_en, "%u");
1823*6937Sxw161283 	__HAL_AUX_ENTRY("rth_bucket_size", dev_config->rth_bucket_size, "%u");
18241256Syl150051 
18251256Syl150051 	__HAL_AUX_ENTRY_END(bufsize, retsize);
18261256Syl150051 
1827*6937Sxw161283 	xge_os_free(hldev->pdev, dev_config,
1828*6937Sxw161283 		    sizeof(xge_hal_device_config_t));
1829*6937Sxw161283 
18301256Syl150051 	return XGE_HAL_OK;
18311256Syl150051 }
18321256Syl150051 
1833