Linux Audio

Check our new training course

Loading...
Note: File does not exist in v5.9.
   1// SPDX-License-Identifier: GPL-2.0
   2#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
   3
   4#include <linux/slab.h>
   5
   6#include "qlge.h"
   7
   8/* Read a NIC register from the alternate function. */
   9static u32 ql_read_other_func_reg(struct ql_adapter *qdev,
  10						u32 reg)
  11{
  12	u32 register_to_read;
  13	u32 reg_val;
  14	unsigned int status = 0;
  15
  16	register_to_read = MPI_NIC_REG_BLOCK
  17				| MPI_NIC_READ
  18				| (qdev->alt_func << MPI_NIC_FUNCTION_SHIFT)
  19				| reg;
  20	status = ql_read_mpi_reg(qdev, register_to_read, &reg_val);
  21	if (status != 0)
  22		return 0xffffffff;
  23
  24	return reg_val;
  25}
  26
  27/* Write a NIC register from the alternate function. */
  28static int ql_write_other_func_reg(struct ql_adapter *qdev,
  29					u32 reg, u32 reg_val)
  30{
  31	u32 register_to_read;
  32	int status = 0;
  33
  34	register_to_read = MPI_NIC_REG_BLOCK
  35				| MPI_NIC_READ
  36				| (qdev->alt_func << MPI_NIC_FUNCTION_SHIFT)
  37				| reg;
  38	status = ql_write_mpi_reg(qdev, register_to_read, reg_val);
  39
  40	return status;
  41}
  42
  43static int ql_wait_other_func_reg_rdy(struct ql_adapter *qdev, u32 reg,
  44					u32 bit, u32 err_bit)
  45{
  46	u32 temp;
  47	int count = 10;
  48
  49	while (count) {
  50		temp = ql_read_other_func_reg(qdev, reg);
  51
  52		/* check for errors */
  53		if (temp & err_bit)
  54			return -1;
  55		else if (temp & bit)
  56			return 0;
  57		mdelay(10);
  58		count--;
  59	}
  60	return -1;
  61}
  62
  63static int ql_read_other_func_serdes_reg(struct ql_adapter *qdev, u32 reg,
  64							u32 *data)
  65{
  66	int status;
  67
  68	/* wait for reg to come ready */
  69	status = ql_wait_other_func_reg_rdy(qdev, XG_SERDES_ADDR / 4,
  70						XG_SERDES_ADDR_RDY, 0);
  71	if (status)
  72		goto exit;
  73
  74	/* set up for reg read */
  75	ql_write_other_func_reg(qdev, XG_SERDES_ADDR/4, reg | PROC_ADDR_R);
  76
  77	/* wait for reg to come ready */
  78	status = ql_wait_other_func_reg_rdy(qdev, XG_SERDES_ADDR / 4,
  79						XG_SERDES_ADDR_RDY, 0);
  80	if (status)
  81		goto exit;
  82
  83	/* get the data */
  84	*data = ql_read_other_func_reg(qdev, (XG_SERDES_DATA / 4));
  85exit:
  86	return status;
  87}
  88
  89/* Read out the SERDES registers */
  90static int ql_read_serdes_reg(struct ql_adapter *qdev, u32 reg, u32 *data)
  91{
  92	int status;
  93
  94	/* wait for reg to come ready */
  95	status = ql_wait_reg_rdy(qdev, XG_SERDES_ADDR, XG_SERDES_ADDR_RDY, 0);
  96	if (status)
  97		goto exit;
  98
  99	/* set up for reg read */
 100	ql_write32(qdev, XG_SERDES_ADDR, reg | PROC_ADDR_R);
 101
 102	/* wait for reg to come ready */
 103	status = ql_wait_reg_rdy(qdev, XG_SERDES_ADDR, XG_SERDES_ADDR_RDY, 0);
 104	if (status)
 105		goto exit;
 106
 107	/* get the data */
 108	*data = ql_read32(qdev, XG_SERDES_DATA);
 109exit:
 110	return status;
 111}
 112
 113static void ql_get_both_serdes(struct ql_adapter *qdev, u32 addr,
 114			u32 *direct_ptr, u32 *indirect_ptr,
 115			unsigned int direct_valid, unsigned int indirect_valid)
 116{
 117	unsigned int status;
 118
 119	status = 1;
 120	if (direct_valid)
 121		status = ql_read_serdes_reg(qdev, addr, direct_ptr);
 122	/* Dead fill any failures or invalids. */
 123	if (status)
 124		*direct_ptr = 0xDEADBEEF;
 125
 126	status = 1;
 127	if (indirect_valid)
 128		status = ql_read_other_func_serdes_reg(
 129						qdev, addr, indirect_ptr);
 130	/* Dead fill any failures or invalids. */
 131	if (status)
 132		*indirect_ptr = 0xDEADBEEF;
 133}
 134
 135static int ql_get_serdes_regs(struct ql_adapter *qdev,
 136				struct ql_mpi_coredump *mpi_coredump)
 137{
 138	int status;
 139	unsigned int xfi_direct_valid, xfi_indirect_valid, xaui_direct_valid;
 140	unsigned int xaui_indirect_valid, i;
 141	u32 *direct_ptr, temp;
 142	u32 *indirect_ptr;
 143
 144	xfi_direct_valid = xfi_indirect_valid = 0;
 145	xaui_direct_valid = xaui_indirect_valid = 1;
 146
 147	/* The XAUI needs to be read out per port */
 148	status = ql_read_other_func_serdes_reg(qdev,
 149			XG_SERDES_XAUI_HSS_PCS_START, &temp);
 150	if (status)
 151		temp = XG_SERDES_ADDR_XAUI_PWR_DOWN;
 152
 153	if ((temp & XG_SERDES_ADDR_XAUI_PWR_DOWN) ==
 154				XG_SERDES_ADDR_XAUI_PWR_DOWN)
 155		xaui_indirect_valid = 0;
 156
 157	status = ql_read_serdes_reg(qdev, XG_SERDES_XAUI_HSS_PCS_START, &temp);
 158
 159	if (status)
 160		temp = XG_SERDES_ADDR_XAUI_PWR_DOWN;
 161
 162	if ((temp & XG_SERDES_ADDR_XAUI_PWR_DOWN) ==
 163				XG_SERDES_ADDR_XAUI_PWR_DOWN)
 164		xaui_direct_valid = 0;
 165
 166	/*
 167	 * XFI register is shared so only need to read one
 168	 * functions and then check the bits.
 169	 */
 170	status = ql_read_serdes_reg(qdev, XG_SERDES_ADDR_STS, &temp);
 171	if (status)
 172		temp = 0;
 173
 174	if ((temp & XG_SERDES_ADDR_XFI1_PWR_UP) ==
 175					XG_SERDES_ADDR_XFI1_PWR_UP) {
 176		/* now see if i'm NIC 1 or NIC 2 */
 177		if (qdev->func & 1)
 178			/* I'm NIC 2, so the indirect (NIC1) xfi is up. */
 179			xfi_indirect_valid = 1;
 180		else
 181			xfi_direct_valid = 1;
 182	}
 183	if ((temp & XG_SERDES_ADDR_XFI2_PWR_UP) ==
 184					XG_SERDES_ADDR_XFI2_PWR_UP) {
 185		/* now see if i'm NIC 1 or NIC 2 */
 186		if (qdev->func & 1)
 187			/* I'm NIC 2, so the indirect (NIC1) xfi is up. */
 188			xfi_direct_valid = 1;
 189		else
 190			xfi_indirect_valid = 1;
 191	}
 192
 193	/* Get XAUI_AN register block. */
 194	if (qdev->func & 1) {
 195		/* Function 2 is direct	*/
 196		direct_ptr = mpi_coredump->serdes2_xaui_an;
 197		indirect_ptr = mpi_coredump->serdes_xaui_an;
 198	} else {
 199		/* Function 1 is direct	*/
 200		direct_ptr = mpi_coredump->serdes_xaui_an;
 201		indirect_ptr = mpi_coredump->serdes2_xaui_an;
 202	}
 203
 204	for (i = 0; i <= 0x000000034; i += 4, direct_ptr++, indirect_ptr++)
 205		ql_get_both_serdes(qdev, i, direct_ptr, indirect_ptr,
 206					xaui_direct_valid, xaui_indirect_valid);
 207
 208	/* Get XAUI_HSS_PCS register block. */
 209	if (qdev->func & 1) {
 210		direct_ptr =
 211			mpi_coredump->serdes2_xaui_hss_pcs;
 212		indirect_ptr =
 213			mpi_coredump->serdes_xaui_hss_pcs;
 214	} else {
 215		direct_ptr =
 216			mpi_coredump->serdes_xaui_hss_pcs;
 217		indirect_ptr =
 218			mpi_coredump->serdes2_xaui_hss_pcs;
 219	}
 220
 221	for (i = 0x800; i <= 0x880; i += 4, direct_ptr++, indirect_ptr++)
 222		ql_get_both_serdes(qdev, i, direct_ptr, indirect_ptr,
 223					xaui_direct_valid, xaui_indirect_valid);
 224
 225	/* Get XAUI_XFI_AN register block. */
 226	if (qdev->func & 1) {
 227		direct_ptr = mpi_coredump->serdes2_xfi_an;
 228		indirect_ptr = mpi_coredump->serdes_xfi_an;
 229	} else {
 230		direct_ptr = mpi_coredump->serdes_xfi_an;
 231		indirect_ptr = mpi_coredump->serdes2_xfi_an;
 232	}
 233
 234	for (i = 0x1000; i <= 0x1034; i += 4, direct_ptr++, indirect_ptr++)
 235		ql_get_both_serdes(qdev, i, direct_ptr, indirect_ptr,
 236					xfi_direct_valid, xfi_indirect_valid);
 237
 238	/* Get XAUI_XFI_TRAIN register block. */
 239	if (qdev->func & 1) {
 240		direct_ptr = mpi_coredump->serdes2_xfi_train;
 241		indirect_ptr =
 242			mpi_coredump->serdes_xfi_train;
 243	} else {
 244		direct_ptr = mpi_coredump->serdes_xfi_train;
 245		indirect_ptr =
 246			mpi_coredump->serdes2_xfi_train;
 247	}
 248
 249	for (i = 0x1050; i <= 0x107c; i += 4, direct_ptr++, indirect_ptr++)
 250		ql_get_both_serdes(qdev, i, direct_ptr, indirect_ptr,
 251					xfi_direct_valid, xfi_indirect_valid);
 252
 253	/* Get XAUI_XFI_HSS_PCS register block. */
 254	if (qdev->func & 1) {
 255		direct_ptr =
 256			mpi_coredump->serdes2_xfi_hss_pcs;
 257		indirect_ptr =
 258			mpi_coredump->serdes_xfi_hss_pcs;
 259	} else {
 260		direct_ptr =
 261			mpi_coredump->serdes_xfi_hss_pcs;
 262		indirect_ptr =
 263			mpi_coredump->serdes2_xfi_hss_pcs;
 264	}
 265
 266	for (i = 0x1800; i <= 0x1838; i += 4, direct_ptr++, indirect_ptr++)
 267		ql_get_both_serdes(qdev, i, direct_ptr, indirect_ptr,
 268					xfi_direct_valid, xfi_indirect_valid);
 269
 270	/* Get XAUI_XFI_HSS_TX register block. */
 271	if (qdev->func & 1) {
 272		direct_ptr =
 273			mpi_coredump->serdes2_xfi_hss_tx;
 274		indirect_ptr =
 275			mpi_coredump->serdes_xfi_hss_tx;
 276	} else {
 277		direct_ptr = mpi_coredump->serdes_xfi_hss_tx;
 278		indirect_ptr =
 279			mpi_coredump->serdes2_xfi_hss_tx;
 280	}
 281	for (i = 0x1c00; i <= 0x1c1f; i++, direct_ptr++, indirect_ptr++)
 282		ql_get_both_serdes(qdev, i, direct_ptr, indirect_ptr,
 283					xfi_direct_valid, xfi_indirect_valid);
 284
 285	/* Get XAUI_XFI_HSS_RX register block. */
 286	if (qdev->func & 1) {
 287		direct_ptr =
 288			mpi_coredump->serdes2_xfi_hss_rx;
 289		indirect_ptr =
 290			mpi_coredump->serdes_xfi_hss_rx;
 291	} else {
 292		direct_ptr = mpi_coredump->serdes_xfi_hss_rx;
 293		indirect_ptr =
 294			mpi_coredump->serdes2_xfi_hss_rx;
 295	}
 296
 297	for (i = 0x1c40; i <= 0x1c5f; i++, direct_ptr++, indirect_ptr++)
 298		ql_get_both_serdes(qdev, i, direct_ptr, indirect_ptr,
 299					xfi_direct_valid, xfi_indirect_valid);
 300
 301
 302	/* Get XAUI_XFI_HSS_PLL register block. */
 303	if (qdev->func & 1) {
 304		direct_ptr =
 305			mpi_coredump->serdes2_xfi_hss_pll;
 306		indirect_ptr =
 307			mpi_coredump->serdes_xfi_hss_pll;
 308	} else {
 309		direct_ptr =
 310			mpi_coredump->serdes_xfi_hss_pll;
 311		indirect_ptr =
 312			mpi_coredump->serdes2_xfi_hss_pll;
 313	}
 314	for (i = 0x1e00; i <= 0x1e1f; i++, direct_ptr++, indirect_ptr++)
 315		ql_get_both_serdes(qdev, i, direct_ptr, indirect_ptr,
 316					xfi_direct_valid, xfi_indirect_valid);
 317	return 0;
 318}
 319
 320static int ql_read_other_func_xgmac_reg(struct ql_adapter *qdev, u32 reg,
 321							u32 *data)
 322{
 323	int status = 0;
 324
 325	/* wait for reg to come ready */
 326	status = ql_wait_other_func_reg_rdy(qdev, XGMAC_ADDR / 4,
 327						XGMAC_ADDR_RDY, XGMAC_ADDR_XME);
 328	if (status)
 329		goto exit;
 330
 331	/* set up for reg read */
 332	ql_write_other_func_reg(qdev, XGMAC_ADDR / 4, reg | XGMAC_ADDR_R);
 333
 334	/* wait for reg to come ready */
 335	status = ql_wait_other_func_reg_rdy(qdev, XGMAC_ADDR / 4,
 336						XGMAC_ADDR_RDY, XGMAC_ADDR_XME);
 337	if (status)
 338		goto exit;
 339
 340	/* get the data */
 341	*data = ql_read_other_func_reg(qdev, XGMAC_DATA / 4);
 342exit:
 343	return status;
 344}
 345
 346/* Read the 400 xgmac control/statistics registers
 347 * skipping unused locations.
 348 */
 349static int ql_get_xgmac_regs(struct ql_adapter *qdev, u32 *buf,
 350					unsigned int other_function)
 351{
 352	int status = 0;
 353	int i;
 354
 355	for (i = PAUSE_SRC_LO; i < XGMAC_REGISTER_END; i += 4, buf++) {
 356		/* We're reading 400 xgmac registers, but we filter out
 357		 * serveral locations that are non-responsive to reads.
 358		 */
 359		if ((i == 0x00000114) ||
 360			(i == 0x00000118) ||
 361			(i == 0x0000013c) ||
 362			(i == 0x00000140) ||
 363			(i > 0x00000150 && i < 0x000001fc) ||
 364			(i > 0x00000278 && i < 0x000002a0) ||
 365			(i > 0x000002c0 && i < 0x000002cf) ||
 366			(i > 0x000002dc && i < 0x000002f0) ||
 367			(i > 0x000003c8 && i < 0x00000400) ||
 368			(i > 0x00000400 && i < 0x00000410) ||
 369			(i > 0x00000410 && i < 0x00000420) ||
 370			(i > 0x00000420 && i < 0x00000430) ||
 371			(i > 0x00000430 && i < 0x00000440) ||
 372			(i > 0x00000440 && i < 0x00000450) ||
 373			(i > 0x00000450 && i < 0x00000500) ||
 374			(i > 0x0000054c && i < 0x00000568) ||
 375			(i > 0x000005c8 && i < 0x00000600)) {
 376			if (other_function)
 377				status =
 378				ql_read_other_func_xgmac_reg(qdev, i, buf);
 379			else
 380				status = ql_read_xgmac_reg(qdev, i, buf);
 381
 382			if (status)
 383				*buf = 0xdeadbeef;
 384			break;
 385		}
 386	}
 387	return status;
 388}
 389
 390static int ql_get_ets_regs(struct ql_adapter *qdev, u32 *buf)
 391{
 392	int status = 0;
 393	int i;
 394
 395	for (i = 0; i < 8; i++, buf++) {
 396		ql_write32(qdev, NIC_ETS, i << 29 | 0x08000000);
 397		*buf = ql_read32(qdev, NIC_ETS);
 398	}
 399
 400	for (i = 0; i < 2; i++, buf++) {
 401		ql_write32(qdev, CNA_ETS, i << 29 | 0x08000000);
 402		*buf = ql_read32(qdev, CNA_ETS);
 403	}
 404
 405	return status;
 406}
 407
 408static void ql_get_intr_states(struct ql_adapter *qdev, u32 *buf)
 409{
 410	int i;
 411
 412	for (i = 0; i < qdev->rx_ring_count; i++, buf++) {
 413		ql_write32(qdev, INTR_EN,
 414				qdev->intr_context[i].intr_read_mask);
 415		*buf = ql_read32(qdev, INTR_EN);
 416	}
 417}
 418
 419static int ql_get_cam_entries(struct ql_adapter *qdev, u32 *buf)
 420{
 421	int i, status;
 422	u32 value[3];
 423
 424	status = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
 425	if (status)
 426		return status;
 427
 428	for (i = 0; i < 16; i++) {
 429		status = ql_get_mac_addr_reg(qdev,
 430					MAC_ADDR_TYPE_CAM_MAC, i, value);
 431		if (status) {
 432			netif_err(qdev, drv, qdev->ndev,
 433				  "Failed read of mac index register\n");
 434			goto err;
 435		}
 436		*buf++ = value[0];	/* lower MAC address */
 437		*buf++ = value[1];	/* upper MAC address */
 438		*buf++ = value[2];	/* output */
 439	}
 440	for (i = 0; i < 32; i++) {
 441		status = ql_get_mac_addr_reg(qdev,
 442					MAC_ADDR_TYPE_MULTI_MAC, i, value);
 443		if (status) {
 444			netif_err(qdev, drv, qdev->ndev,
 445				  "Failed read of mac index register\n");
 446			goto err;
 447		}
 448		*buf++ = value[0];	/* lower Mcast address */
 449		*buf++ = value[1];	/* upper Mcast address */
 450	}
 451err:
 452	ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
 453	return status;
 454}
 455
 456static int ql_get_routing_entries(struct ql_adapter *qdev, u32 *buf)
 457{
 458	int status;
 459	u32 value, i;
 460
 461	status = ql_sem_spinlock(qdev, SEM_RT_IDX_MASK);
 462	if (status)
 463		return status;
 464
 465	for (i = 0; i < 16; i++) {
 466		status = ql_get_routing_reg(qdev, i, &value);
 467		if (status) {
 468			netif_err(qdev, drv, qdev->ndev,
 469				  "Failed read of routing index register\n");
 470			goto err;
 471		} else {
 472			*buf++ = value;
 473		}
 474	}
 475err:
 476	ql_sem_unlock(qdev, SEM_RT_IDX_MASK);
 477	return status;
 478}
 479
 480/* Read the MPI Processor shadow registers */
 481static int ql_get_mpi_shadow_regs(struct ql_adapter *qdev, u32 *buf)
 482{
 483	u32 i;
 484	int status;
 485
 486	for (i = 0; i < MPI_CORE_SH_REGS_CNT; i++, buf++) {
 487		status = ql_write_mpi_reg(qdev, RISC_124,
 488				(SHADOW_OFFSET | i << SHADOW_REG_SHIFT));
 489		if (status)
 490			goto end;
 491		status = ql_read_mpi_reg(qdev, RISC_127, buf);
 492		if (status)
 493			goto end;
 494	}
 495end:
 496	return status;
 497}
 498
 499/* Read the MPI Processor core registers */
 500static int ql_get_mpi_regs(struct ql_adapter *qdev, u32 *buf,
 501				u32 offset, u32 count)
 502{
 503	int i, status = 0;
 504	for (i = 0; i < count; i++, buf++) {
 505		status = ql_read_mpi_reg(qdev, offset + i, buf);
 506		if (status)
 507			return status;
 508	}
 509	return status;
 510}
 511
 512/* Read the ASIC probe dump */
 513static unsigned int *ql_get_probe(struct ql_adapter *qdev, u32 clock,
 514					u32 valid, u32 *buf)
 515{
 516	u32 module, mux_sel, probe, lo_val, hi_val;
 517
 518	for (module = 0; module < PRB_MX_ADDR_MAX_MODS; module++) {
 519		if (!((valid >> module) & 1))
 520			continue;
 521		for (mux_sel = 0; mux_sel < PRB_MX_ADDR_MAX_MUX; mux_sel++) {
 522			probe = clock
 523				| PRB_MX_ADDR_ARE
 524				| mux_sel
 525				| (module << PRB_MX_ADDR_MOD_SEL_SHIFT);
 526			ql_write32(qdev, PRB_MX_ADDR, probe);
 527			lo_val = ql_read32(qdev, PRB_MX_DATA);
 528			if (mux_sel == 0) {
 529				*buf = probe;
 530				buf++;
 531			}
 532			probe |= PRB_MX_ADDR_UP;
 533			ql_write32(qdev, PRB_MX_ADDR, probe);
 534			hi_val = ql_read32(qdev, PRB_MX_DATA);
 535			*buf = lo_val;
 536			buf++;
 537			*buf = hi_val;
 538			buf++;
 539		}
 540	}
 541	return buf;
 542}
 543
 544static int ql_get_probe_dump(struct ql_adapter *qdev, unsigned int *buf)
 545{
 546	/* First we have to enable the probe mux */
 547	ql_write_mpi_reg(qdev, MPI_TEST_FUNC_PRB_CTL, MPI_TEST_FUNC_PRB_EN);
 548	buf = ql_get_probe(qdev, PRB_MX_ADDR_SYS_CLOCK,
 549			PRB_MX_ADDR_VALID_SYS_MOD, buf);
 550	buf = ql_get_probe(qdev, PRB_MX_ADDR_PCI_CLOCK,
 551			PRB_MX_ADDR_VALID_PCI_MOD, buf);
 552	buf = ql_get_probe(qdev, PRB_MX_ADDR_XGM_CLOCK,
 553			PRB_MX_ADDR_VALID_XGM_MOD, buf);
 554	buf = ql_get_probe(qdev, PRB_MX_ADDR_FC_CLOCK,
 555			PRB_MX_ADDR_VALID_FC_MOD, buf);
 556	return 0;
 557
 558}
 559
 560/* Read out the routing index registers */
 561static int ql_get_routing_index_registers(struct ql_adapter *qdev, u32 *buf)
 562{
 563	int status;
 564	u32 type, index, index_max;
 565	u32 result_index;
 566	u32 result_data;
 567	u32 val;
 568
 569	status = ql_sem_spinlock(qdev, SEM_RT_IDX_MASK);
 570	if (status)
 571		return status;
 572
 573	for (type = 0; type < 4; type++) {
 574		if (type < 2)
 575			index_max = 8;
 576		else
 577			index_max = 16;
 578		for (index = 0; index < index_max; index++) {
 579			val = RT_IDX_RS
 580				| (type << RT_IDX_TYPE_SHIFT)
 581				| (index << RT_IDX_IDX_SHIFT);
 582			ql_write32(qdev, RT_IDX, val);
 583			result_index = 0;
 584			while ((result_index & RT_IDX_MR) == 0)
 585				result_index = ql_read32(qdev, RT_IDX);
 586			result_data = ql_read32(qdev, RT_DATA);
 587			*buf = type;
 588			buf++;
 589			*buf = index;
 590			buf++;
 591			*buf = result_index;
 592			buf++;
 593			*buf = result_data;
 594			buf++;
 595		}
 596	}
 597	ql_sem_unlock(qdev, SEM_RT_IDX_MASK);
 598	return status;
 599}
 600
 601/* Read out the MAC protocol registers */
 602static void ql_get_mac_protocol_registers(struct ql_adapter *qdev, u32 *buf)
 603{
 604	u32 result_index, result_data;
 605	u32 type;
 606	u32 index;
 607	u32 offset;
 608	u32 val;
 609	u32 initial_val = MAC_ADDR_RS;
 610	u32 max_index;
 611	u32 max_offset;
 612
 613	for (type = 0; type < MAC_ADDR_TYPE_COUNT; type++) {
 614		switch (type) {
 615
 616		case 0: /* CAM */
 617			initial_val |= MAC_ADDR_ADR;
 618			max_index = MAC_ADDR_MAX_CAM_ENTRIES;
 619			max_offset = MAC_ADDR_MAX_CAM_WCOUNT;
 620			break;
 621		case 1: /* Multicast MAC Address */
 622			max_index = MAC_ADDR_MAX_CAM_WCOUNT;
 623			max_offset = MAC_ADDR_MAX_CAM_WCOUNT;
 624			break;
 625		case 2: /* VLAN filter mask */
 626		case 3: /* MC filter mask */
 627			max_index = MAC_ADDR_MAX_CAM_WCOUNT;
 628			max_offset = MAC_ADDR_MAX_CAM_WCOUNT;
 629			break;
 630		case 4: /* FC MAC addresses */
 631			max_index = MAC_ADDR_MAX_FC_MAC_ENTRIES;
 632			max_offset = MAC_ADDR_MAX_FC_MAC_WCOUNT;
 633			break;
 634		case 5: /* Mgmt MAC addresses */
 635			max_index = MAC_ADDR_MAX_MGMT_MAC_ENTRIES;
 636			max_offset = MAC_ADDR_MAX_MGMT_MAC_WCOUNT;
 637			break;
 638		case 6: /* Mgmt VLAN addresses */
 639			max_index = MAC_ADDR_MAX_MGMT_VLAN_ENTRIES;
 640			max_offset = MAC_ADDR_MAX_MGMT_VLAN_WCOUNT;
 641			break;
 642		case 7: /* Mgmt IPv4 address */
 643			max_index = MAC_ADDR_MAX_MGMT_V4_ENTRIES;
 644			max_offset = MAC_ADDR_MAX_MGMT_V4_WCOUNT;
 645			break;
 646		case 8: /* Mgmt IPv6 address */
 647			max_index = MAC_ADDR_MAX_MGMT_V6_ENTRIES;
 648			max_offset = MAC_ADDR_MAX_MGMT_V6_WCOUNT;
 649			break;
 650		case 9: /* Mgmt TCP/UDP Dest port */
 651			max_index = MAC_ADDR_MAX_MGMT_TU_DP_ENTRIES;
 652			max_offset = MAC_ADDR_MAX_MGMT_TU_DP_WCOUNT;
 653			break;
 654		default:
 655			pr_err("Bad type!!! 0x%08x\n", type);
 656			max_index = 0;
 657			max_offset = 0;
 658			break;
 659		}
 660		for (index = 0; index < max_index; index++) {
 661			for (offset = 0; offset < max_offset; offset++) {
 662				val = initial_val
 663					| (type << MAC_ADDR_TYPE_SHIFT)
 664					| (index << MAC_ADDR_IDX_SHIFT)
 665					| (offset);
 666				ql_write32(qdev, MAC_ADDR_IDX, val);
 667				result_index = 0;
 668				while ((result_index & MAC_ADDR_MR) == 0) {
 669					result_index = ql_read32(qdev,
 670								MAC_ADDR_IDX);
 671				}
 672				result_data = ql_read32(qdev, MAC_ADDR_DATA);
 673				*buf = result_index;
 674				buf++;
 675				*buf = result_data;
 676				buf++;
 677			}
 678		}
 679	}
 680}
 681
 682static void ql_get_sem_registers(struct ql_adapter *qdev, u32 *buf)
 683{
 684	u32 func_num, reg, reg_val;
 685	int status;
 686
 687	for (func_num = 0; func_num < MAX_SEMAPHORE_FUNCTIONS ; func_num++) {
 688		reg = MPI_NIC_REG_BLOCK
 689			| (func_num << MPI_NIC_FUNCTION_SHIFT)
 690			| (SEM / 4);
 691		status = ql_read_mpi_reg(qdev, reg, &reg_val);
 692		*buf = reg_val;
 693		/* if the read failed then dead fill the element. */
 694		if (!status)
 695			*buf = 0xdeadbeef;
 696		buf++;
 697	}
 698}
 699
 700/* Create a coredump segment header */
 701static void ql_build_coredump_seg_header(
 702		struct mpi_coredump_segment_header *seg_hdr,
 703		u32 seg_number, u32 seg_size, u8 *desc)
 704{
 705	memset(seg_hdr, 0, sizeof(struct mpi_coredump_segment_header));
 706	seg_hdr->cookie = MPI_COREDUMP_COOKIE;
 707	seg_hdr->segNum = seg_number;
 708	seg_hdr->segSize = seg_size;
 709	strncpy(seg_hdr->description, desc, (sizeof(seg_hdr->description)) - 1);
 710}
 711
 712/*
 713 * This function should be called when a coredump / probedump
 714 * is to be extracted from the HBA. It is assumed there is a
 715 * qdev structure that contains the base address of the register
 716 * space for this function as well as a coredump structure that
 717 * will contain the dump.
 718 */
 719int ql_core_dump(struct ql_adapter *qdev, struct ql_mpi_coredump *mpi_coredump)
 720{
 721	int status;
 722	int i;
 723
 724	if (!mpi_coredump) {
 725		netif_err(qdev, drv, qdev->ndev, "No memory allocated\n");
 726		return -EINVAL;
 727	}
 728
 729	/* Try to get the spinlock, but dont worry if
 730	 * it isn't available.  If the firmware died it
 731	 * might be holding the sem.
 732	 */
 733	ql_sem_spinlock(qdev, SEM_PROC_REG_MASK);
 734
 735	status = ql_pause_mpi_risc(qdev);
 736	if (status) {
 737		netif_err(qdev, drv, qdev->ndev,
 738			  "Failed RISC pause. Status = 0x%.08x\n", status);
 739		goto err;
 740	}
 741
 742	/* Insert the global header */
 743	memset(&(mpi_coredump->mpi_global_header), 0,
 744		sizeof(struct mpi_coredump_global_header));
 745	mpi_coredump->mpi_global_header.cookie = MPI_COREDUMP_COOKIE;
 746	mpi_coredump->mpi_global_header.headerSize =
 747		sizeof(struct mpi_coredump_global_header);
 748	mpi_coredump->mpi_global_header.imageSize =
 749		sizeof(struct ql_mpi_coredump);
 750	strncpy(mpi_coredump->mpi_global_header.idString, "MPI Coredump",
 751		sizeof(mpi_coredump->mpi_global_header.idString));
 752
 753	/* Get generic NIC reg dump */
 754	ql_build_coredump_seg_header(&mpi_coredump->nic_regs_seg_hdr,
 755			NIC1_CONTROL_SEG_NUM,
 756			sizeof(struct mpi_coredump_segment_header) +
 757			sizeof(mpi_coredump->nic_regs), "NIC1 Registers");
 758
 759	ql_build_coredump_seg_header(&mpi_coredump->nic2_regs_seg_hdr,
 760			NIC2_CONTROL_SEG_NUM,
 761			sizeof(struct mpi_coredump_segment_header) +
 762			sizeof(mpi_coredump->nic2_regs), "NIC2 Registers");
 763
 764	/* Get XGMac registers. (Segment 18, Rev C. step 21) */
 765	ql_build_coredump_seg_header(&mpi_coredump->xgmac1_seg_hdr,
 766			NIC1_XGMAC_SEG_NUM,
 767			sizeof(struct mpi_coredump_segment_header) +
 768			sizeof(mpi_coredump->xgmac1), "NIC1 XGMac Registers");
 769
 770	ql_build_coredump_seg_header(&mpi_coredump->xgmac2_seg_hdr,
 771			NIC2_XGMAC_SEG_NUM,
 772			sizeof(struct mpi_coredump_segment_header) +
 773			sizeof(mpi_coredump->xgmac2), "NIC2 XGMac Registers");
 774
 775	if (qdev->func & 1) {
 776		/* Odd means our function is NIC 2 */
 777		for (i = 0; i < NIC_REGS_DUMP_WORD_COUNT; i++)
 778			mpi_coredump->nic2_regs[i] =
 779					 ql_read32(qdev, i * sizeof(u32));
 780
 781		for (i = 0; i < NIC_REGS_DUMP_WORD_COUNT; i++)
 782			mpi_coredump->nic_regs[i] =
 783			ql_read_other_func_reg(qdev, (i * sizeof(u32)) / 4);
 784
 785		ql_get_xgmac_regs(qdev, &mpi_coredump->xgmac2[0], 0);
 786		ql_get_xgmac_regs(qdev, &mpi_coredump->xgmac1[0], 1);
 787	} else {
 788		/* Even means our function is NIC 1 */
 789		for (i = 0; i < NIC_REGS_DUMP_WORD_COUNT; i++)
 790			mpi_coredump->nic_regs[i] =
 791					ql_read32(qdev, i * sizeof(u32));
 792		for (i = 0; i < NIC_REGS_DUMP_WORD_COUNT; i++)
 793			mpi_coredump->nic2_regs[i] =
 794			ql_read_other_func_reg(qdev, (i * sizeof(u32)) / 4);
 795
 796		ql_get_xgmac_regs(qdev, &mpi_coredump->xgmac1[0], 0);
 797		ql_get_xgmac_regs(qdev, &mpi_coredump->xgmac2[0], 1);
 798	}
 799
 800	/* Rev C. Step 20a */
 801	ql_build_coredump_seg_header(&mpi_coredump->xaui_an_hdr,
 802			XAUI_AN_SEG_NUM,
 803			sizeof(struct mpi_coredump_segment_header) +
 804			sizeof(mpi_coredump->serdes_xaui_an),
 805			"XAUI AN Registers");
 806
 807	/* Rev C. Step 20b */
 808	ql_build_coredump_seg_header(&mpi_coredump->xaui_hss_pcs_hdr,
 809			XAUI_HSS_PCS_SEG_NUM,
 810			sizeof(struct mpi_coredump_segment_header) +
 811			sizeof(mpi_coredump->serdes_xaui_hss_pcs),
 812			"XAUI HSS PCS Registers");
 813
 814	ql_build_coredump_seg_header(&mpi_coredump->xfi_an_hdr, XFI_AN_SEG_NUM,
 815			sizeof(struct mpi_coredump_segment_header) +
 816			sizeof(mpi_coredump->serdes_xfi_an),
 817			"XFI AN Registers");
 818
 819	ql_build_coredump_seg_header(&mpi_coredump->xfi_train_hdr,
 820			XFI_TRAIN_SEG_NUM,
 821			sizeof(struct mpi_coredump_segment_header) +
 822			sizeof(mpi_coredump->serdes_xfi_train),
 823			"XFI TRAIN Registers");
 824
 825	ql_build_coredump_seg_header(&mpi_coredump->xfi_hss_pcs_hdr,
 826			XFI_HSS_PCS_SEG_NUM,
 827			sizeof(struct mpi_coredump_segment_header) +
 828			sizeof(mpi_coredump->serdes_xfi_hss_pcs),
 829			"XFI HSS PCS Registers");
 830
 831	ql_build_coredump_seg_header(&mpi_coredump->xfi_hss_tx_hdr,
 832			XFI_HSS_TX_SEG_NUM,
 833			sizeof(struct mpi_coredump_segment_header) +
 834			sizeof(mpi_coredump->serdes_xfi_hss_tx),
 835			"XFI HSS TX Registers");
 836
 837	ql_build_coredump_seg_header(&mpi_coredump->xfi_hss_rx_hdr,
 838			XFI_HSS_RX_SEG_NUM,
 839			sizeof(struct mpi_coredump_segment_header) +
 840			sizeof(mpi_coredump->serdes_xfi_hss_rx),
 841			"XFI HSS RX Registers");
 842
 843	ql_build_coredump_seg_header(&mpi_coredump->xfi_hss_pll_hdr,
 844			XFI_HSS_PLL_SEG_NUM,
 845			sizeof(struct mpi_coredump_segment_header) +
 846			sizeof(mpi_coredump->serdes_xfi_hss_pll),
 847			"XFI HSS PLL Registers");
 848
 849	ql_build_coredump_seg_header(&mpi_coredump->xaui2_an_hdr,
 850			XAUI2_AN_SEG_NUM,
 851			sizeof(struct mpi_coredump_segment_header) +
 852			sizeof(mpi_coredump->serdes2_xaui_an),
 853			"XAUI2 AN Registers");
 854
 855	ql_build_coredump_seg_header(&mpi_coredump->xaui2_hss_pcs_hdr,
 856			XAUI2_HSS_PCS_SEG_NUM,
 857			sizeof(struct mpi_coredump_segment_header) +
 858			sizeof(mpi_coredump->serdes2_xaui_hss_pcs),
 859			"XAUI2 HSS PCS Registers");
 860
 861	ql_build_coredump_seg_header(&mpi_coredump->xfi2_an_hdr,
 862			XFI2_AN_SEG_NUM,
 863			sizeof(struct mpi_coredump_segment_header) +
 864			sizeof(mpi_coredump->serdes2_xfi_an),
 865			"XFI2 AN Registers");
 866
 867	ql_build_coredump_seg_header(&mpi_coredump->xfi2_train_hdr,
 868			XFI2_TRAIN_SEG_NUM,
 869			sizeof(struct mpi_coredump_segment_header) +
 870			sizeof(mpi_coredump->serdes2_xfi_train),
 871			"XFI2 TRAIN Registers");
 872
 873	ql_build_coredump_seg_header(&mpi_coredump->xfi2_hss_pcs_hdr,
 874			XFI2_HSS_PCS_SEG_NUM,
 875			sizeof(struct mpi_coredump_segment_header) +
 876			sizeof(mpi_coredump->serdes2_xfi_hss_pcs),
 877			"XFI2 HSS PCS Registers");
 878
 879	ql_build_coredump_seg_header(&mpi_coredump->xfi2_hss_tx_hdr,
 880			XFI2_HSS_TX_SEG_NUM,
 881			sizeof(struct mpi_coredump_segment_header) +
 882			sizeof(mpi_coredump->serdes2_xfi_hss_tx),
 883			"XFI2 HSS TX Registers");
 884
 885	ql_build_coredump_seg_header(&mpi_coredump->xfi2_hss_rx_hdr,
 886			XFI2_HSS_RX_SEG_NUM,
 887			sizeof(struct mpi_coredump_segment_header) +
 888			sizeof(mpi_coredump->serdes2_xfi_hss_rx),
 889			"XFI2 HSS RX Registers");
 890
 891	ql_build_coredump_seg_header(&mpi_coredump->xfi2_hss_pll_hdr,
 892			XFI2_HSS_PLL_SEG_NUM,
 893			sizeof(struct mpi_coredump_segment_header) +
 894			sizeof(mpi_coredump->serdes2_xfi_hss_pll),
 895			"XFI2 HSS PLL Registers");
 896
 897	status = ql_get_serdes_regs(qdev, mpi_coredump);
 898	if (status) {
 899		netif_err(qdev, drv, qdev->ndev,
 900			  "Failed Dump of Serdes Registers. Status = 0x%.08x\n",
 901			  status);
 902		goto err;
 903	}
 904
 905	ql_build_coredump_seg_header(&mpi_coredump->core_regs_seg_hdr,
 906				CORE_SEG_NUM,
 907				sizeof(mpi_coredump->core_regs_seg_hdr) +
 908				sizeof(mpi_coredump->mpi_core_regs) +
 909				sizeof(mpi_coredump->mpi_core_sh_regs),
 910				"Core Registers");
 911
 912	/* Get the MPI Core Registers */
 913	status = ql_get_mpi_regs(qdev, &mpi_coredump->mpi_core_regs[0],
 914				 MPI_CORE_REGS_ADDR, MPI_CORE_REGS_CNT);
 915	if (status)
 916		goto err;
 917	/* Get the 16 MPI shadow registers */
 918	status = ql_get_mpi_shadow_regs(qdev,
 919					&mpi_coredump->mpi_core_sh_regs[0]);
 920	if (status)
 921		goto err;
 922
 923	/* Get the Test Logic Registers */
 924	ql_build_coredump_seg_header(&mpi_coredump->test_logic_regs_seg_hdr,
 925				TEST_LOGIC_SEG_NUM,
 926				sizeof(struct mpi_coredump_segment_header)
 927				+ sizeof(mpi_coredump->test_logic_regs),
 928				"Test Logic Regs");
 929	status = ql_get_mpi_regs(qdev, &mpi_coredump->test_logic_regs[0],
 930				 TEST_REGS_ADDR, TEST_REGS_CNT);
 931	if (status)
 932		goto err;
 933
 934	/* Get the RMII Registers */
 935	ql_build_coredump_seg_header(&mpi_coredump->rmii_regs_seg_hdr,
 936				RMII_SEG_NUM,
 937				sizeof(struct mpi_coredump_segment_header)
 938				+ sizeof(mpi_coredump->rmii_regs),
 939				"RMII Registers");
 940	status = ql_get_mpi_regs(qdev, &mpi_coredump->rmii_regs[0],
 941				 RMII_REGS_ADDR, RMII_REGS_CNT);
 942	if (status)
 943		goto err;
 944
 945	/* Get the FCMAC1 Registers */
 946	ql_build_coredump_seg_header(&mpi_coredump->fcmac1_regs_seg_hdr,
 947				FCMAC1_SEG_NUM,
 948				sizeof(struct mpi_coredump_segment_header)
 949				+ sizeof(mpi_coredump->fcmac1_regs),
 950				"FCMAC1 Registers");
 951	status = ql_get_mpi_regs(qdev, &mpi_coredump->fcmac1_regs[0],
 952				 FCMAC1_REGS_ADDR, FCMAC_REGS_CNT);
 953	if (status)
 954		goto err;
 955
 956	/* Get the FCMAC2 Registers */
 957
 958	ql_build_coredump_seg_header(&mpi_coredump->fcmac2_regs_seg_hdr,
 959				FCMAC2_SEG_NUM,
 960				sizeof(struct mpi_coredump_segment_header)
 961				+ sizeof(mpi_coredump->fcmac2_regs),
 962				"FCMAC2 Registers");
 963
 964	status = ql_get_mpi_regs(qdev, &mpi_coredump->fcmac2_regs[0],
 965				 FCMAC2_REGS_ADDR, FCMAC_REGS_CNT);
 966	if (status)
 967		goto err;
 968
 969	/* Get the FC1 MBX Registers */
 970	ql_build_coredump_seg_header(&mpi_coredump->fc1_mbx_regs_seg_hdr,
 971				FC1_MBOX_SEG_NUM,
 972				sizeof(struct mpi_coredump_segment_header)
 973				+ sizeof(mpi_coredump->fc1_mbx_regs),
 974				"FC1 MBox Regs");
 975	status = ql_get_mpi_regs(qdev, &mpi_coredump->fc1_mbx_regs[0],
 976				 FC1_MBX_REGS_ADDR, FC_MBX_REGS_CNT);
 977	if (status)
 978		goto err;
 979
 980	/* Get the IDE Registers */
 981	ql_build_coredump_seg_header(&mpi_coredump->ide_regs_seg_hdr,
 982				IDE_SEG_NUM,
 983				sizeof(struct mpi_coredump_segment_header)
 984				+ sizeof(mpi_coredump->ide_regs),
 985				"IDE Registers");
 986	status = ql_get_mpi_regs(qdev, &mpi_coredump->ide_regs[0],
 987				 IDE_REGS_ADDR, IDE_REGS_CNT);
 988	if (status)
 989		goto err;
 990
 991	/* Get the NIC1 MBX Registers */
 992	ql_build_coredump_seg_header(&mpi_coredump->nic1_mbx_regs_seg_hdr,
 993				NIC1_MBOX_SEG_NUM,
 994				sizeof(struct mpi_coredump_segment_header)
 995				+ sizeof(mpi_coredump->nic1_mbx_regs),
 996				"NIC1 MBox Regs");
 997	status = ql_get_mpi_regs(qdev, &mpi_coredump->nic1_mbx_regs[0],
 998				 NIC1_MBX_REGS_ADDR, NIC_MBX_REGS_CNT);
 999	if (status)
1000		goto err;
1001
1002	/* Get the SMBus Registers */
1003	ql_build_coredump_seg_header(&mpi_coredump->smbus_regs_seg_hdr,
1004				SMBUS_SEG_NUM,
1005				sizeof(struct mpi_coredump_segment_header)
1006				+ sizeof(mpi_coredump->smbus_regs),
1007				"SMBus Registers");
1008	status = ql_get_mpi_regs(qdev, &mpi_coredump->smbus_regs[0],
1009				 SMBUS_REGS_ADDR, SMBUS_REGS_CNT);
1010	if (status)
1011		goto err;
1012
1013	/* Get the FC2 MBX Registers */
1014	ql_build_coredump_seg_header(&mpi_coredump->fc2_mbx_regs_seg_hdr,
1015				FC2_MBOX_SEG_NUM,
1016				sizeof(struct mpi_coredump_segment_header)
1017				+ sizeof(mpi_coredump->fc2_mbx_regs),
1018				"FC2 MBox Regs");
1019	status = ql_get_mpi_regs(qdev, &mpi_coredump->fc2_mbx_regs[0],
1020				 FC2_MBX_REGS_ADDR, FC_MBX_REGS_CNT);
1021	if (status)
1022		goto err;
1023
1024	/* Get the NIC2 MBX Registers */
1025	ql_build_coredump_seg_header(&mpi_coredump->nic2_mbx_regs_seg_hdr,
1026				NIC2_MBOX_SEG_NUM,
1027				sizeof(struct mpi_coredump_segment_header)
1028				+ sizeof(mpi_coredump->nic2_mbx_regs),
1029				"NIC2 MBox Regs");
1030	status = ql_get_mpi_regs(qdev, &mpi_coredump->nic2_mbx_regs[0],
1031				 NIC2_MBX_REGS_ADDR, NIC_MBX_REGS_CNT);
1032	if (status)
1033		goto err;
1034
1035	/* Get the I2C Registers */
1036	ql_build_coredump_seg_header(&mpi_coredump->i2c_regs_seg_hdr,
1037				I2C_SEG_NUM,
1038				sizeof(struct mpi_coredump_segment_header)
1039				+ sizeof(mpi_coredump->i2c_regs),
1040				"I2C Registers");
1041	status = ql_get_mpi_regs(qdev, &mpi_coredump->i2c_regs[0],
1042				 I2C_REGS_ADDR, I2C_REGS_CNT);
1043	if (status)
1044		goto err;
1045
1046	/* Get the MEMC Registers */
1047	ql_build_coredump_seg_header(&mpi_coredump->memc_regs_seg_hdr,
1048				MEMC_SEG_NUM,
1049				sizeof(struct mpi_coredump_segment_header)
1050				+ sizeof(mpi_coredump->memc_regs),
1051				"MEMC Registers");
1052	status = ql_get_mpi_regs(qdev, &mpi_coredump->memc_regs[0],
1053				 MEMC_REGS_ADDR, MEMC_REGS_CNT);
1054	if (status)
1055		goto err;
1056
1057	/* Get the PBus Registers */
1058	ql_build_coredump_seg_header(&mpi_coredump->pbus_regs_seg_hdr,
1059				PBUS_SEG_NUM,
1060				sizeof(struct mpi_coredump_segment_header)
1061				+ sizeof(mpi_coredump->pbus_regs),
1062				"PBUS Registers");
1063	status = ql_get_mpi_regs(qdev, &mpi_coredump->pbus_regs[0],
1064				 PBUS_REGS_ADDR, PBUS_REGS_CNT);
1065	if (status)
1066		goto err;
1067
1068	/* Get the MDE Registers */
1069	ql_build_coredump_seg_header(&mpi_coredump->mde_regs_seg_hdr,
1070				MDE_SEG_NUM,
1071				sizeof(struct mpi_coredump_segment_header)
1072				+ sizeof(mpi_coredump->mde_regs),
1073				"MDE Registers");
1074	status = ql_get_mpi_regs(qdev, &mpi_coredump->mde_regs[0],
1075				 MDE_REGS_ADDR, MDE_REGS_CNT);
1076	if (status)
1077		goto err;
1078
1079	ql_build_coredump_seg_header(&mpi_coredump->misc_nic_seg_hdr,
1080				MISC_NIC_INFO_SEG_NUM,
1081				sizeof(struct mpi_coredump_segment_header)
1082				+ sizeof(mpi_coredump->misc_nic_info),
1083				"MISC NIC INFO");
1084	mpi_coredump->misc_nic_info.rx_ring_count = qdev->rx_ring_count;
1085	mpi_coredump->misc_nic_info.tx_ring_count = qdev->tx_ring_count;
1086	mpi_coredump->misc_nic_info.intr_count = qdev->intr_count;
1087	mpi_coredump->misc_nic_info.function = qdev->func;
1088
1089	/* Segment 31 */
1090	/* Get indexed register values. */
1091	ql_build_coredump_seg_header(&mpi_coredump->intr_states_seg_hdr,
1092				INTR_STATES_SEG_NUM,
1093				sizeof(struct mpi_coredump_segment_header)
1094				+ sizeof(mpi_coredump->intr_states),
1095				"INTR States");
1096	ql_get_intr_states(qdev, &mpi_coredump->intr_states[0]);
1097
1098	ql_build_coredump_seg_header(&mpi_coredump->cam_entries_seg_hdr,
1099				CAM_ENTRIES_SEG_NUM,
1100				sizeof(struct mpi_coredump_segment_header)
1101				+ sizeof(mpi_coredump->cam_entries),
1102				"CAM Entries");
1103	status = ql_get_cam_entries(qdev, &mpi_coredump->cam_entries[0]);
1104	if (status)
1105		goto err;
1106
1107	ql_build_coredump_seg_header(&mpi_coredump->nic_routing_words_seg_hdr,
1108				ROUTING_WORDS_SEG_NUM,
1109				sizeof(struct mpi_coredump_segment_header)
1110				+ sizeof(mpi_coredump->nic_routing_words),
1111				"Routing Words");
1112	status = ql_get_routing_entries(qdev,
1113			 &mpi_coredump->nic_routing_words[0]);
1114	if (status)
1115		goto err;
1116
1117	/* Segment 34 (Rev C. step 23) */
1118	ql_build_coredump_seg_header(&mpi_coredump->ets_seg_hdr,
1119				ETS_SEG_NUM,
1120				sizeof(struct mpi_coredump_segment_header)
1121				+ sizeof(mpi_coredump->ets),
1122				"ETS Registers");
1123	status = ql_get_ets_regs(qdev, &mpi_coredump->ets[0]);
1124	if (status)
1125		goto err;
1126
1127	ql_build_coredump_seg_header(&mpi_coredump->probe_dump_seg_hdr,
1128				PROBE_DUMP_SEG_NUM,
1129				sizeof(struct mpi_coredump_segment_header)
1130				+ sizeof(mpi_coredump->probe_dump),
1131				"Probe Dump");
1132	ql_get_probe_dump(qdev, &mpi_coredump->probe_dump[0]);
1133
1134	ql_build_coredump_seg_header(&mpi_coredump->routing_reg_seg_hdr,
1135				ROUTING_INDEX_SEG_NUM,
1136				sizeof(struct mpi_coredump_segment_header)
1137				+ sizeof(mpi_coredump->routing_regs),
1138				"Routing Regs");
1139	status = ql_get_routing_index_registers(qdev,
1140					&mpi_coredump->routing_regs[0]);
1141	if (status)
1142		goto err;
1143
1144	ql_build_coredump_seg_header(&mpi_coredump->mac_prot_reg_seg_hdr,
1145				MAC_PROTOCOL_SEG_NUM,
1146				sizeof(struct mpi_coredump_segment_header)
1147				+ sizeof(mpi_coredump->mac_prot_regs),
1148				"MAC Prot Regs");
1149	ql_get_mac_protocol_registers(qdev, &mpi_coredump->mac_prot_regs[0]);
1150
1151	/* Get the semaphore registers for all 5 functions */
1152	ql_build_coredump_seg_header(&mpi_coredump->sem_regs_seg_hdr,
1153			SEM_REGS_SEG_NUM,
1154			sizeof(struct mpi_coredump_segment_header) +
1155			sizeof(mpi_coredump->sem_regs),	"Sem Registers");
1156
1157	ql_get_sem_registers(qdev, &mpi_coredump->sem_regs[0]);
1158
1159	/* Prevent the mpi restarting while we dump the memory.*/
1160	ql_write_mpi_reg(qdev, MPI_TEST_FUNC_RST_STS, MPI_TEST_FUNC_RST_FRC);
1161
1162	/* clear the pause */
1163	status = ql_unpause_mpi_risc(qdev);
1164	if (status) {
1165		netif_err(qdev, drv, qdev->ndev,
1166			  "Failed RISC unpause. Status = 0x%.08x\n", status);
1167		goto err;
1168	}
1169
1170	/* Reset the RISC so we can dump RAM */
1171	status = ql_hard_reset_mpi_risc(qdev);
1172	if (status) {
1173		netif_err(qdev, drv, qdev->ndev,
1174			  "Failed RISC reset. Status = 0x%.08x\n", status);
1175		goto err;
1176	}
1177
1178	ql_build_coredump_seg_header(&mpi_coredump->code_ram_seg_hdr,
1179				WCS_RAM_SEG_NUM,
1180				sizeof(struct mpi_coredump_segment_header)
1181				+ sizeof(mpi_coredump->code_ram),
1182				"WCS RAM");
1183	status = ql_dump_risc_ram_area(qdev, &mpi_coredump->code_ram[0],
1184					CODE_RAM_ADDR, CODE_RAM_CNT);
1185	if (status) {
1186		netif_err(qdev, drv, qdev->ndev,
1187			  "Failed Dump of CODE RAM. Status = 0x%.08x\n",
1188			  status);
1189		goto err;
1190	}
1191
1192	/* Insert the segment header */
1193	ql_build_coredump_seg_header(&mpi_coredump->memc_ram_seg_hdr,
1194				MEMC_RAM_SEG_NUM,
1195				sizeof(struct mpi_coredump_segment_header)
1196				+ sizeof(mpi_coredump->memc_ram),
1197				"MEMC RAM");
1198	status = ql_dump_risc_ram_area(qdev, &mpi_coredump->memc_ram[0],
1199					MEMC_RAM_ADDR, MEMC_RAM_CNT);
1200	if (status) {
1201		netif_err(qdev, drv, qdev->ndev,
1202			  "Failed Dump of MEMC RAM. Status = 0x%.08x\n",
1203			  status);
1204		goto err;
1205	}
1206err:
1207	ql_sem_unlock(qdev, SEM_PROC_REG_MASK); /* does flush too */
1208	return status;
1209
1210}
1211
1212static void ql_get_core_dump(struct ql_adapter *qdev)
1213{
1214	if (!ql_own_firmware(qdev)) {
1215		netif_err(qdev, drv, qdev->ndev, "Don't own firmware!\n");
1216		return;
1217	}
1218
1219	if (!netif_running(qdev->ndev)) {
1220		netif_err(qdev, ifup, qdev->ndev,
1221			  "Force Coredump can only be done from interface that is up\n");
1222		return;
1223	}
1224	ql_queue_fw_error(qdev);
1225}
1226
1227static void ql_gen_reg_dump(struct ql_adapter *qdev,
1228			    struct ql_reg_dump *mpi_coredump)
1229{
1230	int i, status;
1231
1232
1233	memset(&(mpi_coredump->mpi_global_header), 0,
1234		sizeof(struct mpi_coredump_global_header));
1235	mpi_coredump->mpi_global_header.cookie = MPI_COREDUMP_COOKIE;
1236	mpi_coredump->mpi_global_header.headerSize =
1237		sizeof(struct mpi_coredump_global_header);
1238	mpi_coredump->mpi_global_header.imageSize =
1239		sizeof(struct ql_reg_dump);
1240	strncpy(mpi_coredump->mpi_global_header.idString, "MPI Coredump",
1241		sizeof(mpi_coredump->mpi_global_header.idString));
1242
1243
1244	/* segment 16 */
1245	ql_build_coredump_seg_header(&mpi_coredump->misc_nic_seg_hdr,
1246				MISC_NIC_INFO_SEG_NUM,
1247				sizeof(struct mpi_coredump_segment_header)
1248				+ sizeof(mpi_coredump->misc_nic_info),
1249				"MISC NIC INFO");
1250	mpi_coredump->misc_nic_info.rx_ring_count = qdev->rx_ring_count;
1251	mpi_coredump->misc_nic_info.tx_ring_count = qdev->tx_ring_count;
1252	mpi_coredump->misc_nic_info.intr_count = qdev->intr_count;
1253	mpi_coredump->misc_nic_info.function = qdev->func;
1254
1255	/* Segment 16, Rev C. Step 18 */
1256	ql_build_coredump_seg_header(&mpi_coredump->nic_regs_seg_hdr,
1257				NIC1_CONTROL_SEG_NUM,
1258				sizeof(struct mpi_coredump_segment_header)
1259				+ sizeof(mpi_coredump->nic_regs),
1260				"NIC Registers");
1261	/* Get generic reg dump */
1262	for (i = 0; i < 64; i++)
1263		mpi_coredump->nic_regs[i] = ql_read32(qdev, i * sizeof(u32));
1264
1265	/* Segment 31 */
1266	/* Get indexed register values. */
1267	ql_build_coredump_seg_header(&mpi_coredump->intr_states_seg_hdr,
1268				INTR_STATES_SEG_NUM,
1269				sizeof(struct mpi_coredump_segment_header)
1270				+ sizeof(mpi_coredump->intr_states),
1271				"INTR States");
1272	ql_get_intr_states(qdev, &mpi_coredump->intr_states[0]);
1273
1274	ql_build_coredump_seg_header(&mpi_coredump->cam_entries_seg_hdr,
1275				CAM_ENTRIES_SEG_NUM,
1276				sizeof(struct mpi_coredump_segment_header)
1277				+ sizeof(mpi_coredump->cam_entries),
1278				"CAM Entries");
1279	status = ql_get_cam_entries(qdev, &mpi_coredump->cam_entries[0]);
1280	if (status)
1281		return;
1282
1283	ql_build_coredump_seg_header(&mpi_coredump->nic_routing_words_seg_hdr,
1284				ROUTING_WORDS_SEG_NUM,
1285				sizeof(struct mpi_coredump_segment_header)
1286				+ sizeof(mpi_coredump->nic_routing_words),
1287				"Routing Words");
1288	status = ql_get_routing_entries(qdev,
1289			 &mpi_coredump->nic_routing_words[0]);
1290	if (status)
1291		return;
1292
1293	/* Segment 34 (Rev C. step 23) */
1294	ql_build_coredump_seg_header(&mpi_coredump->ets_seg_hdr,
1295				ETS_SEG_NUM,
1296				sizeof(struct mpi_coredump_segment_header)
1297				+ sizeof(mpi_coredump->ets),
1298				"ETS Registers");
1299	status = ql_get_ets_regs(qdev, &mpi_coredump->ets[0]);
1300	if (status)
1301		return;
1302}
1303
1304void ql_get_dump(struct ql_adapter *qdev, void *buff)
1305{
1306	/*
1307	 * If the dump has already been taken and is stored
1308	 * in our internal buffer and if force dump is set then
1309	 * just start the spool to dump it to the log file
1310	 * and also, take a snapshot of the general regs to
1311	 * to the user's buffer or else take complete dump
1312	 * to the user's buffer if force is not set.
1313	 */
1314
1315	if (!test_bit(QL_FRC_COREDUMP, &qdev->flags)) {
1316		if (!ql_core_dump(qdev, buff))
1317			ql_soft_reset_mpi_risc(qdev);
1318		else
1319			netif_err(qdev, drv, qdev->ndev, "coredump failed!\n");
1320	} else {
1321		ql_gen_reg_dump(qdev, buff);
1322		ql_get_core_dump(qdev);
1323	}
1324}
1325
1326/* Coredump to messages log file using separate worker thread */
1327void ql_mpi_core_to_log(struct work_struct *work)
1328{
1329	struct ql_adapter *qdev =
1330		container_of(work, struct ql_adapter, mpi_core_to_log.work);
1331	u32 *tmp, count;
1332	int i;
1333
1334	count = sizeof(struct ql_mpi_coredump) / sizeof(u32);
1335	tmp = (u32 *)qdev->mpi_coredump;
1336	netif_printk(qdev, drv, KERN_DEBUG, qdev->ndev,
1337		     "Core is dumping to log file!\n");
1338
1339	for (i = 0; i < count; i += 8) {
1340		pr_err("%.08x: %.08x %.08x %.08x %.08x %.08x "
1341			"%.08x %.08x %.08x\n", i,
1342			tmp[i + 0],
1343			tmp[i + 1],
1344			tmp[i + 2],
1345			tmp[i + 3],
1346			tmp[i + 4],
1347			tmp[i + 5],
1348			tmp[i + 6],
1349			tmp[i + 7]);
1350		msleep(5);
1351	}
1352}
1353
1354#ifdef QL_REG_DUMP
1355static void ql_dump_intr_states(struct ql_adapter *qdev)
1356{
1357	int i;
1358	u32 value;
1359	for (i = 0; i < qdev->intr_count; i++) {
1360		ql_write32(qdev, INTR_EN, qdev->intr_context[i].intr_read_mask);
1361		value = ql_read32(qdev, INTR_EN);
1362		pr_err("%s: Interrupt %d is %s\n",
1363		       qdev->ndev->name, i,
1364		       (value & INTR_EN_EN ? "enabled" : "disabled"));
1365	}
1366}
1367
1368#define DUMP_XGMAC(qdev, reg)					\
1369do {								\
1370	u32 data;						\
1371	ql_read_xgmac_reg(qdev, reg, &data);			\
1372	pr_err("%s: %s = 0x%.08x\n", qdev->ndev->name, #reg, data); \
1373} while (0)
1374
1375void ql_dump_xgmac_control_regs(struct ql_adapter *qdev)
1376{
1377	if (ql_sem_spinlock(qdev, qdev->xg_sem_mask)) {
1378		pr_err("%s: Couldn't get xgmac sem\n", __func__);
1379		return;
1380	}
1381	DUMP_XGMAC(qdev, PAUSE_SRC_LO);
1382	DUMP_XGMAC(qdev, PAUSE_SRC_HI);
1383	DUMP_XGMAC(qdev, GLOBAL_CFG);
1384	DUMP_XGMAC(qdev, TX_CFG);
1385	DUMP_XGMAC(qdev, RX_CFG);
1386	DUMP_XGMAC(qdev, FLOW_CTL);
1387	DUMP_XGMAC(qdev, PAUSE_OPCODE);
1388	DUMP_XGMAC(qdev, PAUSE_TIMER);
1389	DUMP_XGMAC(qdev, PAUSE_FRM_DEST_LO);
1390	DUMP_XGMAC(qdev, PAUSE_FRM_DEST_HI);
1391	DUMP_XGMAC(qdev, MAC_TX_PARAMS);
1392	DUMP_XGMAC(qdev, MAC_RX_PARAMS);
1393	DUMP_XGMAC(qdev, MAC_SYS_INT);
1394	DUMP_XGMAC(qdev, MAC_SYS_INT_MASK);
1395	DUMP_XGMAC(qdev, MAC_MGMT_INT);
1396	DUMP_XGMAC(qdev, MAC_MGMT_IN_MASK);
1397	DUMP_XGMAC(qdev, EXT_ARB_MODE);
1398	ql_sem_unlock(qdev, qdev->xg_sem_mask);
1399}
1400
1401static void ql_dump_ets_regs(struct ql_adapter *qdev)
1402{
1403}
1404
1405static void ql_dump_cam_entries(struct ql_adapter *qdev)
1406{
1407	int i;
1408	u32 value[3];
1409
1410	i = ql_sem_spinlock(qdev, SEM_MAC_ADDR_MASK);
1411	if (i)
1412		return;
1413	for (i = 0; i < 4; i++) {
1414		if (ql_get_mac_addr_reg(qdev, MAC_ADDR_TYPE_CAM_MAC, i, value)) {
1415			pr_err("%s: Failed read of mac index register\n",
1416			       __func__);
1417			return;
1418		} else {
1419			if (value[0])
1420				pr_err("%s: CAM index %d CAM Lookup Lower = 0x%.08x:%.08x, Output = 0x%.08x\n",
1421				       qdev->ndev->name, i, value[1], value[0],
1422				       value[2]);
1423		}
1424	}
1425	for (i = 0; i < 32; i++) {
1426		if (ql_get_mac_addr_reg
1427		    (qdev, MAC_ADDR_TYPE_MULTI_MAC, i, value)) {
1428			pr_err("%s: Failed read of mac index register\n",
1429			       __func__);
1430			return;
1431		} else {
1432			if (value[0])
1433				pr_err("%s: MCAST index %d CAM Lookup Lower = 0x%.08x:%.08x\n",
1434				       qdev->ndev->name, i, value[1], value[0]);
1435		}
1436	}
1437	ql_sem_unlock(qdev, SEM_MAC_ADDR_MASK);
1438}
1439
1440void ql_dump_routing_entries(struct ql_adapter *qdev)
1441{
1442	int i;
1443	u32 value;
1444	i = ql_sem_spinlock(qdev, SEM_RT_IDX_MASK);
1445	if (i)
1446		return;
1447	for (i = 0; i < 16; i++) {
1448		value = 0;
1449		if (ql_get_routing_reg(qdev, i, &value)) {
1450			pr_err("%s: Failed read of routing index register\n",
1451			       __func__);
1452			return;
1453		} else {
1454			if (value)
1455				pr_err("%s: Routing Mask %d = 0x%.08x\n",
1456				       qdev->ndev->name, i, value);
1457		}
1458	}
1459	ql_sem_unlock(qdev, SEM_RT_IDX_MASK);
1460}
1461
1462#define DUMP_REG(qdev, reg)			\
1463	pr_err("%-32s= 0x%x\n", #reg, ql_read32(qdev, reg))
1464
1465void ql_dump_regs(struct ql_adapter *qdev)
1466{
1467	pr_err("reg dump for function #%d\n", qdev->func);
1468	DUMP_REG(qdev, SYS);
1469	DUMP_REG(qdev, RST_FO);
1470	DUMP_REG(qdev, FSC);
1471	DUMP_REG(qdev, CSR);
1472	DUMP_REG(qdev, ICB_RID);
1473	DUMP_REG(qdev, ICB_L);
1474	DUMP_REG(qdev, ICB_H);
1475	DUMP_REG(qdev, CFG);
1476	DUMP_REG(qdev, BIOS_ADDR);
1477	DUMP_REG(qdev, STS);
1478	DUMP_REG(qdev, INTR_EN);
1479	DUMP_REG(qdev, INTR_MASK);
1480	DUMP_REG(qdev, ISR1);
1481	DUMP_REG(qdev, ISR2);
1482	DUMP_REG(qdev, ISR3);
1483	DUMP_REG(qdev, ISR4);
1484	DUMP_REG(qdev, REV_ID);
1485	DUMP_REG(qdev, FRC_ECC_ERR);
1486	DUMP_REG(qdev, ERR_STS);
1487	DUMP_REG(qdev, RAM_DBG_ADDR);
1488	DUMP_REG(qdev, RAM_DBG_DATA);
1489	DUMP_REG(qdev, ECC_ERR_CNT);
1490	DUMP_REG(qdev, SEM);
1491	DUMP_REG(qdev, GPIO_1);
1492	DUMP_REG(qdev, GPIO_2);
1493	DUMP_REG(qdev, GPIO_3);
1494	DUMP_REG(qdev, XGMAC_ADDR);
1495	DUMP_REG(qdev, XGMAC_DATA);
1496	DUMP_REG(qdev, NIC_ETS);
1497	DUMP_REG(qdev, CNA_ETS);
1498	DUMP_REG(qdev, FLASH_ADDR);
1499	DUMP_REG(qdev, FLASH_DATA);
1500	DUMP_REG(qdev, CQ_STOP);
1501	DUMP_REG(qdev, PAGE_TBL_RID);
1502	DUMP_REG(qdev, WQ_PAGE_TBL_LO);
1503	DUMP_REG(qdev, WQ_PAGE_TBL_HI);
1504	DUMP_REG(qdev, CQ_PAGE_TBL_LO);
1505	DUMP_REG(qdev, CQ_PAGE_TBL_HI);
1506	DUMP_REG(qdev, COS_DFLT_CQ1);
1507	DUMP_REG(qdev, COS_DFLT_CQ2);
1508	DUMP_REG(qdev, SPLT_HDR);
1509	DUMP_REG(qdev, FC_PAUSE_THRES);
1510	DUMP_REG(qdev, NIC_PAUSE_THRES);
1511	DUMP_REG(qdev, FC_ETHERTYPE);
1512	DUMP_REG(qdev, FC_RCV_CFG);
1513	DUMP_REG(qdev, NIC_RCV_CFG);
1514	DUMP_REG(qdev, FC_COS_TAGS);
1515	DUMP_REG(qdev, NIC_COS_TAGS);
1516	DUMP_REG(qdev, MGMT_RCV_CFG);
1517	DUMP_REG(qdev, XG_SERDES_ADDR);
1518	DUMP_REG(qdev, XG_SERDES_DATA);
1519	DUMP_REG(qdev, PRB_MX_ADDR);
1520	DUMP_REG(qdev, PRB_MX_DATA);
1521	ql_dump_intr_states(qdev);
1522	ql_dump_xgmac_control_regs(qdev);
1523	ql_dump_ets_regs(qdev);
1524	ql_dump_cam_entries(qdev);
1525	ql_dump_routing_entries(qdev);
1526}
1527#endif
1528
1529#ifdef QL_STAT_DUMP
1530
1531#define DUMP_STAT(qdev, stat)	\
1532	pr_err("%s = %ld\n", #stat, (unsigned long)qdev->nic_stats.stat)
1533
1534void ql_dump_stat(struct ql_adapter *qdev)
1535{
1536	pr_err("%s: Enter\n", __func__);
1537	DUMP_STAT(qdev, tx_pkts);
1538	DUMP_STAT(qdev, tx_bytes);
1539	DUMP_STAT(qdev, tx_mcast_pkts);
1540	DUMP_STAT(qdev, tx_bcast_pkts);
1541	DUMP_STAT(qdev, tx_ucast_pkts);
1542	DUMP_STAT(qdev, tx_ctl_pkts);
1543	DUMP_STAT(qdev, tx_pause_pkts);
1544	DUMP_STAT(qdev, tx_64_pkt);
1545	DUMP_STAT(qdev, tx_65_to_127_pkt);
1546	DUMP_STAT(qdev, tx_128_to_255_pkt);
1547	DUMP_STAT(qdev, tx_256_511_pkt);
1548	DUMP_STAT(qdev, tx_512_to_1023_pkt);
1549	DUMP_STAT(qdev, tx_1024_to_1518_pkt);
1550	DUMP_STAT(qdev, tx_1519_to_max_pkt);
1551	DUMP_STAT(qdev, tx_undersize_pkt);
1552	DUMP_STAT(qdev, tx_oversize_pkt);
1553	DUMP_STAT(qdev, rx_bytes);
1554	DUMP_STAT(qdev, rx_bytes_ok);
1555	DUMP_STAT(qdev, rx_pkts);
1556	DUMP_STAT(qdev, rx_pkts_ok);
1557	DUMP_STAT(qdev, rx_bcast_pkts);
1558	DUMP_STAT(qdev, rx_mcast_pkts);
1559	DUMP_STAT(qdev, rx_ucast_pkts);
1560	DUMP_STAT(qdev, rx_undersize_pkts);
1561	DUMP_STAT(qdev, rx_oversize_pkts);
1562	DUMP_STAT(qdev, rx_jabber_pkts);
1563	DUMP_STAT(qdev, rx_undersize_fcerr_pkts);
1564	DUMP_STAT(qdev, rx_drop_events);
1565	DUMP_STAT(qdev, rx_fcerr_pkts);
1566	DUMP_STAT(qdev, rx_align_err);
1567	DUMP_STAT(qdev, rx_symbol_err);
1568	DUMP_STAT(qdev, rx_mac_err);
1569	DUMP_STAT(qdev, rx_ctl_pkts);
1570	DUMP_STAT(qdev, rx_pause_pkts);
1571	DUMP_STAT(qdev, rx_64_pkts);
1572	DUMP_STAT(qdev, rx_65_to_127_pkts);
1573	DUMP_STAT(qdev, rx_128_255_pkts);
1574	DUMP_STAT(qdev, rx_256_511_pkts);
1575	DUMP_STAT(qdev, rx_512_to_1023_pkts);
1576	DUMP_STAT(qdev, rx_1024_to_1518_pkts);
1577	DUMP_STAT(qdev, rx_1519_to_max_pkts);
1578	DUMP_STAT(qdev, rx_len_err_pkts);
1579};
1580#endif
1581
1582#ifdef QL_DEV_DUMP
1583
1584#define DUMP_QDEV_FIELD(qdev, type, field)		\
1585	pr_err("qdev->%-24s = " type "\n", #field, qdev->field)
1586#define DUMP_QDEV_DMA_FIELD(qdev, field)		\
1587	pr_err("qdev->%-24s = %llx\n", #field, (unsigned long long)qdev->field)
1588#define DUMP_QDEV_ARRAY(qdev, type, array, index, field) \
1589	pr_err("%s[%d].%s = " type "\n",		 \
1590	       #array, index, #field, qdev->array[index].field);
1591void ql_dump_qdev(struct ql_adapter *qdev)
1592{
1593	int i;
1594	DUMP_QDEV_FIELD(qdev, "%lx", flags);
1595	DUMP_QDEV_FIELD(qdev, "%p", vlgrp);
1596	DUMP_QDEV_FIELD(qdev, "%p", pdev);
1597	DUMP_QDEV_FIELD(qdev, "%p", ndev);
1598	DUMP_QDEV_FIELD(qdev, "%d", chip_rev_id);
1599	DUMP_QDEV_FIELD(qdev, "%p", reg_base);
1600	DUMP_QDEV_FIELD(qdev, "%p", doorbell_area);
1601	DUMP_QDEV_FIELD(qdev, "%d", doorbell_area_size);
1602	DUMP_QDEV_FIELD(qdev, "%x", msg_enable);
1603	DUMP_QDEV_FIELD(qdev, "%p", rx_ring_shadow_reg_area);
1604	DUMP_QDEV_DMA_FIELD(qdev, rx_ring_shadow_reg_dma);
1605	DUMP_QDEV_FIELD(qdev, "%p", tx_ring_shadow_reg_area);
1606	DUMP_QDEV_DMA_FIELD(qdev, tx_ring_shadow_reg_dma);
1607	DUMP_QDEV_FIELD(qdev, "%d", intr_count);
1608	if (qdev->msi_x_entry)
1609		for (i = 0; i < qdev->intr_count; i++) {
1610			DUMP_QDEV_ARRAY(qdev, "%d", msi_x_entry, i, vector);
1611			DUMP_QDEV_ARRAY(qdev, "%d", msi_x_entry, i, entry);
1612		}
1613	for (i = 0; i < qdev->intr_count; i++) {
1614		DUMP_QDEV_ARRAY(qdev, "%p", intr_context, i, qdev);
1615		DUMP_QDEV_ARRAY(qdev, "%d", intr_context, i, intr);
1616		DUMP_QDEV_ARRAY(qdev, "%d", intr_context, i, hooked);
1617		DUMP_QDEV_ARRAY(qdev, "0x%08x", intr_context, i, intr_en_mask);
1618		DUMP_QDEV_ARRAY(qdev, "0x%08x", intr_context, i, intr_dis_mask);
1619		DUMP_QDEV_ARRAY(qdev, "0x%08x", intr_context, i, intr_read_mask);
1620	}
1621	DUMP_QDEV_FIELD(qdev, "%d", tx_ring_count);
1622	DUMP_QDEV_FIELD(qdev, "%d", rx_ring_count);
1623	DUMP_QDEV_FIELD(qdev, "%d", ring_mem_size);
1624	DUMP_QDEV_FIELD(qdev, "%p", ring_mem);
1625	DUMP_QDEV_FIELD(qdev, "%d", intr_count);
1626	DUMP_QDEV_FIELD(qdev, "%p", tx_ring);
1627	DUMP_QDEV_FIELD(qdev, "%d", rss_ring_count);
1628	DUMP_QDEV_FIELD(qdev, "%p", rx_ring);
1629	DUMP_QDEV_FIELD(qdev, "%d", default_rx_queue);
1630	DUMP_QDEV_FIELD(qdev, "0x%08x", xg_sem_mask);
1631	DUMP_QDEV_FIELD(qdev, "0x%08x", port_link_up);
1632	DUMP_QDEV_FIELD(qdev, "0x%08x", port_init);
1633}
1634#endif
1635
1636#ifdef QL_CB_DUMP
1637void ql_dump_wqicb(struct wqicb *wqicb)
1638{
1639	pr_err("Dumping wqicb stuff...\n");
1640	pr_err("wqicb->len = 0x%x\n", le16_to_cpu(wqicb->len));
1641	pr_err("wqicb->flags = %x\n", le16_to_cpu(wqicb->flags));
1642	pr_err("wqicb->cq_id_rss = %d\n",
1643	       le16_to_cpu(wqicb->cq_id_rss));
1644	pr_err("wqicb->rid = 0x%x\n", le16_to_cpu(wqicb->rid));
1645	pr_err("wqicb->wq_addr = 0x%llx\n",
1646	       (unsigned long long) le64_to_cpu(wqicb->addr));
1647	pr_err("wqicb->wq_cnsmr_idx_addr = 0x%llx\n",
1648	       (unsigned long long) le64_to_cpu(wqicb->cnsmr_idx_addr));
1649}
1650
1651void ql_dump_tx_ring(struct tx_ring *tx_ring)
1652{
1653	if (tx_ring == NULL)
1654		return;
1655	pr_err("===================== Dumping tx_ring %d ===============\n",
1656	       tx_ring->wq_id);
1657	pr_err("tx_ring->base = %p\n", tx_ring->wq_base);
1658	pr_err("tx_ring->base_dma = 0x%llx\n",
1659	       (unsigned long long) tx_ring->wq_base_dma);
1660	pr_err("tx_ring->cnsmr_idx_sh_reg, addr = 0x%p, value = %d\n",
1661	       tx_ring->cnsmr_idx_sh_reg,
1662	       tx_ring->cnsmr_idx_sh_reg
1663			? ql_read_sh_reg(tx_ring->cnsmr_idx_sh_reg) : 0);
1664	pr_err("tx_ring->size = %d\n", tx_ring->wq_size);
1665	pr_err("tx_ring->len = %d\n", tx_ring->wq_len);
1666	pr_err("tx_ring->prod_idx_db_reg = %p\n", tx_ring->prod_idx_db_reg);
1667	pr_err("tx_ring->valid_db_reg = %p\n", tx_ring->valid_db_reg);
1668	pr_err("tx_ring->prod_idx = %d\n", tx_ring->prod_idx);
1669	pr_err("tx_ring->cq_id = %d\n", tx_ring->cq_id);
1670	pr_err("tx_ring->wq_id = %d\n", tx_ring->wq_id);
1671	pr_err("tx_ring->q = %p\n", tx_ring->q);
1672	pr_err("tx_ring->tx_count = %d\n", atomic_read(&tx_ring->tx_count));
1673}
1674
1675void ql_dump_ricb(struct ricb *ricb)
1676{
1677	int i;
1678	pr_err("===================== Dumping ricb ===============\n");
1679	pr_err("Dumping ricb stuff...\n");
1680
1681	pr_err("ricb->base_cq = %d\n", ricb->base_cq & 0x1f);
1682	pr_err("ricb->flags = %s%s%s%s%s%s%s%s%s\n",
1683	       ricb->base_cq & RSS_L4K ? "RSS_L4K " : "",
1684	       ricb->flags & RSS_L6K ? "RSS_L6K " : "",
1685	       ricb->flags & RSS_LI ? "RSS_LI " : "",
1686	       ricb->flags & RSS_LB ? "RSS_LB " : "",
1687	       ricb->flags & RSS_LM ? "RSS_LM " : "",
1688	       ricb->flags & RSS_RI4 ? "RSS_RI4 " : "",
1689	       ricb->flags & RSS_RT4 ? "RSS_RT4 " : "",
1690	       ricb->flags & RSS_RI6 ? "RSS_RI6 " : "",
1691	       ricb->flags & RSS_RT6 ? "RSS_RT6 " : "");
1692	pr_err("ricb->mask = 0x%.04x\n", le16_to_cpu(ricb->mask));
1693	for (i = 0; i < 16; i++)
1694		pr_err("ricb->hash_cq_id[%d] = 0x%.08x\n", i,
1695		       le32_to_cpu(ricb->hash_cq_id[i]));
1696	for (i = 0; i < 10; i++)
1697		pr_err("ricb->ipv6_hash_key[%d] = 0x%.08x\n", i,
1698		       le32_to_cpu(ricb->ipv6_hash_key[i]));
1699	for (i = 0; i < 4; i++)
1700		pr_err("ricb->ipv4_hash_key[%d] = 0x%.08x\n", i,
1701		       le32_to_cpu(ricb->ipv4_hash_key[i]));
1702}
1703
1704void ql_dump_cqicb(struct cqicb *cqicb)
1705{
1706	pr_err("Dumping cqicb stuff...\n");
1707
1708	pr_err("cqicb->msix_vect = %d\n", cqicb->msix_vect);
1709	pr_err("cqicb->flags = %x\n", cqicb->flags);
1710	pr_err("cqicb->len = %d\n", le16_to_cpu(cqicb->len));
1711	pr_err("cqicb->addr = 0x%llx\n",
1712	       (unsigned long long) le64_to_cpu(cqicb->addr));
1713	pr_err("cqicb->prod_idx_addr = 0x%llx\n",
1714	       (unsigned long long) le64_to_cpu(cqicb->prod_idx_addr));
1715	pr_err("cqicb->pkt_delay = 0x%.04x\n",
1716	       le16_to_cpu(cqicb->pkt_delay));
1717	pr_err("cqicb->irq_delay = 0x%.04x\n",
1718	       le16_to_cpu(cqicb->irq_delay));
1719	pr_err("cqicb->lbq_addr = 0x%llx\n",
1720	       (unsigned long long) le64_to_cpu(cqicb->lbq_addr));
1721	pr_err("cqicb->lbq_buf_size = 0x%.04x\n",
1722	       le16_to_cpu(cqicb->lbq_buf_size));
1723	pr_err("cqicb->lbq_len = 0x%.04x\n",
1724	       le16_to_cpu(cqicb->lbq_len));
1725	pr_err("cqicb->sbq_addr = 0x%llx\n",
1726	       (unsigned long long) le64_to_cpu(cqicb->sbq_addr));
1727	pr_err("cqicb->sbq_buf_size = 0x%.04x\n",
1728	       le16_to_cpu(cqicb->sbq_buf_size));
1729	pr_err("cqicb->sbq_len = 0x%.04x\n",
1730	       le16_to_cpu(cqicb->sbq_len));
1731}
1732
1733void ql_dump_rx_ring(struct rx_ring *rx_ring)
1734{
1735	if (rx_ring == NULL)
1736		return;
1737	pr_err("===================== Dumping rx_ring %d ===============\n",
1738	       rx_ring->cq_id);
1739	pr_err("Dumping rx_ring %d, type = %s%s%s\n",
1740	       rx_ring->cq_id, rx_ring->type == DEFAULT_Q ? "DEFAULT" : "",
1741	       rx_ring->type == TX_Q ? "OUTBOUND COMPLETIONS" : "",
1742	       rx_ring->type == RX_Q ? "INBOUND_COMPLETIONS" : "");
1743	pr_err("rx_ring->cqicb = %p\n", &rx_ring->cqicb);
1744	pr_err("rx_ring->cq_base = %p\n", rx_ring->cq_base);
1745	pr_err("rx_ring->cq_base_dma = %llx\n",
1746	       (unsigned long long) rx_ring->cq_base_dma);
1747	pr_err("rx_ring->cq_size = %d\n", rx_ring->cq_size);
1748	pr_err("rx_ring->cq_len = %d\n", rx_ring->cq_len);
1749	pr_err("rx_ring->prod_idx_sh_reg, addr = 0x%p, value = %d\n",
1750	       rx_ring->prod_idx_sh_reg,
1751	       rx_ring->prod_idx_sh_reg
1752			? ql_read_sh_reg(rx_ring->prod_idx_sh_reg) : 0);
1753	pr_err("rx_ring->prod_idx_sh_reg_dma = %llx\n",
1754	       (unsigned long long) rx_ring->prod_idx_sh_reg_dma);
1755	pr_err("rx_ring->cnsmr_idx_db_reg = %p\n",
1756	       rx_ring->cnsmr_idx_db_reg);
1757	pr_err("rx_ring->cnsmr_idx = %d\n", rx_ring->cnsmr_idx);
1758	pr_err("rx_ring->curr_entry = %p\n", rx_ring->curr_entry);
1759	pr_err("rx_ring->valid_db_reg = %p\n", rx_ring->valid_db_reg);
1760
1761	pr_err("rx_ring->lbq_base = %p\n", rx_ring->lbq_base);
1762	pr_err("rx_ring->lbq_base_dma = %llx\n",
1763	       (unsigned long long) rx_ring->lbq_base_dma);
1764	pr_err("rx_ring->lbq_base_indirect = %p\n",
1765	       rx_ring->lbq_base_indirect);
1766	pr_err("rx_ring->lbq_base_indirect_dma = %llx\n",
1767	       (unsigned long long) rx_ring->lbq_base_indirect_dma);
1768	pr_err("rx_ring->lbq = %p\n", rx_ring->lbq);
1769	pr_err("rx_ring->lbq_len = %d\n", rx_ring->lbq_len);
1770	pr_err("rx_ring->lbq_size = %d\n", rx_ring->lbq_size);
1771	pr_err("rx_ring->lbq_prod_idx_db_reg = %p\n",
1772	       rx_ring->lbq_prod_idx_db_reg);
1773	pr_err("rx_ring->lbq_prod_idx = %d\n", rx_ring->lbq_prod_idx);
1774	pr_err("rx_ring->lbq_curr_idx = %d\n", rx_ring->lbq_curr_idx);
1775	pr_err("rx_ring->lbq_clean_idx = %d\n", rx_ring->lbq_clean_idx);
1776	pr_err("rx_ring->lbq_free_cnt = %d\n", rx_ring->lbq_free_cnt);
1777	pr_err("rx_ring->lbq_buf_size = %d\n", rx_ring->lbq_buf_size);
1778
1779	pr_err("rx_ring->sbq_base = %p\n", rx_ring->sbq_base);
1780	pr_err("rx_ring->sbq_base_dma = %llx\n",
1781	       (unsigned long long) rx_ring->sbq_base_dma);
1782	pr_err("rx_ring->sbq_base_indirect = %p\n",
1783	       rx_ring->sbq_base_indirect);
1784	pr_err("rx_ring->sbq_base_indirect_dma = %llx\n",
1785	       (unsigned long long) rx_ring->sbq_base_indirect_dma);
1786	pr_err("rx_ring->sbq = %p\n", rx_ring->sbq);
1787	pr_err("rx_ring->sbq_len = %d\n", rx_ring->sbq_len);
1788	pr_err("rx_ring->sbq_size = %d\n", rx_ring->sbq_size);
1789	pr_err("rx_ring->sbq_prod_idx_db_reg addr = %p\n",
1790	       rx_ring->sbq_prod_idx_db_reg);
1791	pr_err("rx_ring->sbq_prod_idx = %d\n", rx_ring->sbq_prod_idx);
1792	pr_err("rx_ring->sbq_curr_idx = %d\n", rx_ring->sbq_curr_idx);
1793	pr_err("rx_ring->sbq_clean_idx = %d\n", rx_ring->sbq_clean_idx);
1794	pr_err("rx_ring->sbq_free_cnt = %d\n", rx_ring->sbq_free_cnt);
1795	pr_err("rx_ring->sbq_buf_size = %d\n", rx_ring->sbq_buf_size);
1796	pr_err("rx_ring->cq_id = %d\n", rx_ring->cq_id);
1797	pr_err("rx_ring->irq = %d\n", rx_ring->irq);
1798	pr_err("rx_ring->cpu = %d\n", rx_ring->cpu);
1799	pr_err("rx_ring->qdev = %p\n", rx_ring->qdev);
1800}
1801
1802void ql_dump_hw_cb(struct ql_adapter *qdev, int size, u32 bit, u16 q_id)
1803{
1804	void *ptr;
1805
1806	pr_err("%s: Enter\n", __func__);
1807
1808	ptr = kmalloc(size, GFP_ATOMIC);
1809	if (ptr == NULL)
1810		return;
1811
1812	if (ql_write_cfg(qdev, ptr, size, bit, q_id)) {
1813		pr_err("%s: Failed to upload control block!\n", __func__);
1814		goto fail_it;
1815	}
1816	switch (bit) {
1817	case CFG_DRQ:
1818		ql_dump_wqicb((struct wqicb *)ptr);
1819		break;
1820	case CFG_DCQ:
1821		ql_dump_cqicb((struct cqicb *)ptr);
1822		break;
1823	case CFG_DR:
1824		ql_dump_ricb((struct ricb *)ptr);
1825		break;
1826	default:
1827		pr_err("%s: Invalid bit value = %x\n", __func__, bit);
1828		break;
1829	}
1830fail_it:
1831	kfree(ptr);
1832}
1833#endif
1834
1835#ifdef QL_OB_DUMP
1836void ql_dump_tx_desc(struct tx_buf_desc *tbd)
1837{
1838	pr_err("tbd->addr  = 0x%llx\n",
1839	       le64_to_cpu((u64) tbd->addr));
1840	pr_err("tbd->len   = %d\n",
1841	       le32_to_cpu(tbd->len & TX_DESC_LEN_MASK));
1842	pr_err("tbd->flags = %s %s\n",
1843	       tbd->len & TX_DESC_C ? "C" : ".",
1844	       tbd->len & TX_DESC_E ? "E" : ".");
1845	tbd++;
1846	pr_err("tbd->addr  = 0x%llx\n",
1847	       le64_to_cpu((u64) tbd->addr));
1848	pr_err("tbd->len   = %d\n",
1849	       le32_to_cpu(tbd->len & TX_DESC_LEN_MASK));
1850	pr_err("tbd->flags = %s %s\n",
1851	       tbd->len & TX_DESC_C ? "C" : ".",
1852	       tbd->len & TX_DESC_E ? "E" : ".");
1853	tbd++;
1854	pr_err("tbd->addr  = 0x%llx\n",
1855	       le64_to_cpu((u64) tbd->addr));
1856	pr_err("tbd->len   = %d\n",
1857	       le32_to_cpu(tbd->len & TX_DESC_LEN_MASK));
1858	pr_err("tbd->flags = %s %s\n",
1859	       tbd->len & TX_DESC_C ? "C" : ".",
1860	       tbd->len & TX_DESC_E ? "E" : ".");
1861
1862}
1863
1864void ql_dump_ob_mac_iocb(struct ob_mac_iocb_req *ob_mac_iocb)
1865{
1866	struct ob_mac_tso_iocb_req *ob_mac_tso_iocb =
1867	    (struct ob_mac_tso_iocb_req *)ob_mac_iocb;
1868	struct tx_buf_desc *tbd;
1869	u16 frame_len;
1870
1871	pr_err("%s\n", __func__);
1872	pr_err("opcode         = %s\n",
1873	       (ob_mac_iocb->opcode == OPCODE_OB_MAC_IOCB) ? "MAC" : "TSO");
1874	pr_err("flags1          = %s %s %s %s %s\n",
1875	       ob_mac_tso_iocb->flags1 & OB_MAC_TSO_IOCB_OI ? "OI" : "",
1876	       ob_mac_tso_iocb->flags1 & OB_MAC_TSO_IOCB_I ? "I" : "",
1877	       ob_mac_tso_iocb->flags1 & OB_MAC_TSO_IOCB_D ? "D" : "",
1878	       ob_mac_tso_iocb->flags1 & OB_MAC_TSO_IOCB_IP4 ? "IP4" : "",
1879	       ob_mac_tso_iocb->flags1 & OB_MAC_TSO_IOCB_IP6 ? "IP6" : "");
1880	pr_err("flags2          = %s %s %s\n",
1881	       ob_mac_tso_iocb->flags2 & OB_MAC_TSO_IOCB_LSO ? "LSO" : "",
1882	       ob_mac_tso_iocb->flags2 & OB_MAC_TSO_IOCB_UC ? "UC" : "",
1883	       ob_mac_tso_iocb->flags2 & OB_MAC_TSO_IOCB_TC ? "TC" : "");
1884	pr_err("flags3          = %s %s %s\n",
1885	       ob_mac_tso_iocb->flags3 & OB_MAC_TSO_IOCB_IC ? "IC" : "",
1886	       ob_mac_tso_iocb->flags3 & OB_MAC_TSO_IOCB_DFP ? "DFP" : "",
1887	       ob_mac_tso_iocb->flags3 & OB_MAC_TSO_IOCB_V ? "V" : "");
1888	pr_err("tid = %x\n", ob_mac_iocb->tid);
1889	pr_err("txq_idx = %d\n", ob_mac_iocb->txq_idx);
1890	pr_err("vlan_tci      = %x\n", ob_mac_tso_iocb->vlan_tci);
1891	if (ob_mac_iocb->opcode == OPCODE_OB_MAC_TSO_IOCB) {
1892		pr_err("frame_len      = %d\n",
1893		       le32_to_cpu(ob_mac_tso_iocb->frame_len));
1894		pr_err("mss      = %d\n",
1895		       le16_to_cpu(ob_mac_tso_iocb->mss));
1896		pr_err("prot_hdr_len   = %d\n",
1897		       le16_to_cpu(ob_mac_tso_iocb->total_hdrs_len));
1898		pr_err("hdr_offset     = 0x%.04x\n",
1899		       le16_to_cpu(ob_mac_tso_iocb->net_trans_offset));
1900		frame_len = le32_to_cpu(ob_mac_tso_iocb->frame_len);
1901	} else {
1902		pr_err("frame_len      = %d\n",
1903		       le16_to_cpu(ob_mac_iocb->frame_len));
1904		frame_len = le16_to_cpu(ob_mac_iocb->frame_len);
1905	}
1906	tbd = &ob_mac_iocb->tbd[0];
1907	ql_dump_tx_desc(tbd);
1908}
1909
1910void ql_dump_ob_mac_rsp(struct ob_mac_iocb_rsp *ob_mac_rsp)
1911{
1912	pr_err("%s\n", __func__);
1913	pr_err("opcode         = %d\n", ob_mac_rsp->opcode);
1914	pr_err("flags          = %s %s %s %s %s %s %s\n",
1915	       ob_mac_rsp->flags1 & OB_MAC_IOCB_RSP_OI ? "OI" : ".",
1916	       ob_mac_rsp->flags1 & OB_MAC_IOCB_RSP_I ? "I" : ".",
1917	       ob_mac_rsp->flags1 & OB_MAC_IOCB_RSP_E ? "E" : ".",
1918	       ob_mac_rsp->flags1 & OB_MAC_IOCB_RSP_S ? "S" : ".",
1919	       ob_mac_rsp->flags1 & OB_MAC_IOCB_RSP_L ? "L" : ".",
1920	       ob_mac_rsp->flags1 & OB_MAC_IOCB_RSP_P ? "P" : ".",
1921	       ob_mac_rsp->flags2 & OB_MAC_IOCB_RSP_B ? "B" : ".");
1922	pr_err("tid = %x\n", ob_mac_rsp->tid);
1923}
1924#endif
1925
1926#ifdef QL_IB_DUMP
1927void ql_dump_ib_mac_rsp(struct ib_mac_iocb_rsp *ib_mac_rsp)
1928{
1929	pr_err("%s\n", __func__);
1930	pr_err("opcode         = 0x%x\n", ib_mac_rsp->opcode);
1931	pr_err("flags1 = %s%s%s%s%s%s\n",
1932	       ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_OI ? "OI " : "",
1933	       ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_I ? "I " : "",
1934	       ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_TE ? "TE " : "",
1935	       ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_NU ? "NU " : "",
1936	       ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_IE ? "IE " : "",
1937	       ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_B ? "B " : "");
1938
1939	if (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK)
1940		pr_err("%s%s%s Multicast\n",
1941		       (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) ==
1942		       IB_MAC_IOCB_RSP_M_HASH ? "Hash" : "",
1943		       (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) ==
1944		       IB_MAC_IOCB_RSP_M_REG ? "Registered" : "",
1945		       (ib_mac_rsp->flags1 & IB_MAC_IOCB_RSP_M_MASK) ==
1946		       IB_MAC_IOCB_RSP_M_PROM ? "Promiscuous" : "");
1947
1948	pr_err("flags2 = %s%s%s%s%s\n",
1949	       (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_P) ? "P " : "",
1950	       (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_V) ? "V " : "",
1951	       (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_U) ? "U " : "",
1952	       (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_T) ? "T " : "",
1953	       (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_FO) ? "FO " : "");
1954
1955	if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK)
1956		pr_err("%s%s%s%s%s error\n",
1957		       (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) ==
1958		       IB_MAC_IOCB_RSP_ERR_OVERSIZE ? "oversize" : "",
1959		       (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) ==
1960		       IB_MAC_IOCB_RSP_ERR_UNDERSIZE ? "undersize" : "",
1961		       (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) ==
1962		       IB_MAC_IOCB_RSP_ERR_PREAMBLE ? "preamble" : "",
1963		       (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) ==
1964		       IB_MAC_IOCB_RSP_ERR_FRAME_LEN ? "frame length" : "",
1965		       (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_ERR_MASK) ==
1966		       IB_MAC_IOCB_RSP_ERR_CRC ? "CRC" : "");
1967
1968	pr_err("flags3 = %s%s\n",
1969	       ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_DS ? "DS " : "",
1970	       ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_DL ? "DL " : "");
1971
1972	if (ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_RSS_MASK)
1973		pr_err("RSS flags = %s%s%s%s\n",
1974		       ((ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_RSS_MASK) ==
1975			IB_MAC_IOCB_RSP_M_IPV4) ? "IPv4 RSS" : "",
1976		       ((ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_RSS_MASK) ==
1977			IB_MAC_IOCB_RSP_M_IPV6) ? "IPv6 RSS " : "",
1978		       ((ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_RSS_MASK) ==
1979			IB_MAC_IOCB_RSP_M_TCP_V4) ? "TCP/IPv4 RSS" : "",
1980		       ((ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_RSS_MASK) ==
1981			IB_MAC_IOCB_RSP_M_TCP_V6) ? "TCP/IPv6 RSS" : "");
1982
1983	pr_err("data_len	= %d\n",
1984	       le32_to_cpu(ib_mac_rsp->data_len));
1985	pr_err("data_addr    = 0x%llx\n",
1986	       (unsigned long long) le64_to_cpu(ib_mac_rsp->data_addr));
1987	if (ib_mac_rsp->flags3 & IB_MAC_IOCB_RSP_RSS_MASK)
1988		pr_err("rss    = %x\n",
1989		       le32_to_cpu(ib_mac_rsp->rss));
1990	if (ib_mac_rsp->flags2 & IB_MAC_IOCB_RSP_V)
1991		pr_err("vlan_id    = %x\n",
1992		       le16_to_cpu(ib_mac_rsp->vlan_id));
1993
1994	pr_err("flags4 = %s%s%s\n",
1995		ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HV ? "HV " : "",
1996		ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HS ? "HS " : "",
1997		ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HL ? "HL " : "");
1998
1999	if (ib_mac_rsp->flags4 & IB_MAC_IOCB_RSP_HV) {
2000		pr_err("hdr length	= %d\n",
2001		       le32_to_cpu(ib_mac_rsp->hdr_len));
2002		pr_err("hdr addr    = 0x%llx\n",
2003		       (unsigned long long) le64_to_cpu(ib_mac_rsp->hdr_addr));
2004	}
2005}
2006#endif
2007
2008#ifdef QL_ALL_DUMP
2009void ql_dump_all(struct ql_adapter *qdev)
2010{
2011	int i;
2012
2013	QL_DUMP_REGS(qdev);
2014	QL_DUMP_QDEV(qdev);
2015	for (i = 0; i < qdev->tx_ring_count; i++) {
2016		QL_DUMP_TX_RING(&qdev->tx_ring[i]);
2017		QL_DUMP_WQICB((struct wqicb *)&qdev->tx_ring[i]);
2018	}
2019	for (i = 0; i < qdev->rx_ring_count; i++) {
2020		QL_DUMP_RX_RING(&qdev->rx_ring[i]);
2021		QL_DUMP_CQICB((struct cqicb *)&qdev->rx_ring[i]);
2022	}
2023}
2024#endif