usr/src/uts/common/io/fibre-channel/fca/qlge/qlge_flash.c
author Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
Mon, 05 Apr 2010 05:20:48 -0600
changeset 12073 05ba1c0d6140
parent 11023 53231798f4a8
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
 * Local Function Prototypes.
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
static int ql_read_flash(qlge_t *, uint32_t, uint32_t *);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    31
static int ql_write_flash(qlge_t *, uint32_t, uint32_t);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    32
static int ql_protect_flash(qlge_t *);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    33
static int ql_unprotect_flash(qlge_t *);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    34
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    35
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    36
 * ql_flash_id
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    37
 * The flash memory chip exports 3 ID bytes in the order of manufacturer, id,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    38
 * capability
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    39
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    40
int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    41
ql_flash_id(qlge_t *qlge)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    42
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    43
	int rval;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    44
	uint32_t fdata = 0;
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
	 * Send Restore command (0xAB) to release Flash from
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    48
	 * possible deep power down state
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
	rval = ql_read_flash(qlge, FLASH_CONF_ADDR | 0x300 | FLASH_RES_CMD,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    51
	    &fdata);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    52
	QL_PRINT(DBG_FLASH, ("%s(%d) flash electronic signature is %x \n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    53
	    __func__, qlge->instance, fdata));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    54
	fdata = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    55
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    56
	/* 0x9F */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    57
	rval = ql_read_flash(qlge, FLASH_CONF_ADDR | 0x0400 | FLASH_RDID_CMD,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    58
	    &fdata);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    59
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    60
	if ((rval != DDI_SUCCESS) || (fdata == 0)) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    61
		cmn_err(CE_WARN, "%s(%d) read_flash failed 0x%x.",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    62
		    __func__, qlge->instance, fdata);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    63
	} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    64
		qlge->flash_info.flash_manuf = LSB(LSW(fdata));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    65
		qlge->flash_info.flash_id = MSB(LSW(fdata));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    66
		qlge->flash_info.flash_cap = LSB(MSW(fdata));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    67
		QL_PRINT(DBG_FLASH, ("%s(%d) flash manufacturer 0x%x,"
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    68
		    " flash id 0x%x, flash cap 0x%x\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    69
		    __func__, qlge->instance,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    70
		    qlge->flash_info.flash_manuf, qlge->flash_info.flash_id,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    71
		    qlge->flash_info.flash_cap));
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
	return (rval);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    74
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    75
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    76
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    77
 * qlge_dump_fcode
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    78
 * Dumps fcode from flash.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    79
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    80
int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    81
qlge_dump_fcode(qlge_t *qlge, uint8_t *dp, uint32_t size, uint32_t startpos)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    82
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    83
	uint32_t cnt, data, addr;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    84
	int rval = 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
	QL_PRINT(DBG_FLASH, ("%s(%d) entered to read address %x, %x bytes\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    87
	    __func__, qlge->instance, startpos, size));
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
	/* make sure startpos+size doesn't exceed flash */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    90
	if (size + startpos > qlge->fdesc.flash_size) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    91
		cmn_err(CE_WARN, "%s(%d) exceeded flash range, sz=%xh, stp=%xh,"
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    92
		    " flsz=%xh", __func__, qlge->instance,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    93
		    size, startpos, qlge->fdesc.flash_size);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    94
		return (DDI_FAILURE);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    95
	}
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
	/* check start addr is 32 bit or 4 byte aligned for M25Pxx */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    98
	if ((startpos & 0x3) != 0) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    99
		cmn_err(CE_WARN, "%s(%d) incorrect buffer size alignment",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   100
		    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   101
		return (DDI_FAILURE);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   102
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   103
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   104
	/* adjust flash start addr for 32 bit words */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   105
	addr = startpos / 4;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   106
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   107
	/* Read fcode data from flash. */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   108
	cnt = startpos;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   109
	size += startpos;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   110
	while (cnt < size) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   111
		/* Allow other system activity. */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   112
		if (cnt % 0x1000 == 0) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   113
			drv_usecwait(1);
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
		rval = ql_read_flash(qlge, addr++, &data);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   116
		if (rval != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   117
			break;
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
		*dp++ = LSB(LSW(data));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   120
		*dp++ = MSB(LSW(data));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   121
		*dp++ = LSB(MSW(data));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   122
		*dp++ = MSB(MSW(data));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   123
		cnt += 4;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   124
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   125
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   126
	if (rval != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   127
		cmn_err(CE_WARN, "failed, rval = %xh", rval);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   128
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   129
	return (rval);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   130
}
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
int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   133
ql_erase_and_write_to_flash(qlge_t *qlge, uint8_t *dp, uint32_t size,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   134
    uint32_t faddr)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   135
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   136
	int rval = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   137
	uint32_t cnt, rest_addr, fdata;
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
	QL_PRINT(DBG_FLASH, ("%s(%d) entered to write addr %x, %d bytes\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   140
	    __func__, qlge->instance, faddr, size));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   141
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   142
	/* start address must be 32 bit word aligned */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   143
	if ((faddr & 0x3) != 0) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   144
		cmn_err(CE_WARN, "%s(%d) incorrect buffer size alignment",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   145
		    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   146
		return (DDI_FAILURE);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   147
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   148
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   149
	/* setup mask of address range within a sector */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   150
	rest_addr = (qlge->fdesc.block_size - 1) >> 2;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   151
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   152
	faddr = faddr >> 2;	/* flash gets 32 bit words */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   153
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
	 * Write data to flash.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   156
	 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   157
	cnt = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   158
	size = (size + 3) >> 2;	/* Round up & convert to dwords */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   159
	while (cnt < size) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   160
		/* Beginning of a sector? do a sector erase */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   161
		if ((faddr & rest_addr) == 0) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   162
			fdata = (faddr & ~rest_addr) << 2;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   163
			fdata = (fdata & 0xff00) |
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   164
			    (fdata << 16 & 0xff0000) |
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   165
			    (fdata >> 16 & 0xff);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   166
			/* 64k bytes sector erase */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   167
			rval = ql_write_flash(qlge, /* 0xd8 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   168
			    FLASH_CONF_ADDR | 0x0300 | qlge->fdesc.erase_cmd,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   169
			    fdata);
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
			if (rval != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   172
				cmn_err(CE_WARN, "Unable to flash sector: "
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   173
				    "address=%xh", faddr);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   174
				goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   175
			}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   176
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   177
		/* Write data */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   178
		fdata = *dp++;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   179
		fdata |= *dp++ << 8;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   180
		fdata |= *dp++ << 16;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   181
		fdata |= *dp++ << 24;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   182
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   183
		rval = ql_write_flash(qlge, faddr, fdata);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   184
		if (rval != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   185
			cmn_err(CE_WARN, "Unable to program flash "
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   186
			    "address=%xh data=%xh", faddr,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   187
			    *dp);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   188
			goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   189
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   190
		cnt++;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   191
		faddr++;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   192
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   193
		/* Allow other system activity. */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   194
		if (cnt % 0x1000 == 0) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   195
			qlge_delay(10000);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   196
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   197
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   198
	rval = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   199
out:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   200
	if (rval != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   201
		cmn_err(CE_WARN, "%s(%d failed=%xh",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   202
		    __func__, qlge->instance, rval);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   203
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   204
	return (rval);
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
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   207
void
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   208
get_sector_number(qlge_t *qlge, uint32_t faddr, uint32_t *psector)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   209
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   210
	*psector = faddr / qlge->fdesc.block_size; /* 0x10000 */
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
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   213
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   214
 * qlge_load_flash
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   215
 * Write "size" bytes from memory "dp" to flash address "faddr".
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   216
 * faddr = 32bit word flash address.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   217
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   218
int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   219
qlge_load_flash(qlge_t *qlge, uint8_t *dp, uint32_t len, uint32_t faddr)
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
	int rval = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   222
	uint32_t start_block, end_block;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   223
	uint32_t start_byte, end_byte;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   224
	uint32_t num;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   225
	uint32_t sector_size, addr_src, addr_desc;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   226
	uint8_t *temp;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   227
	caddr_t bp, bdesc;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   228
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   229
	QL_PRINT(DBG_FLASH, ("%s(%d) entered to write addr %x, %d bytes\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   230
	    __func__, qlge->instance, faddr, len));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   231
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   232
	sector_size = qlge->fdesc.block_size;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   233
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   234
	if (faddr > qlge->fdesc.flash_size) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   235
		cmn_err(CE_WARN, "%s(%d): invalid flash write address %x",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   236
		    __func__, qlge->instance, faddr);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   237
		return (DDI_FAILURE);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   238
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   239
	/* Get semaphore to access Flash Address and Flash Data Registers */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   240
	if (ql_sem_spinlock(qlge, QL_FLASH_SEM_MASK) != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   241
		return (DDI_FAILURE);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   242
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   243
	temp = kmem_zalloc(sector_size, KM_SLEEP);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   244
	if (temp == NULL) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   245
		cmn_err(CE_WARN, "%s(%d): Unable to allocate buffer",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   246
		    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   247
		ql_sem_unlock(qlge, QL_FLASH_SEM_MASK);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   248
		return (DDI_FAILURE);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   249
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   250
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
   251
	(void) ql_unprotect_flash(qlge);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   252
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   253
	get_sector_number(qlge, faddr, &start_block);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   254
	get_sector_number(qlge, faddr + len - 1, &end_block);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   255
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   256
	QL_PRINT(DBG_FLASH, ("%s(%d) start_block %x, end_block %x\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   257
	    __func__, qlge->instance, start_block, end_block));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   258
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   259
	for (num = start_block; num <= end_block; num++) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   260
		QL_PRINT(DBG_FLASH,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   261
		    ("%s(%d) sector_size 0x%x, sector read addr %x\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   262
		    __func__, qlge->instance, sector_size, num * sector_size));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   263
		/* read one whole sector flash data to buffer */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   264
		rval = qlge_dump_fcode(qlge, (uint8_t *)temp, sector_size,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   265
		    num * sector_size);
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
		start_byte = num * sector_size;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   268
		end_byte = start_byte + sector_size -1;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   269
		if (start_byte < faddr)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   270
			start_byte = faddr;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   271
		if (end_byte > (faddr + len))
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   272
			end_byte = (faddr + len - 1);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   273
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   274
		addr_src = start_byte - faddr;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   275
		addr_desc = start_byte - num * sector_size;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   276
		bp = (caddr_t)dp + addr_src;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   277
		bdesc = (caddr_t)temp + addr_desc;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   278
		bcopy(bp, bdesc, (end_byte - start_byte + 1));
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
		/* write the whole sector data to flash */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   281
		if (ql_erase_and_write_to_flash(qlge, temp, sector_size,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   282
		    num * sector_size) != DDI_SUCCESS)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   283
			goto out;
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
	rval = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   286
out:
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
   287
	(void) ql_protect_flash(qlge);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   288
	kmem_free(temp, sector_size);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   289
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   290
	ql_sem_unlock(qlge, QL_FLASH_SEM_MASK);
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
	if (rval != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   293
		cmn_err(CE_WARN, "%s(%d failed=%xh",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   294
		    __func__, qlge->instance, rval);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   295
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   296
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   297
	return (rval);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   298
}
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
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   301
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   302
 * ql_check_pci
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   303
 * checks the passed buffer for a valid pci signature and
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   304
 * expected (and in range) pci length values.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   305
 * On successful pci check, nextpos adjusted to next pci header.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   306
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   307
static int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   308
ql_check_pci(qlge_t *qlge, uint8_t *buf, uint32_t *nextpos)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   309
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   310
	pci_header_t *pcih;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   311
	pci_data_t *pcid;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   312
	uint32_t doff;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   313
	uint8_t *pciinfo;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   314
	uint32_t image_size = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   315
	int rval = CONTINUE_SEARCH;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   316
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   317
	QL_PRINT(DBG_FLASH, ("%s(%d) check image at 0x%x\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   318
	    __func__, qlge->instance, *nextpos));
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
	if (buf != NULL) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   321
		pciinfo = buf;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   322
	} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   323
		cmn_err(CE_WARN, "%s(%d) failed, null buf ptr passed",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   324
		    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   325
		return (STOP_SEARCH);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   326
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   327
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   328
	/* get the pci header image length */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   329
	pcih = (pci_header_t *)pciinfo;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   330
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   331
	doff = pcih->dataoffset[1];
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   332
	doff <<= 8;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   333
	doff |= pcih->dataoffset[0];
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   334
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   335
	/* some header section sanity check */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   336
	if (pcih->signature[0] != PCI_HEADER0 /* '55' */ ||
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   337
	    pcih->signature[1] != PCI_HEADER1 /* 'AA' */ || doff > 50) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   338
		cmn_err(CE_WARN, "%s(%d) image format error: s0=%xh, s1=%xh,"
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   339
		    "off=%xh\n", __func__, qlge->instance,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   340
		    pcih->signature[0], pcih->signature[1], doff);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   341
		return (STOP_SEARCH);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   342
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   343
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   344
	pcid = (pci_data_t *)(pciinfo + doff);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   345
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   346
	/* a slight sanity data section check */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   347
	if (pcid->signature[0] != 'P' || pcid->signature[1] != 'C' ||
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   348
	    pcid->signature[2] != 'I' || pcid->signature[3] != 'R') {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   349
		cmn_err(CE_WARN, "%s(%d) failed, data sig mismatch!",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   350
		    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   351
		return (STOP_SEARCH);
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
	image_size =
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   354
	    (pcid->imagelength[0] | (pcid->imagelength[1] << 8))*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   355
	    PCI_SECTOR_SIZE /* 512 */;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   356
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   357
	switch (pcid->codetype) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   358
	case PCI_CODE_X86PC:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   359
		QL_PRINT(DBG_FLASH, ("%s(%d) boot image is FTYPE_BIOS \n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   360
		    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   361
		break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   362
	case PCI_CODE_FCODE:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   363
		QL_PRINT(DBG_FLASH, ("%s(%d) boot image is FTYPE_FCODE \n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   364
		    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   365
		break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   366
	case PCI_CODE_EFI:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   367
		QL_PRINT(DBG_FLASH, ("%s(%d) boot image is FTYPE_EFI \n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   368
		    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   369
		break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   370
	case PCI_CODE_HPPA:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   371
		QL_PRINT(DBG_FLASH, ("%s(%d) boot image is PCI_CODE_HPPA \n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   372
		    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   373
		break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   374
	default:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   375
		QL_PRINT(DBG_FLASH, ("%s(%d) boot image is FTYPE_UNKNOWN \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
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   379
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   380
	QL_PRINT(DBG_FLASH, ("%s(%d) image size %x at %x\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   381
	    __func__, qlge->instance, image_size, *nextpos));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   382
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   383
	if (pcid->indicator == PCI_IND_LAST_IMAGE) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   384
		QL_PRINT(DBG_FLASH, ("%s(%d) last boot image found \n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   385
		    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   386
		rval = LAST_IMAGE_FOUND;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   387
	} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   388
		rval = CONTINUE_SEARCH;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   389
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   390
	/* Get the next flash image address */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   391
	*nextpos += image_size;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   392
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   393
	return (rval);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   394
}
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
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   397
 * ql_find_flash_layout_table_data_structure
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   398
 * Find Flash Layout Table Data Structure (FLTDS) that
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   399
 * is located at the end of last boot image.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   400
 * Assume FLTDS is located with first 2M bytes.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   401
 * Note:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   402
 * Driver must be in stalled state prior to entering or
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   403
 * add code to this function prior to calling ql_setup_flash()
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   404
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   405
int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   406
ql_find_flash_layout_table_data_structure_addr(qlge_t *qlge)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   407
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   408
	int rval = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   409
	int result = CONTINUE_SEARCH;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   410
	uint32_t freadpos = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   411
	uint8_t buf[FBUFSIZE];
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   412
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   413
	if (qlge->flash_fltds_addr != 0) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   414
		QL_PRINT(DBG_FLASH, ("%s(%d) done already\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   415
		    __func__, qlge->instance));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   416
		return (DDI_SUCCESS);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   417
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   418
	/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   419
	 * Temporarily set the fdesc.flash_size to
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   420
	 * 1M flash size to avoid failing of ql_dump_focde.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   421
	 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   422
	qlge->fdesc.flash_size = FLASH_FIRMWARE_IMAGE_ADDR;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   423
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   424
	while (result == CONTINUE_SEARCH) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   425
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   426
		if ((rval = qlge_dump_fcode(qlge, buf, FBUFSIZE, freadpos))
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   427
		    != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   428
			cmn_err(CE_WARN, "%s(%d) qlge_dump_fcode failed"
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   429
			    " pos=%xh rval=%xh",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   430
			    __func__, qlge->instance, freadpos, rval);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   431
			break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   432
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   433
		/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   434
		 * checkout the pci boot image format
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   435
		 * and get next read address
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   436
		 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   437
		result = ql_check_pci(qlge, buf, &freadpos);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   438
		/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   439
		 * find last image? If so, then the freadpos
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   440
		 * is the address of FLTDS
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   441
		 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   442
		if (result == LAST_IMAGE_FOUND) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   443
			QL_PRINT(DBG_FLASH,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   444
			    ("%s(%d) flash layout table data structure "
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   445
			    "(FLTDS) address is at %x \n", __func__,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   446
			    qlge->instance, freadpos));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   447
			qlge->flash_fltds_addr = freadpos;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   448
			rval = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   449
			break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   450
		} else if (result == STOP_SEARCH) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   451
			cmn_err(CE_WARN, "%s(%d) flash header incorrect,"
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   452
			    "stop searching",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   453
			    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   454
			break;
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
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   457
	return (rval);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   458
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   459
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   460
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   461
 * ql_flash_fltds
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   462
 * Get flash layout table data structure table.
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
static int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   465
ql_flash_fltds(qlge_t *qlge)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   466
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   467
	uint32_t cnt;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   468
	uint16_t chksum, *bp, data;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   469
	int rval;
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
	rval = qlge_dump_fcode(qlge, (uint8_t *)&qlge->fltds,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   472
	    sizeof (ql_fltds_t), qlge->flash_fltds_addr);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   473
	if (rval != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   474
		cmn_err(CE_WARN, "%s(%d)read error",
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
		bzero(&qlge->fltds, sizeof (ql_fltds_t));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   477
		return (rval);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   478
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   479
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   480
	QL_DUMP(DBG_FLASH, "flash layout table data structure:\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   481
	    &qlge->fltds, 8, sizeof (ql_fltds_t));
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
	chksum = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   484
	data = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   485
	bp = (uint16_t *)&qlge->fltds;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   486
	for (cnt = 0; cnt < (sizeof (ql_fltds_t)) / 2; cnt++) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   487
		data = *bp;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   488
		LITTLE_ENDIAN_16(&data);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   489
		chksum += data;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   490
		bp++;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   491
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   492
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   493
	LITTLE_ENDIAN_32(&qlge->fltds.signature);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   494
	LITTLE_ENDIAN_16(&qlge->fltds.flt_addr_lo);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   495
	LITTLE_ENDIAN_16(&qlge->fltds.flt_addr_hi);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   496
	LITTLE_ENDIAN_16(&qlge->fltds.checksum);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   497
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   498
	QL_PRINT(DBG_FLASH, ("%s(%d) signature %xh\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   499
	    __func__, qlge->instance, qlge->fltds.signature));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   500
	QL_PRINT(DBG_FLASH, ("%s(%d) flt_addr_lo %xh\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   501
	    __func__, qlge->instance, qlge->fltds.flt_addr_lo));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   502
	QL_PRINT(DBG_FLASH, ("%s(%d) flt_addr_hi %xh\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   503
	    __func__, qlge->instance, qlge->fltds.flt_addr_hi));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   504
	QL_PRINT(DBG_FLASH, ("%s(%d) version %xh\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   505
	    __func__, qlge->instance, qlge->fltds.version));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   506
	QL_PRINT(DBG_FLASH, ("%s(%d) checksum %xh\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   507
	    __func__, qlge->instance, qlge->fltds.checksum));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   508
	/* QFLT */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   509
	if (chksum != 0 || qlge->fltds.signature != FLASH_FLTDS_SIGNATURE) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   510
		cmn_err(CE_WARN, "%s(%d) invalid flash layout table data"
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   511
		    " structure", __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   512
		bzero(&qlge->fltds, sizeof (ql_fltds_t));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   513
		return (DDI_FAILURE);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   514
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   515
	return (DDI_SUCCESS);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   516
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   517
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   518
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   519
 * ql_flash_flt
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   520
 * Get flash layout table.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   521
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   522
int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   523
ql_flash_flt(qlge_t *qlge)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   524
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   525
	uint32_t addr, cnt;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   526
	int rval = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   527
	ql_flt_entry_t *entry;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   528
	uint8_t region;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   529
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   530
	addr = qlge->fltds.flt_addr_hi;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   531
	addr <<= 16;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   532
	addr |= qlge->fltds.flt_addr_lo;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   533
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   534
	/* first read flt header to know how long the table is */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   535
	rval = qlge_dump_fcode(qlge, (uint8_t *)&qlge->flt.header,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   536
	    sizeof (ql_flt_header_t), addr);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   537
	if (rval != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   538
		cmn_err(CE_WARN, "%s(%d) read flt header at %x error",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   539
		    __func__, qlge->instance, addr);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   540
		bzero(&qlge->flt, sizeof (ql_flt_header_t));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   541
		return (rval);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   542
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   543
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   544
	LITTLE_ENDIAN_16(&qlge->flt.header.version);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   545
	LITTLE_ENDIAN_16(&qlge->flt.header.length);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   546
	LITTLE_ENDIAN_16(&qlge->flt.header.checksum);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   547
	LITTLE_ENDIAN_16(&qlge->flt.header.reserved);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   548
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   549
	if ((qlge->flt.header.version != 1) &&
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   550
	    (qlge->flt.header.version != 0)) {
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   551
		cmn_err(CE_WARN, "%s(%d) flt header version %x unsupported",
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
   552
		    __func__, qlge->instance, qlge->flt.header.version);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   553
		bzero(&qlge->flt, sizeof (ql_flt_header_t));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   554
		return (DDI_FAILURE);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   555
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   556
	/* 2.allocate memory to save all flt table entries */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   557
	if ((qlge->flt.ql_flt_entry_ptr = (ql_flt_entry_t *)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   558
	    (kmem_zalloc(qlge->flt.header.length, KM_SLEEP))) == NULL) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   559
		cmn_err(CE_WARN, "%s(%d) flt table alloc failed",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   560
		    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   561
		goto err;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   562
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   563
	/* how many tables? */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   564
	qlge->flt.num_entries = (uint16_t)(qlge->flt.header.length /
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   565
	    sizeof (ql_flt_entry_t));
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
	/* 3. read the rest of flt table */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   568
	addr += (uint32_t)sizeof (ql_flt_header_t);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   569
	QL_PRINT(DBG_FLASH, ("%s(%d) flt has %x entries \n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   570
	    __func__, qlge->instance, qlge->flt.num_entries));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   571
	rval = qlge_dump_fcode(qlge,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   572
	    (uint8_t *)qlge->flt.ql_flt_entry_ptr, qlge->flt.header.length,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   573
	    addr);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   574
	if (rval != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   575
		cmn_err(CE_WARN, "read flt table entry error");
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   576
		goto err;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   577
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   578
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   579
	entry = (ql_flt_entry_t *)qlge->flt.ql_flt_entry_ptr;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   580
	for (cnt = 0; cnt < qlge->flt.num_entries; cnt++) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   581
		LITTLE_ENDIAN_32(&entry->size);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   582
		LITTLE_ENDIAN_32(&entry->begin_addr);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   583
		LITTLE_ENDIAN_32(&entry->end_addr);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   584
		entry++;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   585
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   586
	/* TO Do :4. Checksum verification */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   587
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   588
	/* 5.search index of Flash Descriptor Table in the Flash Layout Table */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   589
	entry = (ql_flt_entry_t *)qlge->flt.ql_flt_entry_ptr;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   590
	qlge->flash_fdt_addr = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   591
	for (cnt = 0; cnt < qlge->flt.num_entries; cnt++) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   592
		if (entry->region == FLT_REGION_FDT) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   593
			qlge->flash_flt_fdt_index = cnt;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   594
			qlge->flash_fdt_addr = entry->begin_addr;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   595
			qlge->flash_fdt_size = entry->size;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   596
			QL_PRINT(DBG_FLASH, ("%s(%d) flash_flt_fdt_index is"
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   597
			    " %x, addr %x,size %x \n", __func__,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   598
			    qlge->instance,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   599
			    cnt, entry->begin_addr, entry->size));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   600
			break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   601
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   602
		entry++;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   603
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   604
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   605
	if (qlge->flash_fdt_addr == 0) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   606
		cmn_err(CE_WARN, "%s(%d) flash descriptor table not found",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   607
		    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   608
		goto err;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   609
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   610
	/* 6.search index of Nic Config. Table in the Flash Layout Table */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   611
	entry = (ql_flt_entry_t *)qlge->flt.ql_flt_entry_ptr;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   612
	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
   613
		region = FLT_REGION_NIC_PARAM0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   614
	else
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   615
		region = FLT_REGION_NIC_PARAM1;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   616
	qlge->flash_nic_config_table_addr = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   617
	for (cnt = 0; cnt < qlge->flt.num_entries; cnt++) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   618
		if (entry->region == region) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   619
			qlge->flash_flt_nic_config_table_index = cnt;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   620
			qlge->flash_nic_config_table_addr = entry->begin_addr;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   621
			qlge->flash_nic_config_table_size = entry->size;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   622
			QL_PRINT(DBG_FLASH, ("%s(%d) "
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   623
			    "flash_flt_nic_config_table_index "
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   624
			    "is %x, address %x, size %x \n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   625
			    __func__, qlge->instance,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   626
			    cnt, entry->begin_addr, entry->size));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   627
			break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   628
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   629
		entry++;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   630
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   631
	if (qlge->flash_nic_config_table_addr == 0) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   632
		cmn_err(CE_WARN, "%s(%d) NIC Configuration Table not found",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   633
		    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   634
		goto err;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   635
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   636
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   637
	return (DDI_SUCCESS);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   638
err:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   639
	bzero(&qlge->flt, sizeof (ql_flt_header_t));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   640
	if (qlge->flt.ql_flt_entry_ptr != NULL) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   641
		bzero(&qlge->flt.ql_flt_entry_ptr, qlge->flt.header.length);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   642
		kmem_free(qlge->flt.ql_flt_entry_ptr, qlge->flt.header.length);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   643
		qlge->flt.ql_flt_entry_ptr = NULL;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   644
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   645
	cmn_err(CE_WARN, "%s(%d) read FLT failed", __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   646
	return (DDI_FAILURE);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   647
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   648
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
 * ql_flash_desc
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   651
 * Get flash descriptor table.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   652
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   653
static int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   654
ql_flash_desc(qlge_t *qlge)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   655
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   656
	uint8_t w8;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   657
	uint32_t cnt, addr;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   658
	uint16_t chksum, *bp, data;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   659
	int rval;
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
	addr = qlge->flash_fdt_addr;
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
	rval = qlge_dump_fcode(qlge, (uint8_t *)&qlge->fdesc,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   664
	    sizeof (flash_desc_t), addr);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   665
	if (rval != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   666
		cmn_err(CE_WARN, "%s(%d) read Flash Descriptor Table error",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   667
		    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   668
		bzero(&qlge->fdesc, sizeof (flash_desc_t));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   669
		return (rval);
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
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   672
	chksum = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   673
	data = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   674
	bp = (uint16_t *)&qlge->fdesc;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   675
	for (cnt = 0; cnt < (sizeof (flash_desc_t)) / 2; cnt++) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   676
		data = *bp;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   677
		LITTLE_ENDIAN_16(&data);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   678
		chksum += data;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   679
		bp++;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   680
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   681
	/* endian adjustment */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   682
	LITTLE_ENDIAN_32(&qlge->fdesc.flash_valid);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   683
	LITTLE_ENDIAN_16(&qlge->fdesc.flash_version);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   684
	LITTLE_ENDIAN_16(&qlge->fdesc.flash_len);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   685
	LITTLE_ENDIAN_16(&qlge->fdesc.flash_checksum);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   686
	LITTLE_ENDIAN_16(&qlge->fdesc.flash_unused);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   687
	LITTLE_ENDIAN_16(&qlge->fdesc.flash_manuf);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   688
	LITTLE_ENDIAN_16(&qlge->fdesc.flash_id);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   689
	LITTLE_ENDIAN_32(&qlge->fdesc.block_size);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   690
	LITTLE_ENDIAN_32(&qlge->fdesc.alt_block_size);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   691
	LITTLE_ENDIAN_32(&qlge->fdesc.flash_size);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   692
	LITTLE_ENDIAN_32(&qlge->fdesc.write_enable_data);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   693
	LITTLE_ENDIAN_32(&qlge->fdesc.read_timeout);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   694
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   695
	/* flash size in desc table is in 1024 bytes */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   696
	QL_PRINT(DBG_FLASH, ("flash_valid=%xh\n", qlge->fdesc.flash_valid));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   697
	QL_PRINT(DBG_FLASH, ("flash_version=%xh\n", qlge->fdesc.flash_version));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   698
	QL_PRINT(DBG_FLASH, ("flash_len=%xh\n", qlge->fdesc.flash_len));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   699
	QL_PRINT(DBG_FLASH, ("flash_checksum=%xh\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   700
	    qlge->fdesc.flash_checksum));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   701
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   702
	w8 = qlge->fdesc.flash_model[15];
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   703
	qlge->fdesc.flash_model[15] = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   704
	QL_PRINT(DBG_FLASH, ("flash_model=%s\n", qlge->fdesc.flash_model));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   705
	qlge->fdesc.flash_model[15] = w8;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   706
	QL_PRINT(DBG_FLASH, ("flash_size=%xK bytes\n", qlge->fdesc.flash_size));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   707
	qlge->fdesc.flash_size = qlge->fdesc.flash_size * 0x400;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   708
	qlge->flash_info.flash_size = qlge->fdesc.flash_size;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   709
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   710
	if (chksum != 0 || qlge->fdesc.flash_valid != FLASH_DESC_VAILD ||
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   711
	    qlge->fdesc.flash_version != FLASH_DESC_VERSION) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   712
		cmn_err(CE_WARN, "invalid descriptor table");
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   713
		bzero(&qlge->fdesc, sizeof (flash_desc_t));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   714
		return (DDI_FAILURE);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   715
	}
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
	return (DDI_SUCCESS);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   718
}
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
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   721
 * ql_flash_nic_config
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   722
 * Get flash NIC Configuration table.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   723
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   724
static int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   725
ql_flash_nic_config(qlge_t *qlge)
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
	uint32_t cnt, addr;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   728
	uint16_t chksum, *bp, data;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   729
	int rval;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   730
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   731
	addr = qlge->flash_nic_config_table_addr;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   732
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   733
	rval = qlge_dump_fcode(qlge, (uint8_t *)&qlge->nic_config,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   734
	    sizeof (ql_nic_config_t), addr);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   735
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   736
	if (rval != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   737
		cmn_err(CE_WARN, "fail to read nic_cfg image %xh", rval);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   738
		bzero(&qlge->nic_config, sizeof (ql_nic_config_t));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   739
		return (rval);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   740
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   741
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   742
	chksum = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   743
	data = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   744
	bp = (uint16_t *)&qlge->nic_config;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   745
	for (cnt = 0; cnt < (sizeof (ql_nic_config_t)) / 2; cnt++) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   746
		data = *bp;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   747
		LITTLE_ENDIAN_16(&data);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   748
		chksum += data;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   749
		bp++;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   750
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   751
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   752
	LITTLE_ENDIAN_32(&qlge->nic_config.signature);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   753
	LITTLE_ENDIAN_16(&qlge->nic_config.version);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   754
	LITTLE_ENDIAN_16(&qlge->nic_config.size);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   755
	LITTLE_ENDIAN_16(&qlge->nic_config.checksum);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   756
	LITTLE_ENDIAN_16(&qlge->nic_config.total_data_size);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   757
	LITTLE_ENDIAN_16(&qlge->nic_config.num_of_entries);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   758
	LITTLE_ENDIAN_16(&qlge->nic_config.vlan_id);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   759
	LITTLE_ENDIAN_16(&qlge->nic_config.last_entry);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   760
	LITTLE_ENDIAN_16(&qlge->nic_config.subsys_vendor_id);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   761
	LITTLE_ENDIAN_16(&qlge->nic_config.subsys_device_id);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   762
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   763
	QL_PRINT(DBG_FLASH, ("(%d): signature=%xh\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   764
	    qlge->instance, qlge->nic_config.signature));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   765
	QL_PRINT(DBG_FLASH, ("(%d): size=%xh\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   766
	    qlge->instance, qlge->nic_config.size));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   767
	QL_PRINT(DBG_FLASH, ("(%d): checksum=%xh\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   768
	    qlge->instance, qlge->nic_config.checksum));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   769
	QL_PRINT(DBG_FLASH, ("(%d): version=%xh\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   770
	    qlge->instance, qlge->nic_config.version));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   771
	QL_PRINT(DBG_FLASH, ("(%d): total_data_size=%xh\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   772
	    qlge->instance, qlge->nic_config.total_data_size));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   773
	QL_PRINT(DBG_FLASH, ("(%d): num_of_entries=%xh\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   774
	    qlge->instance, qlge->nic_config.num_of_entries));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   775
	QL_PRINT(DBG_FLASH, ("(%d): data_type=%xh\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   776
	    qlge->instance, qlge->nic_config.factory_data_type));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   777
	QL_PRINT(DBG_FLASH, ("(%d): data_type_size=%xh\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   778
	    qlge->instance, qlge->nic_config.factory_data_type_size));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   779
	QL_PRINT(DBG_FLASH,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   780
	    ("(%d): factory mac=%02x %02x %02x %02x %02x %02x h\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   781
	    qlge->instance,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   782
	    qlge->nic_config.factory_MAC[0],
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   783
	    qlge->nic_config.factory_MAC[1],
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   784
	    qlge->nic_config.factory_MAC[2],
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   785
	    qlge->nic_config.factory_MAC[3],
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   786
	    qlge->nic_config.factory_MAC[4],
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   787
	    qlge->nic_config.factory_MAC[5]));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   788
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   789
	QL_PRINT(DBG_FLASH, ("(%d): data_type=%xh\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   790
	    qlge->instance, qlge->nic_config.clp_data_type));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   791
	QL_PRINT(DBG_FLASH, ("(%d): data_type_size=%xh\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   792
	    qlge->instance, qlge->nic_config.clp_data_type_size));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   793
	QL_PRINT(DBG_FLASH, ("(%d): clp mac=%x %x %x %x %x %x h\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   794
	    qlge->instance,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   795
	    qlge->nic_config.clp_MAC[0],
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   796
	    qlge->nic_config.clp_MAC[1],
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   797
	    qlge->nic_config.clp_MAC[2],
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   798
	    qlge->nic_config.clp_MAC[3],
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   799
	    qlge->nic_config.clp_MAC[4],
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   800
	    qlge->nic_config.clp_MAC[5]));
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
	QL_PRINT(DBG_FLASH, ("(%d): data_type=%xh\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   803
	    qlge->instance, qlge->nic_config.clp_vlan_data_type));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   804
	QL_PRINT(DBG_FLASH, ("(%d): data_type_size=%xh\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   805
	    qlge->instance, qlge->nic_config.clp_vlan_data_type_size));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   806
	QL_PRINT(DBG_FLASH, ("(%d): vlan_id=%xh\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   807
	    qlge->instance, qlge->nic_config.vlan_id));
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
	QL_PRINT(DBG_FLASH, ("(%d): data_type=%xh\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   810
	    qlge->instance, qlge->nic_config.last_data_type));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   811
	QL_PRINT(DBG_FLASH, ("(%d): data_type_size=%xh\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   812
	    qlge->instance, qlge->nic_config.last_data_type_size));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   813
	QL_PRINT(DBG_FLASH, ("(%d): last_entry=%xh\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   814
	    qlge->instance, qlge->nic_config.last_entry));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   815
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   816
	QL_PRINT(DBG_FLASH, ("(%d): subsys_vendor_id=%xh\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   817
	    qlge->instance, qlge->nic_config.subsys_vendor_id));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   818
	QL_PRINT(DBG_FLASH, ("(%d): subsys_device_id=%xh\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   819
	    qlge->instance, qlge->nic_config.subsys_device_id));
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
	if (chksum != 0 || qlge->nic_config.signature !=
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   822
	    FLASH_NIC_CONFIG_SIGNATURE || qlge->nic_config.version != 1) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   823
		cmn_err(CE_WARN,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   824
		    "invalid flash nic configuration table: chksum %x, "
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   825
		    "signature %x, version %x",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   826
		    chksum, qlge->nic_config.signature,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   827
		    qlge->nic_config.version);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   828
		return (DDI_FAILURE);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   829
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   830
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   831
	return (DDI_SUCCESS);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   832
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   833
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   834
int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   835
ql_flash_vpd(qlge_t *qlge, uint8_t *buf)
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
	uint32_t cnt;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   838
	uint16_t chksum, *bp, data;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   839
	int rval;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   840
	uint32_t vpd_size;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   841
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   842
	if (buf == NULL) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   843
		cmn_err(CE_WARN, "%s(%d) buffer is not available.",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   844
		    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   845
		return (DDI_FAILURE);
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
	if (!qlge->flash_vpd_addr) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   849
		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
   850
			qlge->flash_vpd_addr = ISP_8100_VPD0_ADDR;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   851
		else
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   852
			qlge->flash_vpd_addr = ISP_8100_VPD1_ADDR;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   853
		vpd_size = ISP_8100_VPD0_SIZE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   854
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   855
	rval = qlge_dump_fcode(qlge, buf, vpd_size, qlge->flash_vpd_addr);
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
	if (rval != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   858
		cmn_err(CE_WARN, "%s(%d)read error",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   859
		    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   860
		bzero(buf, vpd_size);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   861
		return (rval);
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
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   864
	QL_DUMP(DBG_FLASH, "flash vpd table raw data:\n", buf, 8, vpd_size);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   865
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   866
	chksum = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   867
	data = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   868
	bp = (uint16_t *)(void *)buf;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   869
	for (cnt = 0; cnt < (vpd_size/2); cnt++) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   870
		data = *bp;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   871
		LITTLE_ENDIAN_16(&data);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   872
		chksum += data;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   873
		bp++;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   874
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   875
	if (chksum != 0) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   876
		cmn_err(CE_WARN, "%s(%d) invalid flash vpd table",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   877
		    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   878
		return (DDI_FAILURE);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   879
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   880
	return (DDI_SUCCESS);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   881
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   882
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   883
int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   884
ql_get_flash_params(qlge_t *qlge)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   885
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   886
	int rval = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   887
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   888
	/* Get semaphore to access Flash Address and Flash Data Registers */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   889
	if (ql_sem_spinlock(qlge, QL_FLASH_SEM_MASK)) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   890
		rval = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   891
		goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   892
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   893
	/* do test read of flash ID */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   894
	rval = ql_flash_id(qlge);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   895
	if (rval != DDI_SUCCESS)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   896
		goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   897
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   898
	/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   899
	 * Temporarily set the fdesc.flash_size to
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   900
	 * 4M flash size to avoid failing of ql_dump_focde.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   901
	 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   902
	qlge->fdesc.flash_size = 4096 * 1024; /* ie. 4M bytes */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   903
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   904
	/* Default flash descriptor table. */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   905
	qlge->fdesc.write_statusreg_cmd = 1;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   906
	qlge->fdesc.write_enable_bits = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   907
	qlge->fdesc.unprotect_sector_cmd = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   908
	qlge->fdesc.protect_sector_cmd = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   909
	qlge->fdesc.write_disable_bits = 0x9c;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   910
	qlge->fdesc.block_size = 0x10000;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   911
	qlge->fdesc.erase_cmd = 0xd8;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   912
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   913
	/* ! todo : should read from fltds! */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   914
	/* !ql_get_flash_params(qlge); */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   915
	qlge->fltds.flt_addr_hi = 0x36;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   916
	qlge->fltds.flt_addr_lo = 0x1000;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   917
	/* read all other tables from Flash memory */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   918
	if (ql_flash_flt(qlge) != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   919
		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
   920
			qlge->flash_fdt_addr = ISP_8100_FDT_ADDR; /* 0x360000 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   921
			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
   922
				/* 0x140200 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   923
				qlge->flash_nic_config_table_addr =
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   924
				    ISP_8100_NIC_PARAM0_ADDR;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   925
			else
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   926
				/* 0x140600 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   927
				qlge->flash_nic_config_table_addr =
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   928
				    ISP_8100_NIC_PARAM1_ADDR;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   929
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   930
	}
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
   931
	(void) ql_flash_desc(qlge);
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
   932
	(void) ql_flash_nic_config(qlge);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   933
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   934
out:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   935
	ql_sem_unlock(qlge, QL_FLASH_SEM_MASK);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   936
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   937
	return (rval);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   938
}
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
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   941
 * ql_setup_flash
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   942
 * Gets the manufacturer and id number of the flash chip,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   943
 * and sets up the size parameter.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   944
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   945
int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   946
ql_setup_flash(qlge_t *qlge)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   947
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   948
	int rval = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   949
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   950
	if (qlge->flash_fltds_addr != 0) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   951
		return (rval);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   952
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   953
	if (ql_sem_spinlock(qlge, QL_FLASH_SEM_MASK)) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   954
		rval = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   955
		goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   956
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   957
	/* try reading flash ID */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   958
	rval = ql_flash_id(qlge);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   959
	if (rval != DDI_SUCCESS)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   960
		goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   961
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   962
	/* Default flash descriptor table. */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   963
	qlge->fdesc.write_statusreg_cmd = 1;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   964
	qlge->fdesc.write_enable_bits = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   965
	qlge->fdesc.unprotect_sector_cmd = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   966
	qlge->fdesc.protect_sector_cmd = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   967
	qlge->fdesc.write_disable_bits = 0x9c;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   968
	qlge->fdesc.block_size = 0x10000;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   969
	qlge->fdesc.erase_cmd = 0xd8;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   970
	/* 1 Get the location of Flash Layout Table Data Structure (FLTDS) */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   971
	if (ql_find_flash_layout_table_data_structure_addr(qlge)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   972
	    == DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   973
		/* 2,read fltds */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   974
		if (ql_flash_fltds(qlge) == DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   975
			/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   976
			 * 3,search for flash descriptor table (FDT)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   977
			 * and Nic Configuration Table indices
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   978
			 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   979
			if ((qlge->flash_fdt_addr == 0) ||
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   980
			    (qlge->flash_nic_config_table_addr == 0)) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   981
				rval = ql_flash_flt(qlge);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   982
				if (rval == DDI_SUCCESS) {
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
   983
					(void) ql_flash_desc(qlge);
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
   984
					(void) ql_flash_nic_config(qlge);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   985
				} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   986
					rval = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   987
					goto out;
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
			}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   990
		} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   991
			rval = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   992
			goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   993
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   994
	} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   995
		rval = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   996
		goto out;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   997
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   998
out:
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
   999
	ql_sem_unlock(qlge, QL_FLASH_SEM_MASK);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1000
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1001
	return (rval);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1002
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1003
}
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
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1006
 * ql_change_endian
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1007
 * Change endianess of byte array.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1008
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1009
void
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1010
ql_change_endian(uint8_t buf[], size_t size)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1011
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1012
	uint8_t byte;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1013
	size_t cnt1;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1014
	size_t cnt;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1015
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1016
	cnt1 = size - 1;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1017
	for (cnt = 0; cnt < size / 2; cnt++) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1018
		byte = buf[cnt1];
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1019
		buf[cnt1] = buf[cnt];
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1020
		buf[cnt] = byte;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1021
		cnt1--;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1022
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1023
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1024
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1025
static int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1026
ql_wait_flash_reg_ready(qlge_t *qlge, uint32_t wait_bit)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1027
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1028
	uint32_t reg_status;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1029
	int rtn_val = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1030
	uint32_t delay = 300000;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1031
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1032
	do {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1033
		reg_status = ql_read_reg(qlge, REG_FLASH_ADDRESS);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1034
		if (reg_status & FLASH_ERR_FLAG) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1035
			cmn_err(CE_WARN,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1036
			    "%s(%d) flash address register error bit set!",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1037
			    __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1038
			rtn_val = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1039
			break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1040
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1041
		if (reg_status & wait_bit) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1042
			break;
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
		drv_usecwait(10);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1045
	} while (--delay);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1046
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1047
	if (delay == 0) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1048
		cmn_err(CE_WARN,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1049
		    "%s(%d) timeout error!", __func__, qlge->instance);
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
  1050
		if (qlge->fm_enable) {
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents: 11023
diff changeset
  1051
			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
  1052
			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
  1053
			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
  1054
		}
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1055
		rtn_val = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1056
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1057
	return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1058
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1059
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1060
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1061
 * ql_read_flash
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1062
 * Reads a 32bit word from FLASH.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1063
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1064
static int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1065
ql_read_flash(qlge_t *qlge, uint32_t faddr, uint32_t *bp)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1066
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1067
	int rval = DDI_SUCCESS;
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
	ql_write_reg(qlge, REG_FLASH_ADDRESS, faddr | FLASH_R_FLAG);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1070
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1071
	/* Wait for READ cycle to complete. */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1072
	rval = ql_wait_flash_reg_ready(qlge, FLASH_RDY_FLAG);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1073
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1074
	if (rval == DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1075
		*bp = ql_read_reg(qlge, REG_FLASH_DATA);
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
	return (rval);
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
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1080
static int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1081
ql_read_flash_status(qlge_t *qlge, uint8_t *value)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1082
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1083
	int rtn_val = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1084
	uint32_t data, cmd = FLASH_CONF_ADDR | FLASH_R_FLAG;
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
	if ((rtn_val = ql_wait_flash_reg_ready(qlge, FLASH_RDY_FLAG))
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1087
	    != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1088
		return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1089
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1090
	cmd |= FLASH_RDSR_CMD /* 0x05 */;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1091
	ql_write_reg(qlge, REG_FLASH_ADDRESS, cmd);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1092
	if ((rtn_val = ql_wait_flash_reg_ready(qlge,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1093
	    FLASH_RDY_FLAG | FLASH_R_FLAG)) != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1094
		return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1095
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1096
	data = ql_read_reg(qlge, REG_FLASH_DATA);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1097
	*value = (uint8_t)(data & 0xff);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1098
	return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1099
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1100
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1101
static int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1102
ql_flash_write_enable(qlge_t *qlge)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1103
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1104
	uint8_t reg_status;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1105
	int rtn_val = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1106
	uint32_t cmd = FLASH_CONF_ADDR;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1107
	uint32_t delay = 300000;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1108
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1109
	if ((rtn_val = ql_wait_flash_reg_ready(qlge, FLASH_RDY_FLAG))
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1110
	    != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1111
		cmn_err(CE_WARN,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1112
		    "%s(%d) timeout!", __func__, qlge->instance);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1113
		rtn_val = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1114
		return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1115
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1116
	cmd |= qlge->fdesc.write_enable_cmd;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1117
	ql_write_reg(qlge, REG_FLASH_ADDRESS, cmd);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1118
	/* wait for WEL bit set */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1119
	if ((rtn_val = ql_wait_flash_reg_ready(qlge, FLASH_RDY_FLAG))
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1120
	    == DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1121
		do {
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
  1122
			(void) ql_read_flash_status(qlge, &reg_status);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1123
			if (reg_status & BIT_1)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1124
				break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1125
			drv_usecwait(10);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1126
		} while (--delay);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1127
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1128
	if (delay == 0) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1129
		cmn_err(CE_WARN,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1130
		    "%s(%d) timeout error! flash status reg: %x",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1131
		    __func__, qlge->instance, reg_status);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1132
		rtn_val = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1133
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1134
	return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1135
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1136
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1137
static int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1138
ql_flash_erase_sector(qlge_t *qlge, uint32_t sectorAddr)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1139
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1140
	int rtn_val = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1141
	uint32_t data, cmd = FLASH_CONF_ADDR;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1142
	uint32_t delay = 300000;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1143
	uint8_t flash_status;
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
	if ((rtn_val = ql_wait_flash_reg_ready(qlge, FLASH_RDY_FLAG))
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1146
	    != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1147
		return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1148
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1149
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1150
	cmd |= (0x0300 | qlge->fdesc.erase_cmd);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1151
	data = ((sectorAddr & 0xff) << 16) | (sectorAddr & 0xff00) |
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1152
	    ((sectorAddr & 0xff0000) >> 16);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1153
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1154
	ql_write_reg(qlge, REG_FLASH_DATA, data);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1155
	ql_write_reg(qlge, REG_FLASH_ADDRESS, cmd);
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
	if ((rtn_val = ql_wait_flash_reg_ready(qlge, FLASH_RDY_FLAG))
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1158
	    == DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1159
		/* wait Write In Progress (WIP) bit to reset */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1160
		do {
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
  1161
			(void) ql_read_flash_status(qlge, &flash_status);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1162
			if ((flash_status & BIT_0 /* WIP */) == 0)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1163
				break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1164
			drv_usecwait(10);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1165
		} while (--delay);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1166
	} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1167
		return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1168
	}
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
	if (delay == 0) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1171
		cmn_err(CE_WARN,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1172
		    "%s(%d) timeout error! flash status reg: %x",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1173
		    __func__, qlge->instance, flash_status);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1174
		rtn_val = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1175
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1176
	return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1177
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1178
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1179
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1180
 * ql_write_flash
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1181
 * Writes a 32bit word to FLASH.
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
static int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1184
ql_write_flash(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
  1185
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1186
	int rval = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1187
	uint32_t delay = 300000;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1188
	uint8_t flash_status;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1189
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1190
	ql_write_reg(qlge, REG_FLASH_DATA, data);
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
  1191
	(void) ql_read_reg(qlge, REG_FLASH_DATA);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1192
	ql_write_reg(qlge, REG_FLASH_ADDRESS, addr);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1193
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1194
	if ((rval = ql_wait_flash_reg_ready(qlge, FLASH_RDY_FLAG))
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1195
	    == DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1196
		if ((addr & FLASH_ADDR_MASK) == FLASH_CONF_ADDR) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1197
			/* wait Write In Progress (WIP) bit to reset */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1198
			do {
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
  1199
				(void) ql_read_flash_status(qlge,
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
  1200
				    &flash_status);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1201
				if ((flash_status & BIT_0 /* WIP */) == 0)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1202
					break;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1203
				drv_usecwait(10);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1204
			} while (--delay);
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
	} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1207
		return (rval);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1208
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1209
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1210
	if (delay == 0) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1211
		cmn_err(CE_WARN,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1212
		    "%s(%d) timeout error! flash status reg: %x",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1213
		    __func__, qlge->instance, flash_status);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1214
		rval = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1215
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1216
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1217
	return (rval);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1218
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1219
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1220
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1221
 * ql_unprotect_flash
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1222
 * Enable writes
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1223
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1224
static int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1225
ql_unprotect_flash(qlge_t *qlge)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1226
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1227
	int fdata, rtn_val;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1228
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1229
	if ((rtn_val = ql_flash_write_enable(qlge)) != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1230
		return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1231
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1232
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1233
	if ((rtn_val = ql_wait_flash_reg_ready(qlge, FLASH_RDY_FLAG))
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1234
	    != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1235
		return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1236
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1237
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1238
	/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1239
	 * Remove block write protection (SST and ST) and
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1240
	 * Sector/Block Protection Register Lock (SST, ST, ATMEL).
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1241
	 * Unprotect sectors.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1242
	 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1243
	(void) ql_write_flash(qlge,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1244
	    FLASH_CONF_ADDR | 0x100 | qlge->fdesc.write_statusreg_cmd,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1245
	    qlge->fdesc.write_enable_bits);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1246
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1247
	if (qlge->fdesc.unprotect_sector_cmd != 0) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1248
		for (fdata = 0; fdata < 0x10; fdata++) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1249
			(void) ql_write_flash(qlge, FLASH_CONF_ADDR |
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1250
			    0x300 | qlge->fdesc.unprotect_sector_cmd, fdata);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1251
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1252
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1253
		(void) ql_write_flash(qlge, FLASH_CONF_ADDR | 0x300 |
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1254
		    qlge->fdesc.unprotect_sector_cmd, 0x00400f);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1255
		(void) ql_write_flash(qlge, FLASH_CONF_ADDR | 0x300 |
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1256
		    qlge->fdesc.unprotect_sector_cmd, 0x00600f);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1257
		(void) ql_write_flash(qlge, FLASH_CONF_ADDR | 0x300 |
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1258
		    qlge->fdesc.unprotect_sector_cmd, 0x00800f);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1259
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1260
	rtn_val = ql_wait_flash_reg_ready(qlge, FLASH_RDY_FLAG);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1261
	return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1262
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1263
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1264
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1265
 * ql_protect_flash
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1266
 * Disable writes
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1267
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1268
static int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1269
ql_protect_flash(qlge_t *qlge)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1270
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1271
	int fdata, rtn_val;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1272
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1273
	if ((rtn_val = ql_flash_write_enable(qlge)) != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1274
		return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1275
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1276
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1277
	if ((rtn_val = ql_wait_flash_reg_ready(qlge, FLASH_RDY_FLAG))
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1278
	    != DDI_SUCCESS) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1279
		return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1280
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1281
	/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1282
	 * Protect sectors.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1283
	 * Set block write protection (SST and ST) and
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1284
	 * Sector/Block Protection Register Lock (SST, ST, ATMEL).
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1285
	 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1286
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1287
	if (qlge->fdesc.protect_sector_cmd != 0) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1288
		for (fdata = 0; fdata < 0x10; fdata++) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1289
			(void) ql_write_flash(qlge, FLASH_CONF_ADDR |
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1290
			    0x330 | qlge->fdesc.protect_sector_cmd, fdata);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1291
		}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1292
		(void) ql_write_flash(qlge, FLASH_CONF_ADDR | 0x330 |
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1293
		    qlge->fdesc.protect_sector_cmd, 0x00400f);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1294
		(void) ql_write_flash(qlge, FLASH_CONF_ADDR | 0x330 |
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1295
		    qlge->fdesc.protect_sector_cmd, 0x00600f);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1296
		(void) ql_write_flash(qlge, FLASH_CONF_ADDR | 0x330 |
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1297
		    qlge->fdesc.protect_sector_cmd, 0x00800f);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1298
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1299
		(void) ql_write_flash(qlge,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1300
		    FLASH_CONF_ADDR | 0x101, 0x80);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1301
	} else {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1302
		(void) ql_write_flash(qlge,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1303
		    FLASH_CONF_ADDR | 0x100 | qlge->fdesc.write_statusreg_cmd,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1304
		    qlge->fdesc.write_disable_bits /* 0x9c */);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1305
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1306
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1307
	rtn_val = ql_wait_flash_reg_ready(qlge, FLASH_RDY_FLAG);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1308
	return (rtn_val);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1309
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1310
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1311
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1312
 * ql_write_flash_test
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1313
 * test write to a flash sector that is not being used
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1314
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1315
void
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1316
ql_write_flash_test(qlge_t *qlge, uint32_t test_addr)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1317
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1318
	uint32_t old_data, data;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1319
	uint32_t addr = 0;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1320
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1321
	addr = (test_addr / 4);
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
  1322
	(void) ql_read_flash(qlge, addr, &old_data);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1323
	QL_PRINT(DBG_FLASH, ("read addr %x old value %x\n", test_addr,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1324
	    old_data));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1325
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1326
	/* enable writing to flash */
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
  1327
	(void) ql_unprotect_flash(qlge);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1328
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1329
	/* erase the sector */
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
  1330
	(void) ql_flash_erase_sector(qlge, test_addr);
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
  1331
	(void) ql_read_flash(qlge, addr, &data);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1332
	QL_PRINT(DBG_FLASH, ("after sector erase, addr %x value %x\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1333
	    test_addr, data));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1334
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1335
	/* write new value to it and read back to confirm */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1336
	data = 0x33445566;
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
  1337
	(void) ql_write_flash(qlge, addr, data);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1338
	QL_PRINT(DBG_FLASH, ("new value written to addr %x value %x\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1339
	    test_addr, data));
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
  1340
	(void) ql_read_flash(qlge, addr, &data);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1341
	if (data != 0x33445566) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1342
		cmn_err(CE_WARN, "flash write test failed, get data %x"
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1343
		    " after writing", data);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1344
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1345
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1346
	/* write old value to it and read back to restore */
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
  1347
	(void) ql_flash_erase_sector(qlge, test_addr);
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
  1348
	(void) ql_write_flash(qlge, addr, old_data);
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
  1349
	(void) ql_read_flash(qlge, addr, &data);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1350
	QL_PRINT(DBG_FLASH, ("write back old value addr %x value %x\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1351
	    test_addr, data));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1352
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1353
	/* test done, protect the flash to forbid any more flash writting */
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
  1354
	(void) ql_protect_flash(qlge);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1355
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1356
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1357
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1358
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1359
void
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1360
ql_write_flash_test2(qlge_t *qlge, uint32_t test_addr)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1361
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1362
	uint32_t data, old_data;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1363
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
  1364
	(void) qlge_dump_fcode(qlge, (uint8_t *)&old_data, sizeof (old_data),
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1365
	    test_addr);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1366
	QL_PRINT(DBG_FLASH, ("read addr %x old value %x\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1367
	    test_addr, old_data));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1368
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1369
	data = 0x12345678;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1370
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1371
	QL_PRINT(DBG_FLASH, ("write new test value %x\n", data));
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
  1372
	(void) qlge_load_flash(qlge, (uint8_t *)&data, sizeof (data),
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
  1373
	    test_addr);
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
  1374
	(void) qlge_dump_fcode(qlge, (uint8_t *)&data, sizeof (data),
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
  1375
	    test_addr);
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1376
	if (data != 0x12345678) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1377
		cmn_err(CE_WARN,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1378
		    "flash write test failed, get data %x after writing",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1379
		    data);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1380
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1381
	/* write old value to it and read back to restore */
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
  1382
	(void) qlge_load_flash(qlge, (uint8_t *)&old_data, sizeof (old_data),
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1383
	    test_addr);
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
  1384
	(void) qlge_dump_fcode(qlge, (uint8_t *)&data, sizeof (data),
10997
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1385
	    test_addr);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1386
	QL_PRINT(DBG_FLASH, ("write back old value addr %x value %x verified\n",
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1387
	    test_addr, data));
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1388
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1389
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1390
/*
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1391
 * ql_sem_flash_lock
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1392
 * Flash memory is a shared resource amoung various PCI Functions, so,
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1393
 * anyone wants to access flash memory, it needs to lock it first.
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1394
 */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1395
int
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1396
ql_sem_flash_lock(qlge_t *qlge)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1397
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1398
	int rval = DDI_SUCCESS;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1399
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1400
	/* Get semaphore to access Flash Address and Flash Data Registers */
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1401
	if (ql_sem_spinlock(qlge, QL_FLASH_SEM_MASK)) {
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1402
		rval = DDI_FAILURE;
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1403
	}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1404
	return (rval);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1405
}
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1406
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1407
void
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1408
ql_sem_flash_unlock(qlge_t *qlge)
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1409
{
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1410
	ql_sem_unlock(qlge, QL_FLASH_SEM_MASK);
2ff33cc68aa6 PSARC/2009/525 qlge - QLogic PCIe converged NIC driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
  1411
}