usr/src/uts/common/io/fibre-channel/fca/qlge/qlge_mpi.c
author Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
Mon, 05 Apr 2010 05:20:48 -0600
changeset 12073 05ba1c0d6140
parent 11023 53231798f4a8
child 13179 7f829eb09eb7
permissions -rw-r--r--
6923815 Implement FMA functionality in qlge driver 6936309 qlge 1.03 performance is only at about 2G in Sparc M series systems
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     1
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     2
 * CDDL HEADER START
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     3
 *
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     5
 * Common Development and Distribution License (the "License").
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     6
 * You may not use this file except in compliance with the License.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     7
 *
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    11
 * and limitations under the License.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    12
 *
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    18
 *
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    19
 * CDDL HEADER END
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    20
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    21
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    22
/*
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
    23
 * Copyright 2010 QLogic Corporation. All rights reserved.
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    24
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    25
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    26
#include <qlge.h>
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    27
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    28
static int ql_async_event_parser(qlge_t *, mbx_data_t *);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    29
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    30
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    31
 * Wait upto timeout seconds for Processor Interrupt
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    32
 * if timeout is 0, then wait for default waittime
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    33
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    34
static int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    35
ql_poll_processor_intr(qlge_t *qlge, uint8_t timeout)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    36
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    37
	int rtn_val = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    38
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    39
	if (ql_wait_reg_bit(qlge, REG_STATUS, STS_PI, BIT_SET, timeout)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    40
	    != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    41
		cmn_err(CE_WARN, "Polling for processor interrupt failed.");
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    42
		rtn_val = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    43
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    44
	return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    45
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    46
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    47
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    48
 * Wait for mailbox Processor Register Ready
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    49
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    50
static int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    51
ql_wait_processor_addr_reg_ready(qlge_t *qlge)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    52
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    53
	int rtn_val = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    54
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    55
	if (ql_wait_reg_bit(qlge, REG_PROCESSOR_ADDR,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    56
	    PROCESSOR_ADDRESS_RDY, BIT_SET, 0) != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    57
		cmn_err(CE_WARN,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    58
		    "Wait for processor address register ready timeout.");
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    59
		rtn_val = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    60
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    61
	return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    62
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    63
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    64
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    65
 * Read and write MPI registers using the indirect register interface
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    66
 * Assume all the locks&semaphore have been acquired
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    67
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    68
int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    69
ql_write_processor_data(qlge_t *qlge, uint32_t addr, uint32_t data)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    70
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    71
	int rtn_val = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    72
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    73
	/* wait for processor address register ready */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    74
	if (ql_wait_processor_addr_reg_ready(qlge) == DDI_FAILURE)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    75
		goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    76
	/* write the data to the data reg */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    77
	ql_write_reg(qlge, REG_PROCESSOR_DATA, data);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    78
	/* trigger the write */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    79
	ql_write_reg(qlge, REG_PROCESSOR_ADDR, addr);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    80
	/* wait for register to come ready */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    81
	if (ql_wait_processor_addr_reg_ready(qlge) == DDI_FAILURE)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    82
		goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    83
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    84
	rtn_val = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    85
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    86
out:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    87
	return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    88
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    89
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    90
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    91
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    92
 * Read from processor register
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    93
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    94
int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    95
ql_read_processor_data(qlge_t *qlge, uint32_t addr, uint32_t *data)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    96
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    97
	int rtn_val = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    98
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    99
	/* enable read operation */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   100
	addr |= PROCESSOR_ADDRESS_READ;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   101
	/* wait for processor address register ready */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   102
	if (ql_wait_processor_addr_reg_ready(qlge) == DDI_FAILURE)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   103
		goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   104
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   105
	/* Write read address, wait for data ready in Data register */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   106
	ql_write_reg(qlge, REG_PROCESSOR_ADDR, addr);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   107
	/* wait for data ready */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   108
	if (ql_wait_processor_addr_reg_ready(qlge) == DDI_FAILURE)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   109
		goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   110
	/* read data */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   111
	*data = ql_read_reg(qlge, REG_PROCESSOR_DATA);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   112
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   113
	rtn_val = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   114
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   115
out:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   116
	return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   117
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   118
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   119
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   120
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   121
 * Read "count" number of outgoing Mailbox register starting
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   122
 * from mailbox #0 if count is 0 then read all mailboxes
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   123
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   124
static int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   125
ql_read_mailbox_cmd(qlge_t *qlge, mbx_data_t *mbx_buf, uint32_t count)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   126
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   127
	int rtn_val = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   128
	uint32_t reg_status;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   129
	uint32_t addr;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   130
	int i;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   131
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   132
	if (ql_sem_spinlock(qlge, QL_PROCESSOR_SEM_MASK) != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   133
		cmn_err(CE_WARN,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   134
		    "%s(%d) get QL_PROCESSOR_SEM_MASK time out error",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   135
		    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   136
		return (DDI_FAILURE);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   137
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   138
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   139
	if (qlge->func_number == qlge->fn0_net)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   140
		addr = FUNC_0_OUT_MAILBOX_0_REG_OFFSET;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   141
	else
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   142
		addr = FUNC_1_OUT_MAILBOX_0_REG_OFFSET;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   143
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   144
	if (count == 0)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   145
		count = NUM_MAILBOX_REGS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   146
	for (i = 0; i < count; i++) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   147
		if (ql_read_processor_data(qlge, addr, &reg_status)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   148
		    == DDI_FAILURE)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   149
			goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   150
		QL_PRINT(DBG_MBX, ("%s(%d) mailbox %d value 0x%x\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   151
		    __func__, qlge->instance, i, reg_status));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   152
		mbx_buf->mb[i] = reg_status;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   153
		addr ++;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   154
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   155
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   156
	rtn_val = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   157
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   158
out:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   159
	ql_sem_unlock(qlge, QL_PROCESSOR_SEM_MASK);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   160
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   161
	return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   162
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   163
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   164
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   165
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   166
 * Write mail box command (upto 16) to MPI Firmware
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   167
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   168
int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   169
ql_issue_mailbox_cmd(qlge_t *qlge, mbx_cmd_t *mbx_cmd)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   170
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   171
	int rtn_val = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   172
	uint32_t addr;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   173
	int i;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   174
	/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   175
	 * Get semaphore to access Processor Address and
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   176
	 * Processor Data Registers
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   177
	 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   178
	if (ql_sem_spinlock(qlge, QL_PROCESSOR_SEM_MASK) != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   179
		return (DDI_FAILURE);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   180
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   181
	/* ensure no overwriting current command */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   182
	if (ql_wait_reg_bit(qlge, REG_HOST_CMD_STATUS,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   183
	    HOST_TO_MPI_INTR_NOT_DONE, BIT_RESET, 0) != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   184
		goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   185
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   186
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   187
	if (qlge->func_number == qlge->fn0_net)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   188
		addr = FUNC_0_IN_MAILBOX_0_REG_OFFSET;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   189
	else
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   190
		addr = FUNC_1_IN_MAILBOX_0_REG_OFFSET;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   191
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   192
	/* wait for mailbox registers to be ready to access */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   193
	if (ql_wait_processor_addr_reg_ready(qlge) == DDI_FAILURE)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   194
		goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   195
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   196
	/* issue mailbox command one by one */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   197
	for (i = 0; i < NUM_MAILBOX_REGS; i++) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   198
		/* write sending cmd to mailbox data register */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   199
		ql_write_reg(qlge, REG_PROCESSOR_DATA, mbx_cmd->mb[i]);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   200
		/* write mailbox address to address register */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   201
		ql_write_reg(qlge, REG_PROCESSOR_ADDR, addr);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   202
		QL_PRINT(DBG_MBX, ("%s(%d) write %x to mailbox(%x) addr %x \n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   203
		    __func__, qlge->instance, mbx_cmd->mb[i], i, addr));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   204
		addr++;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   205
		/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   206
		 * wait for mailbox cmd to be written before
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   207
		 * next write can start
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   208
		 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   209
		if (ql_wait_processor_addr_reg_ready(qlge) == DDI_FAILURE)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   210
			goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   211
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   212
	/* inform MPI that new mailbox commands are available */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   213
	ql_write_reg(qlge, REG_HOST_CMD_STATUS, HOST_CMD_SET_RISC_INTR);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   214
	rtn_val = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   215
out:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   216
	ql_sem_unlock(qlge, QL_PROCESSOR_SEM_MASK);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   217
	return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   218
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   219
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   220
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   221
 * Send mail box command (upto 16) to MPI Firmware
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   222
 * and polling for MPI mailbox completion response when
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   223
 * interrupt is not enabled.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   224
 * The MBX_LOCK mutexe should have been held and released
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   225
 * externally
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   226
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   227
int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   228
ql_issue_mailbox_cmd_and_poll_rsp(qlge_t *qlge, mbx_cmd_t *mbx_cmd,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   229
    mbx_data_t *p_results)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   230
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   231
	int rtn_val = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   232
	boolean_t done;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   233
	int max_wait;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   234
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   235
	if (mbx_cmd == NULL)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   236
		goto err;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   237
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   238
	rtn_val = ql_issue_mailbox_cmd(qlge, mbx_cmd);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   239
	if (rtn_val != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   240
		cmn_err(CE_WARN, "%s(%d) ql_issue_mailbox_cmd failed",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   241
		    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   242
		goto err;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   243
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   244
	done = B_FALSE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   245
	max_wait = 5; /* wait upto 5 PI interrupt */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   246
	/* delay for the processor interrupt is received */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   247
	while ((done != B_TRUE) && (max_wait--)) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   248
		/* wait up to 5s for PI interrupt */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   249
		if (ql_poll_processor_intr(qlge, (uint8_t)mbx_cmd->timeout)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   250
		    == DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   251
			QL_PRINT(DBG_MBX, ("%s(%d) PI Intr received",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   252
			    __func__, qlge->instance));
11016
efcd833e2d40 6871527 FCoE, qlge driver - Add NIC side of support for new Qlogic FCoE adapter, Europa (fix lint)
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 10997
diff changeset
   253
			(void) ql_read_mailbox_cmd(qlge, p_results, 0);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   254
			/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   255
			 * Sometimes, the incoming messages is not what we are
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   256
			 * waiting for, ie. async events, then, continue to
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   257
			 * wait. If it is the result * of previous mailbox
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   258
			 * command, then Done. No matter what, send
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   259
			 * HOST_CMD_CLEAR_RISC_TO_HOST_INTR to clear each
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   260
			 * PI interrupt
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   261
			 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   262
			if (ql_async_event_parser(qlge, p_results) == B_FALSE) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   263
				/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   264
				 * we get what we are waiting for,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   265
				 * clear the interrupt
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   266
				 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   267
				rtn_val = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   268
				done = B_TRUE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   269
			} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   270
				/*EMPTY*/
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   271
				QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   272
				    ("%s(%d) result ignored, not we wait for\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   273
				    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   274
			}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   275
			ql_write_reg(qlge, REG_HOST_CMD_STATUS,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   276
			    HOST_CMD_CLEAR_RISC_TO_HOST_INTR);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   277
		} else { /* timeout */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   278
			done = B_TRUE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   279
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   280
		rtn_val = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   281
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   282
err:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   283
	return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   284
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   285
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   286
 * Send mail box command (upto 16) to MPI Firmware
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   287
 * and wait for MPI mailbox completion response which
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   288
 * is saved in interrupt. Thus, this function can only
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   289
 * be used after interrupt is enabled.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   290
 * Must hold MBX mutex before calling this function
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   291
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   292
static int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   293
ql_issue_mailbox_cmd_and_wait_rsp(qlge_t *qlge, mbx_cmd_t *mbx_cmd)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   294
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   295
	int rtn_val = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   296
	clock_t timer;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   297
	int i;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   298
	int done = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   299
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   300
	if (mbx_cmd == NULL)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   301
		goto err;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   302
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   303
	ASSERT(mutex_owned(&qlge->mbx_mutex));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   304
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   305
	/* if interrupts are not enabled, poll when results are available */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   306
	if (!(qlge->flags & INTERRUPTS_ENABLED)) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   307
		rtn_val = ql_issue_mailbox_cmd_and_poll_rsp(qlge, mbx_cmd,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   308
		    &qlge->received_mbx_cmds);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   309
		if (rtn_val == DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   310
			for (i = 0; i < NUM_MAILBOX_REGS; i++)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   311
				mbx_cmd->mb[i] = qlge->received_mbx_cmds.mb[i];
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   312
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   313
	} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   314
		rtn_val = ql_issue_mailbox_cmd(qlge, mbx_cmd);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   315
		if (rtn_val != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   316
			cmn_err(CE_WARN, "%s(%d) ql_issue_mailbox_cmd failed",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   317
			    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   318
			goto err;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   319
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   320
		qlge->mbx_wait_completion = 1;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   321
		while (!done && qlge->mbx_wait_completion && !ddi_in_panic()) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   322
			/* default 5 seconds from now to timeout */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   323
			timer = ddi_get_lbolt();
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   324
			if (mbx_cmd->timeout) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   325
				timer +=
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   326
				    mbx_cmd->timeout * drv_usectohz(1000000);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   327
			} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   328
				timer += 5 * drv_usectohz(1000000);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   329
			}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   330
			if (cv_timedwait(&qlge->cv_mbx_intr, &qlge->mbx_mutex,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   331
			    timer) == -1) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   332
				/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   333
				 * The timeout time 'timer' was
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   334
				 * reached or expired without the condition
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   335
				 * being signaled.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   336
				 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   337
				cmn_err(CE_WARN, "%s(%d) Wait for Mailbox cmd "
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   338
				    "complete timeout.",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   339
				    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   340
				rtn_val = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   341
				done = 1;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   342
			} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   343
				QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   344
				    ("%s(%d) mailbox completion signal received"
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   345
				    " \n", __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   346
				for (i = 0; i < NUM_MAILBOX_REGS; i++) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   347
					mbx_cmd->mb[i] =
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   348
					    qlge->received_mbx_cmds.mb[i];
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   349
				}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   350
				rtn_val = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   351
				done = 1;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   352
			}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   353
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   354
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   355
err:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   356
	return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   357
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   358
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   359
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   360
 * Inteprete incoming asynchronous events
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   361
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   362
static int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   363
ql_async_event_parser(qlge_t *qlge, mbx_data_t *mbx_cmds)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   364
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   365
	uint32_t link_status, cmd;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   366
	uint8_t link_speed;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   367
	uint8_t link_type;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   368
	boolean_t proc_done = B_TRUE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   369
	mbx_cmd_t reply_cmd = {0};
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   370
	boolean_t fatal_error = B_FALSE;
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   371
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   372
	switch (mbx_cmds->mb[0]) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   373
	case MBA_IDC_INTERMEDIATE_COMPLETE /* 1000h */:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   374
		QL_PRINT(DBG_MBX, ("%s(%d):"
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   375
		    "MBA_IDC_INTERMEDIATE_COMPLETE received\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   376
		    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   377
		break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   378
	case MBA_SYSTEM_ERR /* 8002h */:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   379
		cmn_err(CE_WARN, "%s(%d): MBA_SYSTEM_ERR received",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   380
		    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   381
		cmn_err(CE_WARN, "%s(%d): File id %x, Line # %x,"
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   382
		    "Firmware Ver# %x",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   383
		    __func__, qlge->instance, mbx_cmds->mb[1],
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   384
		    mbx_cmds->mb[2], mbx_cmds->mb[3]);
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   385
		fatal_error = B_TRUE;
11016
efcd833e2d40 6871527 FCoE, qlge driver - Add NIC side of support for new Qlogic FCoE adapter, Europa (fix lint)
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 10997
diff changeset
   386
		(void) ql_8xxx_binary_core_dump(qlge, &qlge->ql_mpi_coredump);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   387
		break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   388
	case MBA_LINK_UP /* 8011h */:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   389
		QL_PRINT(DBG_MBX, ("%s(%d): MBA_LINK_UP received\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   390
		    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   391
		link_status = mbx_cmds->mb[1];
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   392
		QL_PRINT(DBG_MBX, ("%s(%d): Link Status %x \n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   393
		    __func__, qlge->instance, link_status));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   394
		link_speed = (uint8_t)((link_status >> 3) & 0x07);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   395
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   396
		if (link_speed == 0) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   397
			qlge->speed = SPEED_100;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   398
			QL_PRINT(DBG_MBX, ("%s(%d):Link speed 100M\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   399
			    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   400
		} else if (link_speed == 1) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   401
			qlge->speed = SPEED_1000;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   402
			QL_PRINT(DBG_MBX, ("%s(%d):Link speed 1G\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   403
			    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   404
		} else if (link_speed == 2) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   405
			qlge->speed = SPEED_10G;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   406
			QL_PRINT(DBG_MBX, ("%s(%d):Link speed 10G\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   407
			    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   408
			}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   409
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   410
		qlge->link_type = link_type = (uint8_t)(link_status & 0x07);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   411
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   412
		if (link_type == XFI_NETWORK_INTERFACE) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   413
			/* EMPTY */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   414
			QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   415
			    ("%s(%d):Link type XFI_NETWORK_INTERFACE\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   416
			    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   417
		} else if (link_type == XAUI_NETWORK_INTERFACE) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   418
			/* EMPTY */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   419
			QL_PRINT(DBG_MBX, ("%s(%d):Link type"
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   420
			    "XAUI_NETWORK_INTERFACE\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   421
			    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   422
		} else if (link_type == XFI_BACKPLANE_INTERFACE) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   423
			/* EMPTY */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   424
			QL_PRINT(DBG_MBX, ("%s(%d):Link type"
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   425
			    "XFI_BACKPLANE_INTERFACE\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   426
			    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   427
		} else if (link_type == XAUI_BACKPLANE_INTERFACE) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   428
			/* EMPTY */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   429
			QL_PRINT(DBG_MBX, ("%s(%d):Link type "
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   430
			    "XAUI_BACKPLANE_INTERFACE\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   431
			    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   432
		} else if (link_type == EXT_10GBASE_T_PHY) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   433
			/* EMPTY */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   434
			QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   435
			    ("%s(%d):Link type EXT_10GBASE_T_PHY\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   436
			    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   437
		} else if (link_type == EXT_EXT_EDC_PHY) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   438
			/* EMPTY */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   439
			QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   440
			    ("%s(%d):Link type EXT_EXT_EDC_PHY\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   441
			    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   442
		} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   443
			/* EMPTY */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   444
			QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   445
			    ("%s(%d):unknown Link type \n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   446
			    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   447
		}
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   448
		cmn_err(CE_NOTE, "qlge(%d) mpi link up! speed %dMbps\n",
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   449
		    qlge->instance, qlge->speed);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   450
		/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   451
		 * start timer if not started to delay some time then
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   452
		 * check if link is really up or down
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   453
		 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   454
		ql_restart_timer(qlge);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   455
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   456
		break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   457
	case MBA_LINK_DOWN /* 8012h */:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   458
		QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   459
		    ("%s(%d): MBA_LINK_DOWN received\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   460
		    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   461
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   462
		link_status = mbx_cmds->mb[1];
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   463
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   464
		QL_PRINT(DBG_MBX, ("%s(%d): Link Status %x \n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   465
		    __func__, qlge->instance, link_status));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   466
		if (link_status & 0x1) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   467
			/* EMPTY */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   468
			QL_PRINT(DBG_MBX, ("%s(%d): Loss of signal \n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   469
			    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   470
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   471
		if (link_status & 0x2) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   472
			/* EMPTY */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   473
			QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   474
			    ("%s(%d): Auto-Negotiation Failed \n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   475
			    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   476
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   477
		if (link_status & 0x4) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   478
			/* EMPTY */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   479
			QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   480
			    ("%s(%d): XTI-Training Failed \n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   481
			    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   482
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   483
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   484
		cmn_err(CE_NOTE, "qlge(%d) mpi link down!\n", qlge->instance);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   485
		ql_restart_timer(qlge);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   486
		break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   487
	case MBA_IDC_COMPLETE /* 8100h */:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   488
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   489
		QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   490
		    ("%s(%d): MBA_IDC_COMPLETE received\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   491
		    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   492
		cmd = mbx_cmds->mb[1];
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   493
		if (cmd == MBC_STOP_FIRMWARE) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   494
			/* EMPTY */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   495
			QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   496
			    ("%s(%d): STOP_FIRMWARE event completed\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   497
			    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   498
		} else if (cmd == MBC_IDC_REQUEST) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   499
			/* EMPTY */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   500
			QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   501
			    ("%s(%d): IDC_REQUEST event completed\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   502
			    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   503
		} else if (cmd == MBC_PORT_RESET) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   504
			/* EMPTY */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   505
			QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   506
			    ("%s(%d): PORT_RESET event completed\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   507
			    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   508
		} else if (cmd == MBC_SET_PORT_CONFIG) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   509
			/* EMPTY */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   510
			QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   511
			    ("%s(%d): SET_PORT_CONFIG event "
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   512
			    "completed\n", __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   513
		} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   514
			/* EMPTY */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   515
			QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   516
			    ("%s(%d): unknown IDC completion request"
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   517
			    " event %x %x\n", __func__, qlge->instance,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   518
			    mbx_cmds->mb[1], mbx_cmds->mb[2]));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   519
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   520
		proc_done = B_FALSE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   521
		break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   522
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   523
	case MBA_IDC_REQUEST_NOTIFICATION /* 8101h */:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   524
		QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   525
		    ("%s(%d): MBA_IDC_REQUEST_NOTIFICATION "
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   526
		    "received\n", __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   527
		cmd = mbx_cmds->mb[1];
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   528
		if (cmd == MBC_STOP_FIRMWARE) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   529
			/* EMPTY */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   530
			QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   531
			    ("%s(%d): STOP_FIRMWARE notification"
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   532
			    " received\n", __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   533
		} else if (cmd == MBC_IDC_REQUEST) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   534
			/* EMPTY */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   535
			QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   536
			    ("%s(%d): IDC_REQUEST notification "
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   537
			    "received\n", __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   538
		} else if (cmd == MBC_PORT_RESET) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   539
			/* EMPTY */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   540
			QL_PRINT(DBG_MBX, ("%s(%d): PORT_RESET "
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   541
			    "notification received\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   542
			    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   543
		} else if (cmd == MBC_SET_PORT_CONFIG) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   544
			/* EMPTY */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   545
			QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   546
			    ("%s(%d): SET_PORT_CONFIG notification "
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   547
			    "received\n", __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   548
		} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   549
			/* EMPTY */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   550
			QL_PRINT(DBG_MBX, ("%s(%d): "
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   551
			    "unknown request received %x %x\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   552
			    __func__, qlge->instance, mbx_cmds->mb[1],
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   553
			    mbx_cmds->mb[2]));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   554
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   555
		reply_cmd.mb[0] = MBC_IDC_ACK;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   556
		reply_cmd.mb[1] = mbx_cmds->mb[1];
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   557
		reply_cmd.mb[2] = mbx_cmds->mb[2];
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   558
		reply_cmd.mb[3] = mbx_cmds->mb[3];
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   559
		reply_cmd.mb[4] = mbx_cmds->mb[4];
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   560
		if (ql_issue_mailbox_cmd(qlge, &reply_cmd)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   561
		    != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   562
			cmn_err(CE_WARN,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   563
			    "%s(%d) send IDC Ack failed.",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   564
			    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   565
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   566
		/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   567
		 * verify if the incoming outbound mailbox value is what
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   568
		 * we just sent
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   569
		 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   570
		if (mbx_cmds->mb[0] == MBS_COMMAND_COMPLETE) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   571
			/* 0x4000 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   572
			/* EMPTY */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   573
			QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   574
			    ("%s(%d): IDC Ack sent success.\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   575
			    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   576
			} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   577
			/* EMPTY */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   578
			QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   579
			    ("%s(%d): IDC Ack reply error %x %x %x.\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   580
			    __func__, qlge->instance, mbx_cmds->mb[0],
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   581
			    mbx_cmds->mb[1], mbx_cmds->mb[2]));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   582
			}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   583
		break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   584
	case MBA_IDC_TIME_EXTENDED /* 8102 */:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   585
		QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   586
		    ("%s(%d): MBA_IDC_TIME_EXTENDED received\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   587
		    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   588
		break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   589
	case MBA_DCBX_CONFIG_CHANGE /* 8110 */:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   590
		QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   591
		    ("%s(%d): MBA_DCBX_CONFIG_CHANGE received\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   592
		    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   593
		break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   594
	case MBA_NOTIFICATION_LOST /* 8120 */:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   595
		QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   596
		    ("%s(%d): MBA_NOTIFICATION_LOST received\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   597
		    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   598
		break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   599
	case MBA_SFT_TRANSCEIVER_INSERTION /* 8130 */:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   600
		QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   601
		    ("%s(%d): MBA_SFT_TRANSCEIVER_INSERTION "
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   602
		    "received\n", __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   603
		break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   604
	case MBA_SFT_TRANSCEIVER_REMOVAL /* 8140 */:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   605
		QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   606
		    ("%s(%d): MBA_SFT_TRANSCEIVER_REMOVAL "
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   607
		    "received\n", __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   608
		break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   609
	case MBA_FIRMWARE_INIT_COMPLETE /* 8400 */:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   610
		QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   611
		    ("%s(%d): MBA_FIRMWARE_INIT_COMPLETE "
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   612
		    "received\n", __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   613
		QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   614
		    ("%s(%d): mbx[1] %x, mbx[2] %x\n", __func__,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   615
		    qlge->instance, mbx_cmds->mb[1], mbx_cmds->mb[2]));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   616
		qlge->fw_init_complete = B_TRUE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   617
		qlge->fw_version_info.major_version =
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   618
		    LSB(MSW(mbx_cmds->mb[1]));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   619
		qlge->fw_version_info.minor_version =
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   620
		    MSB(LSW(mbx_cmds->mb[1]));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   621
		qlge->fw_version_info.sub_minor_version =
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   622
		    LSB(LSW(mbx_cmds->mb[1]));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   623
		qlge->phy_version_info.major_version =
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   624
		    LSB(MSW(mbx_cmds->mb[2]));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   625
		qlge->phy_version_info.minor_version =
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   626
		    MSB(LSW(mbx_cmds->mb[2]));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   627
		qlge->phy_version_info.sub_minor_version =
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   628
		    LSB(LSW(mbx_cmds->mb[2]));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   629
		break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   630
	case MBA_FIRMWARE_INIT_FAILED /* 8401 */:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   631
		cmn_err(CE_WARN, "%s(%d):"
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   632
		    "ASYNC_EVENT_FIRMWARE_INIT_FAILURE "
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   633
		    "received:  mbx[1] %x, mbx[2] %x",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   634
		    __func__, qlge->instance,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   635
		    mbx_cmds->mb[1], mbx_cmds->mb[2]);
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   636
		fatal_error = B_TRUE;
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   637
		break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   638
	default:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   639
		if (mbx_cmds->mb[0] > 0x8000) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   640
			cmn_err(CE_WARN, "%s(%d): "
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   641
			    "Unknown Async event received: mbx[0] %x ,"
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   642
			    "mbx[1] %x; mbx[2] %x",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   643
			    __func__, qlge->instance,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   644
			    mbx_cmds->mb[0], mbx_cmds->mb[1],
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   645
			    mbx_cmds->mb[2]);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   646
			proc_done = B_TRUE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   647
		} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   648
			proc_done = B_FALSE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   649
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   650
		break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   651
	}
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   652
	if (fatal_error) {
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   653
		if (qlge->fm_enable) {
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   654
			ql_fm_ereport(qlge, DDI_FM_DEVICE_NO_RESPONSE);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   655
			ddi_fm_service_impact(qlge->dip, DDI_SERVICE_LOST);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   656
			atomic_or_32(&qlge->flags, ADAPTER_ERROR);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   657
		}
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   658
	}
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   659
	return (proc_done);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   660
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   661
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   662
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   663
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   664
 * MPI Interrupt handler
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   665
 * Caller must have MBX_LOCK
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   666
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   667
void
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   668
ql_do_mpi_intr(qlge_t *qlge)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   669
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   670
	/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   671
	 * we just need to read first few mailboxes that this adapter's MPI
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   672
	 * will write response to.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   673
	 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   674
	mutex_enter(&qlge->mbx_mutex);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   675
11016
efcd833e2d40 6871527 FCoE, qlge driver - Add NIC side of support for new Qlogic FCoE adapter, Europa (fix lint)
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 10997
diff changeset
   676
	(void) ql_read_mailbox_cmd(qlge, &qlge->received_mbx_cmds,
efcd833e2d40 6871527 FCoE, qlge driver - Add NIC side of support for new Qlogic FCoE adapter, Europa (fix lint)
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 10997
diff changeset
   677
	    qlge->max_read_mbx);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   678
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   679
	/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   680
	 * process PI interrupt as async events, if not done,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   681
	 * then pass to mailbox processing
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   682
	 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   683
	if (ql_async_event_parser(qlge, &qlge->received_mbx_cmds) == B_FALSE) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   684
		QL_PRINT(DBG_MBX, ("%s(%d) mailbox completion interrupt\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   685
		    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   686
		/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   687
		 * If another thread is waiting for the mail box
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   688
		 * completion event to occur
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   689
		 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   690
		if (qlge->mbx_wait_completion == 1) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   691
			qlge->mbx_wait_completion = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   692
			cv_broadcast(&qlge->cv_mbx_intr);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   693
			QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   694
			    ("%s(%d) mailbox completion signaled \n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   695
			    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   696
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   697
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   698
	/* inform MPI Firmware to clear the interrupt */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   699
	ql_write_reg(qlge, REG_HOST_CMD_STATUS,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   700
	    HOST_CMD_CLEAR_RISC_TO_HOST_INTR /* 0x0A */);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   701
	mutex_exit(&qlge->mbx_mutex);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   702
	ql_enable_completion_interrupt(qlge, 0); /* MPI is on irq 0 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   703
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   704
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   705
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   706
 * Test if mailbox communication works
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   707
 * This is used when Interrupt is not enabled
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   708
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   709
int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   710
ql_mbx_test(qlge_t *qlge)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   711
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   712
	mbx_cmd_t mbx_cmds;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   713
	mbx_data_t mbx_results;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   714
	int i, test_ok = 1;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   715
	int rtn_val = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   716
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   717
	for (i = 0; i < NUM_MAILBOX_REGS; i++)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   718
		mbx_cmds.mb[i] = i;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   719
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   720
	mbx_cmds.mb[0] = MBC_MAILBOX_REGISTER_TEST; /* 0x06 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   721
	if (ql_issue_mailbox_cmd(qlge, &mbx_cmds) != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   722
		cmn_err(CE_WARN, "%s(%d) ql_issue_mailbox_cmd timeout.",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   723
		    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   724
		goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   725
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   726
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   727
	/* delay for the processor interrupt is received */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   728
	if (ql_poll_processor_intr(qlge, (uint8_t)mbx_cmds.timeout)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   729
	    == DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   730
		QL_PRINT(DBG_MBX, ("%s(%d) PI Intr received",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   731
		    __func__, qlge->instance));
11016
efcd833e2d40 6871527 FCoE, qlge driver - Add NIC side of support for new Qlogic FCoE adapter, Europa (fix lint)
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 10997
diff changeset
   732
		(void) ql_read_mailbox_cmd(qlge, &mbx_results, 0);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   733
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   734
		ql_write_reg(qlge, REG_HOST_CMD_STATUS,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   735
		    HOST_CMD_CLEAR_RISC_TO_HOST_INTR);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   736
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   737
		if (mbx_results.mb[0] != MBS_COMMAND_COMPLETE /* 0x4000 */) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   738
			test_ok = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   739
		} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   740
			for (i = 1; i < NUM_MAILBOX_REGS; i++) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   741
				if (mbx_results.mb[i] != i) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   742
					test_ok = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   743
					break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   744
				}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   745
			}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   746
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   747
		if (test_ok) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   748
			rtn_val = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   749
		} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   750
			cmn_err(CE_WARN, "%s(%d) mailbox test failed!",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   751
			    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   752
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   753
	} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   754
		cmn_err(CE_WARN, "%s(%d) mailbox testing error: "
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   755
		    "PI Intr not received ", __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   756
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   757
out:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   758
	return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   759
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   760
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   761
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   762
 * ql_mbx_test2
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   763
 * Test if mailbox communication works
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   764
 * This is used when Interrupt is enabled
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   765
 * mailbox cmd:0x06h
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   766
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   767
int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   768
ql_mbx_test2(qlge_t *qlge)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   769
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   770
	mbx_cmd_t mbx_cmds = {0};
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   771
	int i, test_ok = 1;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   772
	int rtn_val = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   773
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   774
	for (i = 0; i < NUM_MAILBOX_REGS; i++)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   775
		mbx_cmds.mb[i] = i;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   776
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   777
	mbx_cmds.mb[0] = MBC_MAILBOX_REGISTER_TEST; /* 0x06 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   778
	if (ql_issue_mailbox_cmd_and_wait_rsp(qlge, &mbx_cmds) != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   779
		cmn_err(CE_WARN,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   780
		    "%s(%d) ql_issue_mailbox_cmd_and_wait_rsp failed.",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   781
		    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   782
		goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   783
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   784
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   785
	/* verify if the incoming outbound mailbox value is what we just sent */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   786
	if (mbx_cmds.mb[0] != MBS_COMMAND_COMPLETE /* 0x4000 */) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   787
		test_ok = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   788
	} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   789
		for (i = 1; i < qlge->max_read_mbx; i++) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   790
			if (mbx_cmds.mb[i] != i) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   791
				test_ok = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   792
				break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   793
			}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   794
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   795
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   796
	if (test_ok) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   797
		rtn_val = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   798
	} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   799
		cmn_err(CE_WARN, "%s(%d) mailbox test failed!",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   800
		    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   801
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   802
out:
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   803
	if ((rtn_val != DDI_SUCCESS) && qlge->fm_enable) {
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   804
		ql_fm_ereport(qlge, DDI_FM_DEVICE_NO_RESPONSE);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   805
		ddi_fm_service_impact(qlge->dip, DDI_SERVICE_DEGRADED);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   806
	}
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   807
	return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   808
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   809
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   810
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   811
 * ql_get_fw_state
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   812
 * Get fw state.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   813
 * mailbox cmd:0x69h
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   814
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   815
int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   816
ql_get_fw_state(qlge_t *qlge, uint32_t *fw_state_ptr)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   817
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   818
	int rtn_val = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   819
	mbx_cmd_t mbx_cmds = {0};
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   820
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   821
	mbx_cmds.mb[0] = MBC_GET_FIRMWARE_STATE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   822
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   823
	if (ql_issue_mailbox_cmd_and_wait_rsp(qlge, &mbx_cmds)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   824
	    != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   825
		cmn_err(CE_WARN, "%s(%d) ql_issue_mailbox_cmd_and_wait_rsp"
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   826
		    " failed.", __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   827
		goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   828
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   829
	/* verify if the transaction is completed successful */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   830
	if (mbx_cmds.mb[0] != MBS_COMMAND_COMPLETE /* 0x4000 */) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   831
		cmn_err(CE_WARN, "%s(%d) failed, 0x%x",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   832
		    __func__, qlge->instance, mbx_cmds.mb[0]);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   833
	} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   834
		/* EMPTY */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   835
		QL_PRINT(DBG_MBX, ("firmware state: 0x%x\n", mbx_cmds.mb[1]));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   836
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   837
	if (fw_state_ptr != NULL)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   838
		*fw_state_ptr = mbx_cmds.mb[1];
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   839
	rtn_val = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   840
out:
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   841
	if ((rtn_val != DDI_SUCCESS) && qlge->fm_enable) {
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   842
		ql_fm_ereport(qlge, DDI_FM_DEVICE_NO_RESPONSE);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   843
		ddi_fm_service_impact(qlge->dip, DDI_SERVICE_DEGRADED);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   844
	}
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   845
	return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   846
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   847
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   848
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   849
 * ql_set_IDC_Req
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   850
 * Send a IDC Request to firmware to notify all functions
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   851
 * or any specific functions on the same port
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   852
 * mailbox cmd:0x100h
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   853
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   854
int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   855
ql_set_IDC_Req(qlge_t *qlge, uint8_t dest_functions, uint8_t timeout)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   856
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   857
	int rtn_val = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   858
	mbx_cmd_t mbx_cmds = {0};
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   859
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   860
	mbx_cmds.mb[0] = MBC_IDC_REQUEST /* 0x100 */;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   861
	mbx_cmds.mb[1] = (timeout<<8) | qlge->func_number;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   862
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   863
	switch (dest_functions) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   864
	case IDC_REQ_DEST_FUNC_ALL:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   865
		mbx_cmds.mb[1] |= IDC_REQ_ALL_DEST_FUNC_MASK;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   866
		mbx_cmds.mb[2] = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   867
		break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   868
	case IDC_REQ_DEST_FUNC_0:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   869
		mbx_cmds.mb[2] = IDC_REQ_DEST_FUNC_0_MASK;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   870
		break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   871
	case IDC_REQ_DEST_FUNC_1:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   872
		mbx_cmds.mb[2] = IDC_REQ_DEST_FUNC_1_MASK;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   873
		break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   874
	case IDC_REQ_DEST_FUNC_2:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   875
		mbx_cmds.mb[2] = IDC_REQ_DEST_FUNC_2_MASK;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   876
		break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   877
	case IDC_REQ_DEST_FUNC_3:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   878
		mbx_cmds.mb[2] = IDC_REQ_DEST_FUNC_3_MASK;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   879
		break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   880
	default:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   881
		cmn_err(CE_WARN, "Wrong dest functions %x",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   882
		    dest_functions);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   883
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   884
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   885
	if (ql_issue_mailbox_cmd_and_wait_rsp(qlge, &mbx_cmds) != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   886
		cmn_err(CE_WARN,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   887
		    "%s(%d) ql_issue_mailbox_cmd_and_wait_rsp failed.",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   888
		    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   889
		goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   890
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   891
	/* verify if the transaction is completed successful */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   892
	if (mbx_cmds.mb[0] == MBA_IDC_INTERMEDIATE_COMPLETE /* 0x1000 */) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   893
		QL_PRINT(DBG_MBX, ("%s(%d) mbx1: 0x%x, mbx2: 0x%x\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   894
		    __func__, qlge->instance, mbx_cmds.mb[1], mbx_cmds.mb[2]));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   895
		rtn_val = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   896
	} else if (mbx_cmds.mb[0] == MBS_COMMAND_COMPLETE /* 0x4000 */) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   897
		QL_PRINT(DBG_MBX, ("%s(%d) cmd sent succesfully 0x%x\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   898
		    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   899
		rtn_val = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   900
	} else if (mbx_cmds.mb[0] == MBS_COMMAND_ERROR /* 0x4005 */) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   901
		cmn_err(CE_WARN, "%s(%d) failed: COMMAND_ERROR",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   902
		    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   903
	} else if (mbx_cmds.mb[0] == MBS_COMMAND_PARAMETER_ERROR /* 0x4006 */) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   904
		cmn_err(CE_WARN, "%s(%d) failed: COMMAND_PARAMETER_ERROR",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   905
		    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   906
	} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   907
		cmn_err(CE_WARN, "%s(%d) unknow result: mbx[0]: 0x%x; mbx[1]:"
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   908
		    " 0x%x; mbx[2]: 0x%x", __func__, qlge->instance,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   909
		    mbx_cmds.mb[0], mbx_cmds.mb[1], mbx_cmds.mb[2]);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   910
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   911
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   912
out:
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   913
	if ((rtn_val != DDI_SUCCESS) && qlge->fm_enable) {
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   914
		ql_fm_ereport(qlge, DDI_FM_DEVICE_NO_RESPONSE);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   915
		ddi_fm_service_impact(qlge->dip, DDI_SERVICE_DEGRADED);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   916
	}
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   917
return (rtn_val);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   918
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   919
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   920
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   921
 * ql_set_mpi_port_config
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   922
 * Send new port configuration.to mpi
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   923
 * mailbox cmd:0x122h
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   924
 */
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   925
int
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   926
ql_set_mpi_port_config(qlge_t *qlge, port_cfg_info_t new_cfg)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   927
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   928
	int rtn_val = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   929
	mbx_cmd_t mbx_cmds = {0};
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   930
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   931
	mbx_cmds.mb[0] = MBC_SET_PORT_CONFIG /* 0x122 */;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   932
	mbx_cmds.mb[1] = new_cfg.link_cfg;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   933
	mbx_cmds.mb[2] = new_cfg.max_frame_size;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   934
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   935
	if (ql_issue_mailbox_cmd_and_wait_rsp(qlge, &mbx_cmds) != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   936
		cmn_err(CE_WARN, "%s(%d) ql_issue_mailbox_cmd_and_wait_rsp"
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   937
		    " failed.", __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   938
		goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   939
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   940
	/* verify if the transaction is completed successful */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   941
	if ((mbx_cmds.mb[0] != MBS_COMMAND_COMPLETE /* 0x4000 */) &&
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   942
	    (mbx_cmds.mb[0] != MBA_IDC_COMPLETE /* 0x8100 */)) {
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   943
		cmn_err(CE_WARN, "set port config (%d) failed, 0x%x",
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   944
		    qlge->instance, mbx_cmds.mb[0]);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   945
	} else
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   946
		rtn_val = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   947
out:
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   948
	if ((rtn_val != DDI_SUCCESS) && qlge->fm_enable) {
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   949
		ql_fm_ereport(qlge, DDI_FM_DEVICE_NO_RESPONSE);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   950
		ddi_fm_service_impact(qlge->dip, DDI_SERVICE_DEGRADED);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   951
	}
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   952
	return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   953
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   954
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   955
int
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   956
ql_set_pause_mode(qlge_t *qlge)
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   957
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   958
	uint32_t pause_bit_mask = 0x60;	/* bit 5-6 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   959
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   960
	/* clear pause bits */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   961
	qlge->port_cfg_info.link_cfg &= ~pause_bit_mask;
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   962
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   963
	/* set new pause mode */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   964
	if (qlge->pause == PAUSE_MODE_STANDARD)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   965
		qlge->port_cfg_info.link_cfg |= STD_PAUSE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   966
	else if (qlge->pause == PAUSE_MODE_PER_PRIORITY)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   967
		qlge->port_cfg_info.link_cfg |= PP_PAUSE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   968
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   969
	return (ql_set_mpi_port_config(qlge, qlge->port_cfg_info));
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   970
}
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   971
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   972
int
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   973
ql_set_loop_back_mode(qlge_t *qlge)
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   974
{
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   975
	uint32_t loop_back_bit_mask = 0x0e; /* bit 1-3 */
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   976
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   977
	/* clear loop back bits */
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   978
	qlge->port_cfg_info.link_cfg &= ~loop_back_bit_mask;
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   979
	/* loop back cfg: bit1-3 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   980
	if (qlge->loop_back_mode == QLGE_LOOP_INTERNAL_PARALLEL)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   981
		qlge->port_cfg_info.link_cfg |= LOOP_INTERNAL_PARALLEL;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   982
	else if (qlge->loop_back_mode == QLGE_LOOP_INTERNAL_SERIAL)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   983
		qlge->port_cfg_info.link_cfg |= LOOP_INTERNAL_SERIAL;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   984
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   985
	return (ql_set_mpi_port_config(qlge, qlge->port_cfg_info));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   986
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   987
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   988
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   989
 * ql_get_port_cfg
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   990
 * Get port configuration.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   991
 * mailbox cmd:0x123h
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   992
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   993
int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   994
ql_get_port_cfg(qlge_t *qlge)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   995
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   996
	int rtn_val = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   997
	mbx_cmd_t mbx_cmds = {0};
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   998
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   999
	mbx_cmds.mb[0] = MBC_GET_PORT_CONFIG /* 0x123 */;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1000
	if (ql_issue_mailbox_cmd_and_wait_rsp(qlge, &mbx_cmds) != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1001
		cmn_err(CE_WARN, "%s(%d) ql_issue_mailbox_cmd_and_wait_rsp"
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1002
		    " failed.", __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1003
		goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1004
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1005
	/* verify if the transaction is completed successfully */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1006
	if (mbx_cmds.mb[0] != MBS_COMMAND_COMPLETE /* 0x4000 */) {
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
  1007
		cmn_err(CE_WARN, "get port config (%d) failed, 0x%x",
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
  1008
		    qlge->instance, mbx_cmds.mb[0]);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1009
	} else { /* verify frame size */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1010
		if ((mbx_cmds.mb[2] == NORMAL_FRAME_SIZE) ||
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1011
		    (mbx_cmds.mb[2] == JUMBO_FRAME_SIZE)) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1012
			qlge->port_cfg_info.link_cfg = mbx_cmds.mb[1];
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1013
			qlge->port_cfg_info.max_frame_size = mbx_cmds.mb[2];
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1014
			QL_PRINT(DBG_MBX, ("link_cfg: 0x%x, max_frame_size:"
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1015
			    " %d bytes\n", mbx_cmds.mb[1], mbx_cmds.mb[2]));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1016
			rtn_val = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1017
		} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1018
			cmn_err(CE_WARN, "bad link_cfg: 0x%x, max_frame_size:"
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1019
			    " %d bytes", mbx_cmds.mb[1], mbx_cmds.mb[2]);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1020
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1021
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1022
out:
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
  1023
	if ((rtn_val != DDI_SUCCESS) && qlge->fm_enable) {
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
  1024
		ql_fm_ereport(qlge, DDI_FM_DEVICE_NO_RESPONSE);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
  1025
		ddi_fm_service_impact(qlge->dip, DDI_SERVICE_DEGRADED);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
  1026
	}
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1027
	return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1028
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1029
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1030
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1031
 * qlge_get_link_status
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1032
 * Get link status.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1033
 * mailbox cmd:0x124h
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1034
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1035
int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1036
qlge_get_link_status(qlge_t *qlge,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1037
    struct qlnic_link_status_info *link_status_ptr)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1038
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1039
	int rtn_val = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1040
	mbx_cmd_t mbx_cmds = {0};
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1041
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1042
	mbx_cmds.mb[0] = MBC_GET_LINK_STATUS /* 0x124 */;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1043
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1044
	if (ql_issue_mailbox_cmd_and_wait_rsp(qlge, &mbx_cmds)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1045
	    != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1046
		cmn_err(CE_WARN,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1047
		    "%s(%d) ql_issue_mailbox_cmd_and_wait_rsp failed.",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1048
		    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1049
		goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1050
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1051
	/* verify if the transaction is completed successful */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1052
	if (mbx_cmds.mb[0] != MBS_COMMAND_COMPLETE /* 0x4000 */) {
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
  1053
		cmn_err(CE_WARN, "get link status(%d) failed, 0x%x",
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1054
		    qlge->instance, mbx_cmds.mb[0]);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1055
	} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1056
		/* EMPTY */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1057
		QL_PRINT(DBG_MBX,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1058
		    ("link status: status1 : 0x%x, status2 : 0x%x, "
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1059
		    "status3 : 0x%x\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1060
		    mbx_cmds.mb[1], mbx_cmds.mb[2], mbx_cmds.mb[3]));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1061
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1062
	if (link_status_ptr != NULL) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1063
		link_status_ptr->link_status_info = mbx_cmds.mb[1];
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1064
		link_status_ptr->additional_info = mbx_cmds.mb[2];
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1065
		link_status_ptr->network_hw_info = mbx_cmds.mb[3];
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1066
		link_status_ptr->dcbx_frame_counters_info = mbx_cmds.mb[4];
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1067
		link_status_ptr->change_counters_info = mbx_cmds.mb[5];
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1068
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1069
	rtn_val = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1070
out:
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
  1071
	if ((rtn_val != DDI_SUCCESS) && qlge->fm_enable) {
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
  1072
		ql_fm_ereport(qlge, DDI_FM_DEVICE_NO_RESPONSE);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
  1073
		ddi_fm_service_impact(qlge->dip, DDI_SERVICE_DEGRADED);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
  1074
	}
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1075
	return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1076
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1077
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1078
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1079
 * ql_get_firmware_version
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1080
 * Get firmware version.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1081
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1082
int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1083
ql_get_firmware_version(qlge_t *qlge,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1084
    struct qlnic_mpi_version_info *mpi_version_ptr)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1085
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1086
	int rtn_val = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1087
	mbx_cmd_t mbx_cmds = {0};
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1088
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1089
	mbx_cmds.mb[0] = MBC_ABOUT_FIRMWARE /* 0x08 */;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1090
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1091
	if (ql_issue_mailbox_cmd_and_wait_rsp(qlge, &mbx_cmds)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1092
	    != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1093
		cmn_err(CE_WARN,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1094
		    "%s(%d) ql_issue_mailbox_cmd_and_wait_rsp failed.",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1095
		    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1096
		goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1097
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1098
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1099
	/* verify if the transaction is completed successful */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1100
	if (mbx_cmds.mb[0] != MBS_COMMAND_COMPLETE /* 0x4000 */) {
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
  1101
		cmn_err(CE_WARN, "get firmware version(%d) failed, 0x%x",
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1102
		    qlge->instance, mbx_cmds.mb[0]);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1103
	} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1104
		qlge->fw_version_info.major_version =
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1105
		    LSB(MSW(mbx_cmds.mb[1]));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1106
		qlge->fw_version_info.minor_version =
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1107
		    MSB(LSW(mbx_cmds.mb[1]));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1108
		qlge->fw_version_info.sub_minor_version =
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1109
		    LSB(LSW(mbx_cmds.mb[1]));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1110
		qlge->phy_version_info.major_version =
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1111
		    LSB(MSW(mbx_cmds.mb[2]));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1112
		qlge->phy_version_info.minor_version =
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1113
		    MSB(LSW(mbx_cmds.mb[2]));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1114
		qlge->phy_version_info.sub_minor_version =
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1115
		    LSB(LSW(mbx_cmds.mb[2]));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1116
#ifdef QLGE_LOAD_UNLOAD
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1117
		cmn_err(CE_NOTE, "firmware version: %d.%d.%d\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1118
		    qlge->fw_version_info.major_version,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1119
		    qlge->fw_version_info.minor_version,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1120
		    qlge->fw_version_info.sub_minor_version);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1121
#endif
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1122
		if (mpi_version_ptr != NULL) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1123
			mpi_version_ptr->fw_version =
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1124
			    (qlge->fw_version_info.major_version<<16)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1125
			    |(qlge->fw_version_info.minor_version<<8)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1126
			    |(qlge->fw_version_info.sub_minor_version);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1127
			mpi_version_ptr->phy_version =
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1128
			    (qlge->phy_version_info.major_version<<16)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1129
			    |(qlge->phy_version_info.minor_version<<8)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1130
			    |(qlge->phy_version_info.sub_minor_version);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1131
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1132
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1133
	rtn_val = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1134
out:
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
  1135
	if ((rtn_val != DDI_SUCCESS) && qlge->fm_enable) {
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
  1136
		ql_fm_ereport(qlge, DDI_FM_DEVICE_NO_RESPONSE);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
  1137
		ddi_fm_service_impact(qlge->dip, DDI_SERVICE_DEGRADED);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
  1138
	}
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1139
	return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1140
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1141
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1142
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1143
 * Trigger a system error event
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1144
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1145
int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1146
ql_trigger_system_error_event(qlge_t *qlge)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1147
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1148
	mbx_cmd_t mbx_cmds = {0};
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1149
	int rtn_val = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1150
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1151
	mbx_cmds.mb[0] = MBC_GENERATE_SYS_ERROR; /* 0x2A */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1152
	if (ql_issue_mailbox_cmd(qlge, &mbx_cmds) != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1153
		cmn_err(CE_WARN, "%s(%d) ql_issue_mailbox_cmd timeout.",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1154
		    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1155
		goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1156
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1157
	rtn_val = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1158
out:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1159
	return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1160
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1161
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1162
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1163
 * Reset the MPI RISC Processor
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1164
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1165
int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1166
ql_reset_mpi_risc(qlge_t *qlge)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1167
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1168
	int rtn_val = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1169
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1170
	/* Reset the MPI Processor */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1171
	ql_write_reg(qlge, REG_HOST_CMD_STATUS, HOST_CMD_SET_RISC_RESET);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1172
	if (ql_wait_reg_bit(qlge, REG_HOST_CMD_STATUS, RISC_RESET,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1173
	    BIT_SET, 0) != DDI_SUCCESS) {
11023
53231798f4a8 6871527 FCoE, qlge driver - Add NIC side of support for new Qlogic FCoE adapter, Europa (fix lint)
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11016
diff changeset
  1174
		(void) ql_read_reg(qlge, REG_HOST_CMD_STATUS);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1175
		goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1176
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1177
	ql_write_reg(qlge, REG_HOST_CMD_STATUS, HOST_CMD_CLEAR_RISC_RESET);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1178
	rtn_val = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1179
out:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1180
	return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1181
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1182
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1183
int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1184
ql_read_risc_ram(qlge_t *qlge, uint32_t risc_address, uint64_t bp,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1185
    uint32_t word_count)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1186
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1187
	int rval = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1188
	mbx_cmd_t mc = {0};
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1189
	mbx_cmd_t *mcp = &mc;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1190
	mbx_data_t mbx_results;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1191
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1192
	QL_PRINT(DBG_MBX, ("%s(%d): read risc addr:0x%x,"
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1193
	    "phys_addr %x,%x words\n", __func__, qlge->instance,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1194
	    risc_address, bp, word_count));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1195
	if (CFG_IST(qlge, CFG_CHIP_8100)) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1196
		mcp->mb[0] = MBC_DUMP_RISC_RAM /* 0x0C */;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1197
		mcp->mb[1] = LSW(risc_address);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1198
		mcp->mb[2] = MSW(LSD(bp));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1199
		mcp->mb[3] = LSW(LSD(bp));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1200
		mcp->mb[4] = MSW(word_count);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1201
		mcp->mb[5] = LSW(word_count);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1202
		mcp->mb[6] = MSW(MSD(bp));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1203
		mcp->mb[7] = LSW(MSD(bp));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1204
		mcp->mb[8] = MSW(risc_address);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1205
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1206
	mcp->timeout = 10 /* MAILBOX_TOV */;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1207
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1208
	if (ql_issue_mailbox_cmd_and_poll_rsp(qlge, mcp, &mbx_results)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1209
	    != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1210
		goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1211
	} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1212
		QL_PRINT(DBG_MBX, ("%s(%d) PI Intr received",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1213
		    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1214
		if (mbx_results.mb[0] == MBS_COMMAND_COMPLETE /* 0x4000 */) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1215
			QL_PRINT(DBG_MBX, ("%s(%d): success\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1216
			    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1217
			rval = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1218
		} else {
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
  1219
			cmn_err(CE_WARN, "read_risc_ram(%d): failed, status %x",
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
  1220
			    qlge->instance, mbx_results.mb[0]);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1221
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1222
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1223
out:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1224
	return (rval);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1225
}