5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China/*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * CDDL HEADER START
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China *
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * The contents of this file are subject to the terms of the
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Common Development and Distribution License (the "License").
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * You may not use this file except in compliance with the License.
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China *
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * or http://www.opensolaris.org/os/licensing.
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * See the License for the specific language governing permissions
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * and limitations under the License.
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China *
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * When distributing Covered Code, include this CDDL HEADER in each
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * If applicable, add the following below this CDDL HEADER, with the
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * fields enclosed by brackets "[]" replaced with your own identifying
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * information: Portions Copyright [yyyy] [name of copyright owner]
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China *
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * CDDL HEADER END
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China/*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Use is subject to license terms.
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles * Copyright (c) 2014, Tegile Systems Inc. All rights reserved.
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China/*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Copyright (c) 2000 to 2009, LSI Corporation.
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * All rights reserved.
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China *
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Redistribution and use in source and binary forms of all code within
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * this file that is exclusively owned by LSI, with or without
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * modification, is permitted provided that, in addition to the CDDL 1.0
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * License requirements, the following conditions are met:
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China *
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Neither the name of the author nor the names of its contributors may be
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * used to endorse or promote products derived from this software without
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * specific prior written permission.
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China *
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * DAMAGE.
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China/*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * mptsas_init - This file contains all the functions used to initialize
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * MPT2.0 based hardware.
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#if defined(lint) || defined(DEBUG)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#define MPTSAS_DEBUG
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#endif
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China/*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * standard header files
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#include <sys/note.h>
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#include <sys/scsi/scsi.h>
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#pragma pack(1)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#include <sys/scsi/adapters/mpt_sas/mpi/mpi2_type.h>
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#include <sys/scsi/adapters/mpt_sas/mpi/mpi2.h>
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#include <sys/scsi/adapters/mpt_sas/mpi/mpi2_cnfg.h>
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#include <sys/scsi/adapters/mpt_sas/mpi/mpi2_init.h>
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#include <sys/scsi/adapters/mpt_sas/mpi/mpi2_ioc.h>
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada#include <sys/scsi/adapters/mpt_sas/mpi/mpi2_tool.h>
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#pragma pack()
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China/*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * private header files.
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#include <sys/scsi/adapters/mpt_sas/mptsas_var.h>
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastatic int mptsas_ioc_do_get_facts(mptsas_t *mpt, caddr_t memp, int var,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t accessp);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastatic int mptsas_ioc_do_get_facts_reply(mptsas_t *mpt, caddr_t memp, int var,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t accessp);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastatic int mptsas_ioc_do_get_port_facts(mptsas_t *mpt, caddr_t memp, int var,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t accessp);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastatic int mptsas_ioc_do_get_port_facts_reply(mptsas_t *mpt, caddr_t memp,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China int var, ddi_acc_handle_t accessp);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastatic int mptsas_ioc_do_enable_port(mptsas_t *mpt, caddr_t memp, int var,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t accessp);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastatic int mptsas_ioc_do_enable_port_reply(mptsas_t *mpt, caddr_t memp, int var,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t accessp);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastatic int mptsas_ioc_do_enable_event_notification(mptsas_t *mpt, caddr_t memp,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China int var, ddi_acc_handle_t accessp);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastatic int mptsas_ioc_do_enable_event_notification_reply(mptsas_t *mpt,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China caddr_t memp, int var, ddi_acc_handle_t accessp);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastatic int mptsas_do_ioc_init(mptsas_t *mpt, caddr_t memp, int var,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t accessp);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastatic int mptsas_do_ioc_init_reply(mptsas_t *mpt, caddr_t memp, int var,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t accessp);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastatic const char *
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Gilesmptsas_devid_type_string(mptsas_t *mpt)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles switch (mpt->m_devid) {
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles case MPI2_MFGPAGE_DEVID_SAS2008:
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles return ("SAS2008");
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles case MPI2_MFGPAGE_DEVID_SAS2004:
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles return ("SAS2004");
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles case MPI2_MFGPAGE_DEVID_SAS2108_1:
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles case MPI2_MFGPAGE_DEVID_SAS2108_2:
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles case MPI2_MFGPAGE_DEVID_SAS2108_3:
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles return ("SAS2108");
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles case MPI2_MFGPAGE_DEVID_SAS2116_1:
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles case MPI2_MFGPAGE_DEVID_SAS2116_2:
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles return ("SAS2116");
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles case MPI2_MFGPAGE_DEVID_SAS2208_1:
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles case MPI2_MFGPAGE_DEVID_SAS2208_2:
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles case MPI2_MFGPAGE_DEVID_SAS2208_3:
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles case MPI2_MFGPAGE_DEVID_SAS2208_4:
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles case MPI2_MFGPAGE_DEVID_SAS2208_5:
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles case MPI2_MFGPAGE_DEVID_SAS2208_6:
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles return ("SAS2208");
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles case MPI2_MFGPAGE_DEVID_SAS2308_1:
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles case MPI2_MFGPAGE_DEVID_SAS2308_2:
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles case MPI2_MFGPAGE_DEVID_SAS2308_3:
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles return ("SAS2308");
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles case MPI25_MFGPAGE_DEVID_SAS3004:
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles return ("SAS3004");
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles case MPI25_MFGPAGE_DEVID_SAS3008:
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles return ("SAS3008");
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles case MPI25_MFGPAGE_DEVID_SAS3108_1:
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles case MPI25_MFGPAGE_DEVID_SAS3108_2:
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles case MPI25_MFGPAGE_DEVID_SAS3108_5:
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles case MPI25_MFGPAGE_DEVID_SAS3108_6:
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles return ("SAS3108");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China default:
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return ("?");
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinaint
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinamptsas_ioc_get_facts(mptsas_t *mpt)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Send get facts messages
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mptsas_do_dma(mpt, sizeof (MPI2_IOC_FACTS_REQUEST), NULL,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mptsas_ioc_do_get_facts)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Get facts reply messages
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mptsas_do_dma(mpt, sizeof (MPI2_IOC_FACTS_REPLY), NULL,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mptsas_ioc_do_get_facts_reply)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_SUCCESS);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastatic int
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinamptsas_ioc_do_get_facts(mptsas_t *mpt, caddr_t memp, int var,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t accessp)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#ifndef __lock_lint
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China _NOTE(ARGUNUSED(var))
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#endif
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China pMpi2IOCFactsRequest_t facts;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China int numbytes;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China bzero(memp, sizeof (*facts));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China facts = (void *)memp;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_put8(accessp, &facts->Function, MPI2_FUNCTION_IOC_FACTS);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China numbytes = sizeof (*facts);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Post message via handshake
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mptsas_send_handshake_msg(mpt, memp, numbytes, accessp)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_SUCCESS);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastatic int
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinamptsas_ioc_do_get_facts_reply(mptsas_t *mpt, caddr_t memp, int var,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t accessp)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#ifndef __lock_lint
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China _NOTE(ARGUNUSED(var))
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#endif
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China pMpi2IOCFactsReply_t factsreply;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China int numbytes;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China uint_t iocstatus;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China char buf[32];
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China uint16_t numReplyFrames;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China uint16_t queueSize, queueDiff;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China int simple_sge_main;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China int simple_sge_next;
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada uint32_t capabilities;
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles uint16_t msgversion;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China bzero(memp, sizeof (*factsreply));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China factsreply = (void *)memp;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China numbytes = sizeof (*factsreply);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * get ioc facts reply message
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mptsas_get_handshake_msg(mpt, memp, numbytes, accessp)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (iocstatus = ddi_get16(accessp, &factsreply->IOCStatus)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mptsas_log(mpt, CE_WARN, "mptsas_ioc_do_get_facts_reply: "
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "IOCStatus=0x%x, IOCLogInfo=0x%x", iocstatus,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_get32(accessp, &factsreply->IOCLogInfo));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * store key values from reply to mpt structure
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mpt->m_fwversion = ddi_get32(accessp, &factsreply->FWVersion.Word);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mpt->m_productid = ddi_get16(accessp, &factsreply->ProductID);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China (void) sprintf(buf, "%u.%u.%u.%u",
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_get8(accessp, &factsreply->FWVersion.Struct.Major),
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_get8(accessp, &factsreply->FWVersion.Struct.Minor),
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_get8(accessp, &factsreply->FWVersion.Struct.Unit),
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_get8(accessp, &factsreply->FWVersion.Struct.Dev));
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles mptsas_log(mpt, CE_NOTE, "?MPT Firmware version v%s (%s)\n",
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles buf, mptsas_devid_type_string(mpt));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China (void) ddi_prop_update_string(DDI_DEV_T_NONE, mpt->m_dip,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "firmware-version", buf);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Set up request info.
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mpt->m_max_requests = ddi_get16(accessp,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China &factsreply->RequestCredit) - 1;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mpt->m_req_frame_size = ddi_get16(accessp,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China &factsreply->IOCRequestFrameSize) * 4;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Size of reply free queue should be the number of requests
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * plus some additional for events (32). Make sure number of
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * reply frames is not a multiple of 16 so that the queue sizes
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * are calculated correctly later to be a multiple of 16.
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mpt->m_reply_frame_size = ddi_get8(accessp,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China &factsreply->ReplyFrameSize) * 4;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China numReplyFrames = mpt->m_max_requests + 32;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (!(numReplyFrames % 16)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China numReplyFrames--;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mpt->m_max_replies = numReplyFrames;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China queueSize = numReplyFrames;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China queueSize += 16 - (queueSize % 16);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mpt->m_free_queue_depth = queueSize;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Size of reply descriptor post queue should be the number of
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * request frames + the number of reply frames + 1 and needs to
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * be a multiple of 16. This size can be no larger than
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * MaxReplyDescriptorPostQueueDepth from IOCFacts. If the
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * calculated queue size is larger than allowed, subtract a
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * multiple of 16 from m_max_requests, m_max_replies, and
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * m_reply_free_depth.
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China queueSize = mpt->m_max_requests + numReplyFrames + 1;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (queueSize % 16) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China queueSize += 16 - (queueSize % 16);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mpt->m_post_queue_depth = ddi_get16(accessp,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China &factsreply->MaxReplyDescriptorPostQueueDepth);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (queueSize > mpt->m_post_queue_depth) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China queueDiff = queueSize - mpt->m_post_queue_depth;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (queueDiff % 16) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China queueDiff += 16 - (queueDiff % 16);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mpt->m_max_requests -= queueDiff;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mpt->m_max_replies -= queueDiff;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mpt->m_free_queue_depth -= queueDiff;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China queueSize -= queueDiff;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mpt->m_post_queue_depth = queueSize;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada * Set up max chain depth.
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mpt->m_max_chain_depth = ddi_get8(accessp,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China &factsreply->MaxChainDepth);
af483cc88e21f9d98fcfb8e81dd85c5b2676133bjianfei wang - Sun Microsystems - Beijing China mpt->m_ioc_capabilities = ddi_get32(accessp,
af483cc88e21f9d98fcfb8e81dd85c5b2676133bjianfei wang - Sun Microsystems - Beijing China &factsreply->IOCCapabilities);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles /*
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles * Set flag to check for SAS3 support.
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles */
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles msgversion = ddi_get16(accessp, &factsreply->MsgVersion);
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles if (msgversion == MPI2_VERSION_02_05) {
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles mptsas_log(mpt, CE_NOTE, "?mpt_sas%d SAS 3 Supported\n",
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles mpt->m_instance);
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles mpt->m_MPI25 = TRUE;
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles } else {
50c4511157ef5d522f0c717eef41fe9ddb58f171Andy Giles mptsas_log(mpt, CE_NOTE, "?mpt_sas%d MPI Version 0x%x\n",
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles mpt->m_instance, msgversion);
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles }
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Calculate max frames per request based on DMA S/G length.
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China simple_sge_main = MPTSAS_MAX_FRAME_SGES64(mpt) - 1;
ed7418ae3db79aed594bc486a3b52fc971f4ea4fAndy Giles simple_sge_next = mpt->m_req_frame_size / MPTSAS_SGE_SIZE(mpt) - 1;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mpt->m_max_request_frames = (MPTSAS_MAX_DMA_SEGS -
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China simple_sge_main) / simple_sge_next + 1;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (((MPTSAS_MAX_DMA_SEGS - simple_sge_main) %
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China simple_sge_next) > 1) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mpt->m_max_request_frames++;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada /*
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada * Check if controller supports FW diag buffers and set flag to enable
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada * each type.
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada */
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada capabilities = ddi_get32(accessp, &factsreply->IOCCapabilities);
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada if (capabilities & MPI2_IOCFACTS_CAPABILITY_DIAG_TRACE_BUFFER) {
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada mpt->m_fw_diag_buffer_list[MPI2_DIAG_BUF_TYPE_TRACE].enabled =
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada TRUE;
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada }
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada if (capabilities & MPI2_IOCFACTS_CAPABILITY_SNAPSHOT_BUFFER) {
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada mpt->m_fw_diag_buffer_list[MPI2_DIAG_BUF_TYPE_SNAPSHOT].
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada enabled = TRUE;
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada }
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada if (capabilities & MPI2_IOCFACTS_CAPABILITY_EXTENDED_BUFFER) {
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada mpt->m_fw_diag_buffer_list[MPI2_DIAG_BUF_TYPE_EXTENDED].
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada enabled = TRUE;
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada }
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada /*
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada * Check if controller supports replaying events when issuing Message
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada * Unit Reset and set flag to enable MUR.
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada */
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada if (capabilities & MPI2_IOCFACTS_CAPABILITY_EVENT_REPLAY) {
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada mpt->m_event_replay = TRUE;
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada }
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada /*
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada * Check if controller supports IR.
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada */
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada if (capabilities & MPI2_IOCFACTS_CAPABILITY_INTEGRATED_RAID) {
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada mpt->m_ir_capable = TRUE;
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada }
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_SUCCESS);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinaint
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinamptsas_ioc_get_port_facts(mptsas_t *mpt, int port)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Send get port facts message
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mptsas_do_dma(mpt, sizeof (MPI2_PORT_FACTS_REQUEST), port,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mptsas_ioc_do_get_port_facts)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Get port facts reply message
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mptsas_do_dma(mpt, sizeof (MPI2_PORT_FACTS_REPLY), port,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mptsas_ioc_do_get_port_facts_reply)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_SUCCESS);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastatic int
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinamptsas_ioc_do_get_port_facts(mptsas_t *mpt, caddr_t memp, int var,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t accessp)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China pMpi2PortFactsRequest_t facts;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China int numbytes;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China bzero(memp, sizeof (*facts));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China facts = (void *)memp;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_put8(accessp, &facts->Function, MPI2_FUNCTION_PORT_FACTS);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_put8(accessp, &facts->PortNumber, var);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China numbytes = sizeof (*facts);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Send port facts message via handshake
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mptsas_send_handshake_msg(mpt, memp, numbytes, accessp)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_SUCCESS);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastatic int
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinamptsas_ioc_do_get_port_facts_reply(mptsas_t *mpt, caddr_t memp, int var,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t accessp)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#ifndef __lock_lint
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China _NOTE(ARGUNUSED(var))
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#endif
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China pMpi2PortFactsReply_t factsreply;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China int numbytes;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China uint_t iocstatus;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China bzero(memp, sizeof (*factsreply));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China factsreply = (void *)memp;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China numbytes = sizeof (*factsreply);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Get port facts reply message via handshake
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mptsas_get_handshake_msg(mpt, memp, numbytes, accessp)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (iocstatus = ddi_get16(accessp, &factsreply->IOCStatus)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mptsas_log(mpt, CE_WARN, "mptsas_ioc_do_get_port_facts_reply: "
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "IOCStatus=0x%x, IOCLogInfo=0x%x", iocstatus,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_get32(accessp, &factsreply->IOCLogInfo));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_SUCCESS);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinaint
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinamptsas_ioc_enable_port(mptsas_t *mpt)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Send enable port message
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mptsas_do_dma(mpt, sizeof (MPI2_PORT_ENABLE_REQUEST), 0,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mptsas_ioc_do_enable_port)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Get enable port reply message
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mptsas_do_dma(mpt, sizeof (MPI2_PORT_ENABLE_REPLY), 0,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mptsas_ioc_do_enable_port_reply)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_SUCCESS);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastatic int
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinamptsas_ioc_do_enable_port(mptsas_t *mpt, caddr_t memp, int var,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t accessp)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#ifndef __lock_lint
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China _NOTE(ARGUNUSED(var))
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#endif
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China pMpi2PortEnableRequest_t enable;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China int numbytes;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China bzero(memp, sizeof (*enable));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China enable = (void *)memp;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_put8(accessp, &enable->Function, MPI2_FUNCTION_PORT_ENABLE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China numbytes = sizeof (*enable);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Send message via handshake
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mptsas_send_handshake_msg(mpt, memp, numbytes, accessp)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_SUCCESS);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastatic int
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinamptsas_ioc_do_enable_port_reply(mptsas_t *mpt, caddr_t memp, int var,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t accessp)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#ifndef __lock_lint
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China _NOTE(ARGUNUSED(var))
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#endif
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China int numbytes;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China uint_t iocstatus;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China pMpi2PortEnableReply_t portreply;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China numbytes = sizeof (MPI2_PORT_ENABLE_REPLY);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China bzero(memp, numbytes);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China portreply = (void *)memp;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Get message via handshake
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mptsas_get_handshake_msg(mpt, memp, numbytes, accessp)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (iocstatus = ddi_get16(accessp, &portreply->IOCStatus)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mptsas_log(mpt, CE_WARN, "mptsas_ioc_do_enable_port_reply: "
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "IOCStatus=0x%x, IOCLogInfo=0x%x", iocstatus,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_get32(accessp, &portreply->IOCLogInfo));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_SUCCESS);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinaint
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinamptsas_ioc_enable_event_notification(mptsas_t *mpt)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ASSERT(mutex_owned(&mpt->m_mutex));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Send enable event notification message
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mptsas_do_dma(mpt, sizeof (MPI2_EVENT_NOTIFICATION_REQUEST), NULL,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mptsas_ioc_do_enable_event_notification)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Get enable event reply message
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mptsas_do_dma(mpt, sizeof (MPI2_EVENT_NOTIFICATION_REPLY), NULL,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mptsas_ioc_do_enable_event_notification_reply)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_SUCCESS);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastatic int
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinamptsas_ioc_do_enable_event_notification(mptsas_t *mpt, caddr_t memp, int var,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t accessp)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#ifndef __lock_lint
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China _NOTE(ARGUNUSED(var))
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#endif
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China pMpi2EventNotificationRequest_t event;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China int numbytes;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China bzero(memp, sizeof (*event));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China event = (void *)memp;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_put8(accessp, &event->Function, MPI2_FUNCTION_EVENT_NOTIFICATION);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China numbytes = sizeof (*event);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Send message via handshake
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mptsas_send_handshake_msg(mpt, memp, numbytes, accessp)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_SUCCESS);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastatic int
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinamptsas_ioc_do_enable_event_notification_reply(mptsas_t *mpt, caddr_t memp,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China int var, ddi_acc_handle_t accessp)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#ifndef __lock_lint
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China _NOTE(ARGUNUSED(var))
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#endif
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China int numbytes;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China uint_t iocstatus;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China pMpi2EventNotificationReply_t eventsreply;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China numbytes = sizeof (MPI2_EVENT_NOTIFICATION_REPLY);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China bzero(memp, numbytes);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China eventsreply = (void *)memp;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Get message via handshake
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mptsas_get_handshake_msg(mpt, memp, numbytes, accessp)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (iocstatus = ddi_get16(accessp, &eventsreply->IOCStatus)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mptsas_log(mpt, CE_WARN,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "mptsas_ioc_do_enable_event_notification_reply: "
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "IOCStatus=0x%x, IOCLogInfo=0x%x", iocstatus,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_get32(accessp, &eventsreply->IOCLogInfo));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_SUCCESS);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinaint
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinamptsas_ioc_init(mptsas_t *mpt)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Send ioc init message
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mptsas_do_dma(mpt, sizeof (MPI2_IOC_INIT_REQUEST), NULL,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mptsas_do_ioc_init)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Get ioc init reply message
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mptsas_do_dma(mpt, sizeof (MPI2_IOC_INIT_REPLY), NULL,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mptsas_do_ioc_init_reply)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_SUCCESS);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastatic int
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinamptsas_do_ioc_init(mptsas_t *mpt, caddr_t memp, int var,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t accessp)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#ifndef __lock_lint
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China _NOTE(ARGUNUSED(var))
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#endif
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China pMpi2IOCInitRequest_t init;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China int numbytes;
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada timespec_t time;
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada uint64_t mSec;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China bzero(memp, sizeof (*init));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China init = (void *)memp;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_put8(accessp, &init->Function, MPI2_FUNCTION_IOC_INIT);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_put8(accessp, &init->WhoInit, MPI2_WHOINIT_HOST_DRIVER);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_put16(accessp, &init->MsgVersion, MPI2_VERSION);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_put16(accessp, &init->HeaderVersion, MPI2_HEADER_VERSION);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_put16(accessp, &init->SystemRequestFrameSize,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mpt->m_req_frame_size / 4);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_put16(accessp, &init->ReplyDescriptorPostQueueDepth,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mpt->m_post_queue_depth);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_put16(accessp, &init->ReplyFreeQueueDepth,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mpt->m_free_queue_depth);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * These addresses are set using the DMA cookie addresses from when the
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * memory was allocated. Sense buffer hi address should be 0.
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
940efceed6b67909bbec473feca747d2fbaa32b9Andy Giles ddi_put32(accessp, &init->SenseBufferAddressHigh,
940efceed6b67909bbec473feca747d2fbaa32b9Andy Giles (uint32_t)(mpt->m_req_sense_dma_addr >> 32));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_put32(accessp, &init->SystemReplyAddressHigh,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China (uint32_t)(mpt->m_reply_frame_dma_addr >> 32));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_put32(accessp, &init->SystemRequestFrameBaseAddress.High,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China (uint32_t)(mpt->m_req_frame_dma_addr >> 32));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_put32(accessp, &init->SystemRequestFrameBaseAddress.Low,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China (uint32_t)mpt->m_req_frame_dma_addr);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_put32(accessp, &init->ReplyDescriptorPostQueueAddress.High,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China (uint32_t)(mpt->m_post_queue_dma_addr >> 32));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_put32(accessp, &init->ReplyDescriptorPostQueueAddress.Low,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China (uint32_t)mpt->m_post_queue_dma_addr);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_put32(accessp, &init->ReplyFreeQueueAddress.High,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China (uint32_t)(mpt->m_free_queue_dma_addr >> 32));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_put32(accessp, &init->ReplyFreeQueueAddress.Low,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China (uint32_t)mpt->m_free_queue_dma_addr);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada /*
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada * Fill in the timestamp with the number of milliseconds since midnight
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada * of January 1, 1970 UT (Greenwich Mean Time). Time is returned in
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada * seconds and nanoseconds. Translate both to milliseconds and add
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada * them together to get total milliseconds.
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada */
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada gethrestime(&time);
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada mSec = time.tv_sec * MILLISEC;
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada mSec += (time.tv_nsec / MICROSEC);
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada ddi_put32(accessp, &init->TimeStamp.High, (uint32_t)(mSec >> 32));
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada ddi_put32(accessp, &init->TimeStamp.Low, (uint32_t)mSec);
76a4caf6c7b8f1c35d80a77bd8005aeae6197786Ada
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China numbytes = sizeof (*init);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Post message via handshake
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mptsas_send_handshake_msg(mpt, memp, numbytes, accessp)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_SUCCESS);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinastatic int
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing Chinamptsas_do_ioc_init_reply(mptsas_t *mpt, caddr_t memp, int var,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_acc_handle_t accessp)
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China{
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#ifndef __lock_lint
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China _NOTE(ARGUNUSED(var))
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China#endif
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China pMpi2IOCInitReply_t initreply;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China int numbytes;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China uint_t iocstatus;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China numbytes = sizeof (MPI2_IOC_INIT_REPLY);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China bzero(memp, numbytes);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China initreply = (void *)memp;
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China /*
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China * Get reply message via handshake
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China */
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (mptsas_get_handshake_msg(mpt, memp, numbytes, accessp)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if (iocstatus = ddi_get16(accessp, &initreply->IOCStatus)) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mptsas_log(mpt, CE_WARN, "mptsas_do_ioc_init_reply: "
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "IOCStatus=0x%x, IOCLogInfo=0x%x", iocstatus,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China ddi_get32(accessp, &initreply->IOCLogInfo));
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China if ((ddi_get32(mpt->m_datap, &mpt->m_reg->Doorbell)) &
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China MPI2_IOC_STATE_OPERATIONAL) {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China mptsas_log(mpt, CE_NOTE,
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China "?mpt%d: IOC Operational.\n", mpt->m_instance);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China } else {
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_FAILURE);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China }
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China return (DDI_SUCCESS);
5b5046010dc014958659914f953b1197da4054acjiang wu - Sun Microsystems - Beijing China}