usr/src/uts/common/io/fibre-channel/fca/qlge/qlge_fm.c
author Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
Mon, 05 Apr 2010 05:20:48 -0600
changeset 12073 05ba1c0d6140
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:
12073
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     1
/*
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     2
 * CDDL HEADER START
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     3
 *
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     4
 * The contents of this file are subject to the terms of the
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     5
 * Common Development and Distribution License (the "License").
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     6
 * You may not use this file except in compliance with the License.
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     7
 *
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     8
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
     9
 * or http://www.opensolaris.org/os/licensing.
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    10
 * See the License for the specific language governing permissions
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    11
 * and limitations under the License.
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    12
 *
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    13
 * When distributing Covered Code, include this CDDL HEADER in each
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    14
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    15
 * If applicable, add the following below this CDDL HEADER, with the
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    16
 * fields enclosed by brackets "[]" replaced with your own identifying
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    17
 * information: Portions Copyright [yyyy] [name of copyright owner]
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    18
 *
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    19
 * CDDL HEADER END
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    20
 */
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    21
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    22
/*
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    23
 * Copyright 2010 QLogic Corporation. All rights reserved.
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    24
 */
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    25
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    26
#include <qlge.h>
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    27
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    28
#define	QL_FM_BUF_LEN	128
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    29
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    30
void
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    31
ql_fm_ereport(qlge_t *qlge, char *detail)
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    32
{
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    33
	uint64_t ena;
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    34
	char buf[QL_FM_BUF_LEN];
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    35
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    36
	(void) snprintf(buf, QL_FM_BUF_LEN, "%s.%s", DDI_FM_DEVICE, detail);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    37
	ena = fm_ena_generate(0, FM_ENA_FMT1);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    38
	if (DDI_FM_EREPORT_CAP(qlge->fm_capabilities)) {
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    39
		ddi_fm_ereport_post(qlge->dip, buf, ena, DDI_NOSLEEP,
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    40
		    FM_VERSION, DATA_TYPE_UINT8, FM_EREPORT_VERS0, NULL);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    41
	}
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    42
}
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    43
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    44
int
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    45
ql_fm_check_acc_handle(ddi_acc_handle_t handle)
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    46
{
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    47
	ddi_fm_error_t err;
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    48
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    49
	ddi_fm_acc_err_get(handle, &err, DDI_FME_VERSION);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    50
	/* for OpenSolaris */
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    51
	ddi_fm_acc_err_clear(handle, DDI_FME_VERSION);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    52
	return (err.fme_status);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    53
}
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    54
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    55
int
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    56
ql_fm_check_dma_handle(ddi_dma_handle_t handle)
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    57
{
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    58
	ddi_fm_error_t err;
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    59
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    60
	ddi_fm_dma_err_get(handle, &err, DDI_FME_VERSION);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    61
	return (err.fme_status);
05ba1c0d6140 6923815 Implement FMA functionality in qlge driver
Sukumar Swaminathan <Sukumar.Swaminathan@Sun.COM>
parents:
diff changeset
    62
}