fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * CDDL HEADER START
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * The contents of this file are subject to the terms of the
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * Common Development and Distribution License (the "License").
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * You may not use this file except in compliance with the License.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld * You can obtain a copy of the license at
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld * http://www.opensource.org/licenses/cddl1.txt.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * See the License for the specific language governing permissions
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * and limitations under the License.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * When distributing Covered Code, include this CDDL HEADER in each
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * If applicable, add the following below this CDDL HEADER, with the
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * fields enclosed by brackets "[]" replaced with your own identifying
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * information: Portions Copyright [yyyy] [name of copyright owner]
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * CDDL HEADER END
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld * Copyright (c) 2004-2012 Emulex. All rights reserved.
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan * Use is subject to license terms.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan#include <emlxs.h>
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan/* Required for EMLXS_CONTEXT in EMLXS_MSGF calls */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar SwaminathanEMLXS_MSG_DEF(EMLXS_MBOX_C);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeldemlxs_table_t emlxs_mb_status_table[] = {
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBX_SUCCESS, "SUCCESS"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBX_FAILURE, "FAILURE"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_NUM_IOCBS, "NUM_IOCBS"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_IOCBS_EXCEEDED, "IOCBS_EXCEEDED"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_BAD_RING_NUMBER, "BAD_RING_NUMBER"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_MASK_ENTRIES_RANGE, "MASK_ENTRIES_RANGE"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_MASKS_EXCEEDED, "MASKS_EXCEEDED"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_BAD_PROFILE, "BAD_PROFILE"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_BAD_DEF_CLASS, "BAD_DEF_CLASS"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_BAD_MAX_RESPONDER, "BAD_MAX_RESPONDER"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_BAD_MAX_ORIGINATOR, "BAD_MAX_ORIGINATOR"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_RPI_REGISTERED, "RPI_REGISTERED"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_RPI_FULL, "RPI_FULL"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_NO_RESOURCES, "NO_RESOURCES"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_BAD_RCV_LENGTH, "BAD_RCV_LENGTH"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_DMA_ERROR, "DMA_ERROR"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_NOT_SUPPORTED, "NOT_SUPPORTED"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_UNSUPPORTED_FEATURE, "UNSUPPORTED_FEATURE"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_UNKNOWN_COMMAND, "UNKNOWN_COMMAND"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_BAD_IP_BIT, "BAD_IP_BIT"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_BAD_PCB_ALIGN, "BAD_PCB_ALIGN"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_BAD_HBQ_ID, "BAD_HBQ_ID"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_BAD_HBQ_STATE, "BAD_HBQ_STATE"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_BAD_HBQ_MASK_NUM, "BAD_HBQ_MASK_NUM"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_BAD_HBQ_MASK_SUBSET, "BAD_HBQ_MASK_SUBSET"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_HBQ_CREATE_FAIL, "HBQ_CREATE_FAIL"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_HBQ_EXISTING, "HBQ_EXISTING"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_HBQ_RSPRING_FULL, "HBQ_RSPRING_FULL"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_HBQ_DUP_MASK, "HBQ_DUP_MASK"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_HBQ_INVAL_GET_PTR, "HBQ_INVAL_GET_PTR"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_BAD_HBQ_SIZE, "BAD_HBQ_SIZE"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_BAD_HBQ_ORDER, "BAD_HBQ_ORDER"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_INVALID_ID, "INVALID_ID"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_INVALID_VFI, "INVALID_VFI"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_FLASH_WRITE_FAILED, "FLASH_WRITE_FAILED"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_INVALID_LINKSPEED, "INVALID_LINKSPEED"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_BAD_REDIRECT, "BAD_REDIRECT"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_RING_ALREADY_CONFIG, "RING_ALREADY_CONFIG"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_RING_INACTIVE, "RING_INACTIVE"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_RPI_INACTIVE, "RPI_INACTIVE"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_NO_ACTIVE_XRI, "NO_ACTIVE_XRI"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_XRI_NOT_ACTIVE, "XRI_NOT_ACTIVE"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_RPI_INUSE, "RPI_INUSE"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_NO_LINK_ATTENTION, "NO_LINK_ATTENTION"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_INVALID_SLI_MODE, "INVALID_SLI_MODE"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_INVALID_HOST_PTR, "INVALID_HOST_PTR"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_CANT_CFG_SLI_MODE, "CANT_CFG_SLI_MODE"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_BAD_OVERLAY, "BAD_OVERLAY"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_INVALID_FEAT_REQ, "INVALID_FEAT_REQ"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_CONFIG_CANT_COMPLETE, "CONFIG_CANT_COMPLETE"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_DID_ALREADY_REGISTERED, "DID_ALREADY_REGISTERED"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_DID_INCONSISTENT, "DID_INCONSISTENT"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_VPI_TOO_LARGE, "VPI_TOO_LARGE"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_STILL_ASSOCIATED, "STILL_ASSOCIATED"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_INVALID_VF_STATE, "INVALID_VF_STATE"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_VFI_ALREADY_REGISTERED, "VFI_ALREADY_REGISTERED"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_VFI_TOO_LARGE, "VFI_TOO_LARGE"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_LOAD_FW_FAILED, "LOAD_FW_FAILED"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBXERR_FIND_FW_FAILED, "FIND_FW_FAILED"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld};
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_table_t emlxs_mb_cmd_table[] = {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_SHUTDOWN, "SHUTDOWN"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_LOAD_SM, "LOAD_SM"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_READ_NV, "READ_NV"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_WRITE_NV, "WRITE_NV"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_RUN_BIU_DIAG, "RUN_BIU_DIAG"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_INIT_LINK, "INIT_LINK"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_DOWN_LINK, "DOWN_LINK"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_CONFIG_LINK, "CONFIG_LINK"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_PART_SLIM, "PART_SLIM"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_CONFIG_RING, "CONFIG_RING"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_RESET_RING, "RESET_RING"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_READ_CONFIG, "READ_CONFIG"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_READ_RCONFIG, "READ_RCONFIG"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_READ_SPARM, "READ_SPARM"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_READ_STATUS, "READ_STATUS"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_READ_RPI, "READ_RPI"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_READ_XRI, "READ_XRI"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_READ_REV, "READ_REV"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_READ_LNK_STAT, "READ_LNK_STAT"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_REG_LOGIN, "REG_LOGIN"},
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore {MBX_UNREG_LOGIN, "UNREG_RPI"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_READ_LA, "READ_LA"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_CLEAR_LA, "CLEAR_LA"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_DUMP_MEMORY, "DUMP_MEMORY"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_DUMP_CONTEXT, "DUMP_CONTEXT"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_RUN_DIAGS, "RUN_DIAGS"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_RESTART, "RESTART"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_UPDATE_CFG, "UPDATE_CFG"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_DOWN_LOAD, "DOWN_LOAD"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_DEL_LD_ENTRY, "DEL_LD_ENTRY"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_RUN_PROGRAM, "RUN_PROGRAM"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_SET_MASK, "SET_MASK"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_SET_VARIABLE, "SET_VARIABLE"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_UNREG_D_ID, "UNREG_D_ID"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_KILL_BOARD, "KILL_BOARD"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_CONFIG_FARP, "CONFIG_FARP"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_LOAD_AREA, "LOAD_AREA"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_RUN_BIU_DIAG64, "RUN_BIU_DIAG64"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_CONFIG_PORT, "CONFIG_PORT"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_READ_SPARM64, "READ_SPARM64"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_READ_RPI64, "READ_RPI64"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_CONFIG_MSI, "CONFIG_MSI"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_CONFIG_MSIX, "CONFIG_MSIX"},
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore {MBX_REG_LOGIN64, "REG_RPI"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_READ_LA64, "READ_LA64"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_FLASH_WR_ULA, "FLASH_WR_ULA"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_SET_DEBUG, "SET_DEBUG"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_GET_DEBUG, "GET_DEBUG"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_LOAD_EXP_ROM, "LOAD_EXP_ROM"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_BEACON, "BEACON"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_CONFIG_HBQ, "CONFIG_HBQ"}, /* SLI3 */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_REG_VPI, "REG_VPI"}, /* NPIV */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_UNREG_VPI, "UNREG_VPI"}, /* NPIV */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_ASYNC_EVENT, "ASYNC_EVENT"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_HEARTBEAT, "HEARTBEAT"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_READ_EVENT_LOG_STATUS, "READ_EVENT_LOG_STATUS"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_READ_EVENT_LOG, "READ_EVENT_LOG"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_WRITE_EVENT_LOG, "WRITE_EVENT_LOG"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_NV_LOG, "NV_LOG"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_PORT_CAPABILITIES, "PORT_CAPABILITIES"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_IOV_CONTROL, "IOV_CONTROL"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_IOV_MBX, "IOV_MBX"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_SLI_CONFIG, "SLI_CONFIG"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_REQUEST_FEATURES, "REQUEST_FEATURES"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_RESUME_RPI, "RESUME_RPI"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_REG_VFI, "REG_VFI"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_REG_FCFI, "REG_FCFI"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_UNREG_VFI, "UNREG_VFI"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_UNREG_FCFI, "UNREG_FCFI"},
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan {MBX_INIT_VFI, "INIT_VFI"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBX_INIT_VPI, "INIT_VPI"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBX_WRITE_VPARMS, "WRITE_VPARMS"},
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {MBX_ACCESS_VDATA, "ACCESS_VDATA"}
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan}; /* emlxs_mb_cmd_table */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeldemlxs_table_t emlxs_request_feature_table[] = {
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {SLI4_FEATURE_INHIBIT_AUTO_ABTS, "IAA "}, /* Bit 0 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {SLI4_FEATURE_NPIV, "NPIV "}, /* Bit 1 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {SLI4_FEATURE_DIF, "DIF "}, /* Bit 2 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {SLI4_FEATURE_VIRTUAL_FABRICS, "VF "}, /* Bit 3 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {SLI4_FEATURE_FCP_INITIATOR, "FCPI "}, /* Bit 4 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {SLI4_FEATURE_FCP_TARGET, "FCPT "}, /* Bit 5 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {SLI4_FEATURE_FCP_COMBO, "FCPC "}, /* Bit 6 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {SLI4_FEATURE_RSVD1, "RSVD1 "}, /* Bit 7 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {SLI4_FEATURE_RQD, "RQD "}, /* Bit 8 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {SLI4_FEATURE_INHIBIT_AUTO_ABTS_R, "IAAR "}, /* Bit 9 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {SLI4_FEATURE_HIGH_LOGIN_MODE, "HLM "}, /* Bit 10 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld {SLI4_FEATURE_PERF_HINT, "PERFH "} /* Bit 11 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld}; /* emlxs_request_feature_table */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeldextern char *
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeldemlxs_mb_xlate_status(uint32_t status)
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld{
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld static char buffer[32];
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld uint32_t i;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld uint32_t count;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld count = sizeof (emlxs_mb_status_table) / sizeof (emlxs_table_t);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld for (i = 0; i < count; i++) {
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld if (status == emlxs_mb_status_table[i].code) {
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld return (emlxs_mb_status_table[i].string);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld }
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld }
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld (void) snprintf(buffer, sizeof (buffer), "status=%x", status);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld return (buffer);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld} /* emlxs_mb_xlate_status() */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore/* SLI4 */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan/*ARGSUSED*/
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_resetport(emlxs_hba_t *hba, MAILBOXQ *mbq)
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan{
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore MAILBOX4 *mb4 = (MAILBOX4 *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore bzero((void *) mb4, MAILBOX_CMD_SLI4_BSIZE);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->nonembed = NULL;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /*
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan * Signifies an embedded command
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.embedded = 1;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxCommand = MBX_SLI_CONFIG;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxOwner = OWN_HOST;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.payload_length = IOCTL_HEADER_SZ;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.un_hdr.hdr_req.subsystem =
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan IOCTL_SUBSYSTEM_COMMON;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.un_hdr.hdr_req.opcode = COMMON_OPCODE_RESET;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.un_hdr.hdr_req.timeout = 0;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.un_hdr.hdr_req.req_length = 0;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan} /* emlxs_mb_resetport() */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore/* SLI4 */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan/*ARGSUSED*/
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanextern void
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeldemlxs_mb_request_features(emlxs_hba_t *hba, MAILBOXQ *mbq, uint32_t mask)
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan{
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore MAILBOX4 *mb4 = (MAILBOX4 *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->flag &= ~FC_NPIV_ENABLED;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld hba->sli.sli4.flag &= ~(EMLXS_SLI4_PHON | EMLXS_SLI4_PHWQ);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore bzero((void *) mb4, MAILBOX_CMD_SLI4_BSIZE);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->nonembed = NULL;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxCommand = MBX_REQUEST_FEATURES;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varReqFeatures.featuresRequested = mask;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld return;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan} /* emlxs_mb_request_features() */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore/* SLI4 */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan/*ARGSUSED*/
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_noop(emlxs_hba_t *hba, MAILBOXQ *mbq)
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan{
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore MAILBOX4 *mb4 = (MAILBOX4 *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan IOCTL_COMMON_NOP *nop;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore bzero((void *) mb4, MAILBOX_CMD_SLI4_BSIZE);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->nonembed = NULL;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /*
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan * Signifies an embedded command
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.embedded = 1;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxCommand = MBX_SLI_CONFIG;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxOwner = OWN_HOST;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.payload_length = sizeof (IOCTL_COMMON_NOP) +
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan IOCTL_HEADER_SZ;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.un_hdr.hdr_req.subsystem =
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan IOCTL_SUBSYSTEM_COMMON;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.un_hdr.hdr_req.opcode = COMMON_OPCODE_NOP;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.un_hdr.hdr_req.timeout = 0;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.un_hdr.hdr_req.req_length =
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan sizeof (IOCTL_COMMON_NOP);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore nop = (IOCTL_COMMON_NOP *)&mb4->un.varSLIConfig.payload;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan nop->params.request.context = -1;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan} /* emlxs_mb_noop() */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore/* SLI4 */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan/*ARGSUSED*/
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanextern int
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mbext_noop(emlxs_hba_t *hba, MAILBOXQ *mbq)
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan{
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore MAILBOX4 *mb4 = (MAILBOX4 *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan IOCTL_COMMON_NOP *nop;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MATCHMAP *mp;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbox_req_hdr_t *hdr_req;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore bzero((void *) mb4, MAILBOX_CMD_SLI4_BSIZE);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld if ((mp = (MATCHMAP *)emlxs_mem_get(hba, MEM_BUF)) == 0) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return (1);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /*
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan * Save address for completion
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan * Signifies a non-embedded command
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.embedded = 0;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->nonembed = (void *)mp;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxCommand = MBX_SLI_CONFIG;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hdr_req = (mbox_req_hdr_t *)mp->virt;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hdr_req->subsystem = IOCTL_SUBSYSTEM_COMMON;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hdr_req->opcode = COMMON_OPCODE_NOP;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hdr_req->timeout = 0;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hdr_req->req_length = sizeof (IOCTL_COMMON_NOP);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan nop = (IOCTL_COMMON_NOP *)(hdr_req + 1);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan nop->params.request.context = -1;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return (0);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan} /* emlxs_mbext_noop() */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore/* SLI4 */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan/*ARGSUSED*/
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_eq_create(emlxs_hba_t *hba, MAILBOXQ *mbq, uint32_t num)
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan{
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore MAILBOX4 *mb4 = (MAILBOX4 *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan IOCTL_COMMON_EQ_CREATE *qp;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan uint64_t addr;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore bzero((void *) mb4, MAILBOX_CMD_SLI4_BSIZE);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->nonembed = NULL;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /*
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan * Signifies an embedded command
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.embedded = 1;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxCommand = MBX_SLI_CONFIG;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxOwner = OWN_HOST;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.payload_length =
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan sizeof (IOCTL_COMMON_EQ_CREATE) + IOCTL_HEADER_SZ;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.un_hdr.hdr_req.subsystem =
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan IOCTL_SUBSYSTEM_COMMON;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.un_hdr.hdr_req.opcode = COMMON_OPCODE_EQ_CREATE;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.un_hdr.hdr_req.timeout = 0;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.un_hdr.hdr_req.req_length =
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan sizeof (IOCTL_COMMON_EQ_CREATE);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.version = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore qp = (IOCTL_COMMON_EQ_CREATE *)&mb4->un.varSLIConfig.payload;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* 1024 * 4 bytes = 4K */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan qp->params.request.EQContext.Count = EQ_ELEMENT_COUNT_1024;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan qp->params.request.EQContext.Valid = 1;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan qp->params.request.EQContext.DelayMult = EQ_DELAY_MULT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan addr = hba->sli.sli4.eq[num].addr.phys;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan qp->params.request.NumPages = 1;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan qp->params.request.Pages[0].addrLow = PADDR_LO(addr);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan qp->params.request.Pages[0].addrHigh = PADDR_HI(addr);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan} /* emlxs_mb_eq_create() */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore/* SLI4 */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan/*ARGSUSED*/
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_cq_create(emlxs_hba_t *hba, MAILBOXQ *mbq, uint32_t num)
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan{
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore MAILBOX4 *mb4 = (MAILBOX4 *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan IOCTL_COMMON_CQ_CREATE *qp;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld IOCTL_COMMON_CQ_CREATE_V2 *qp2;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan uint64_t addr;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld uint32_t i;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore bzero((void *) mb4, MAILBOX_CMD_SLI4_BSIZE);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->nonembed = NULL;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /*
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan * Signifies an embedded command
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.embedded = 1;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxCommand = MBX_SLI_CONFIG;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxOwner = OWN_HOST;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld switch (hba->sli.sli4.param.CQV) {
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld case 0:
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.payload_length =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld sizeof (IOCTL_COMMON_CQ_CREATE) + IOCTL_HEADER_SZ;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.subsystem =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld IOCTL_SUBSYSTEM_COMMON;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.opcode =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld COMMON_OPCODE_CQ_CREATE;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.timeout = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.req_length =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld sizeof (IOCTL_COMMON_CQ_CREATE);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.version = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp = (IOCTL_COMMON_CQ_CREATE *)
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld &mb4->un.varSLIConfig.payload;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld /* 256 * 16 bytes = 4K */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.CQContext.Count = CQ_ELEMENT_COUNT_256;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.CQContext.EQId =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld (uint8_t)hba->sli.sli4.cq[num].eqid;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.CQContext.Valid = 1;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.CQContext.Eventable = 1;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.CQContext.NoDelay = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.CQContext.CoalesceWM = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld addr = hba->sli.sli4.cq[num].addr.phys;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.NumPages = 1;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.Pages[0].addrLow = PADDR_LO(addr);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.Pages[0].addrHigh = PADDR_HI(addr);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld break;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld case 2:
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld default:
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.payload_length =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld sizeof (IOCTL_COMMON_CQ_CREATE_V2) + IOCTL_HEADER_SZ;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.subsystem =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld IOCTL_SUBSYSTEM_COMMON;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.opcode =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld COMMON_OPCODE_CQ_CREATE;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.timeout = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.req_length =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld sizeof (IOCTL_COMMON_CQ_CREATE_V2);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.version = 2;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp2 = (IOCTL_COMMON_CQ_CREATE_V2 *)
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld &mb4->un.varSLIConfig.payload;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp2->params.request.CQContext.CqeCnt = CQ_ELEMENT_COUNT_1024;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp2->params.request.CQContext.CqeSize = CQE_SIZE_16_BYTES;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp2->params.request.CQContext.EQId = hba->sli.sli4.cq[num].eqid;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp2->params.request.CQContext.Valid = 1;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp2->params.request.CQContext.AutoValid = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp2->params.request.CQContext.Eventable = 1;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp2->params.request.CQContext.NoDelay = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp2->params.request.CQContext.Count1 = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp2->params.request.CQContext.CoalesceWM = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld addr = hba->sli.sli4.cq[num].addr.phys;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp2->params.request.PageSize = CQ_PAGE_SIZE_4K;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp2->params.request.NumPages = EMLXS_NUM_CQ_PAGES_V2;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld for (i = 0; i < EMLXS_NUM_CQ_PAGES_V2; i++) {
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp2->params.request.Pages[i].addrLow = PADDR_LO(addr);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp2->params.request.Pages[i].addrHigh = PADDR_HI(addr);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld addr += 4096;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld }
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld break;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld }
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld return;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld} /* emlxs_mb_cq_create() */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld/* SLI4 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld/*ARGSUSED*/
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeldextern void
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeldemlxs_mb_get_port_name(emlxs_hba_t *hba, MAILBOXQ *mbq)
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld{
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld MAILBOX4 *mb4 = (MAILBOX4 *)mbq;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld bzero((void *) mb4, MAILBOX_CMD_SLI4_BSIZE);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mbq->nonembed = NULL;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mbq->mbox_cmpl = NULL; /* no cmpl needed */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mbq->port = (void *)&PPORT;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.embedded = 1;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->mbxCommand = MBX_SLI_CONFIG;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->mbxOwner = OWN_HOST;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.payload_length = IOCTL_HEADER_SZ;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.un_hdr.hdr_req.subsystem =
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan IOCTL_SUBSYSTEM_COMMON;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.opcode =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld COMMON_OPCODE_GET_PORT_NAME;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.un_hdr.hdr_req.timeout = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.req_length = 0;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld if (hba->model_info.chip & EMLXS_BE_CHIPS) {
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.version = 0; /* V0 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld } else {
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld IOCTL_COMMON_GET_PORT_NAME_V1 *pn;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.version = 1; /* V1 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld pn = (IOCTL_COMMON_GET_PORT_NAME_V1 *)
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld &mb4->un.varSLIConfig.payload;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld pn->params.request.pt = PORT_TYPE_FC;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld} /* emlxs_mb_get_port_name() */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld/* SLI4 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld/*ARGSUSED*/
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeldextern void
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeldemlxs_mb_get_sli4_params(emlxs_hba_t *hba, MAILBOXQ *mbq)
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld{
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld MAILBOX4 *mb4 = (MAILBOX4 *)mbq;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld bzero((void *) mb4, MAILBOX_CMD_SLI4_BSIZE);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mbq->nonembed = NULL;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mbq->mbox_cmpl = NULL; /* no cmpl needed */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mbq->port = (void *)&PPORT;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.embedded = 1;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->mbxCommand = MBX_SLI_CONFIG;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->mbxOwner = OWN_HOST;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.payload_length = IOCTL_HEADER_SZ;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.subsystem =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld IOCTL_SUBSYSTEM_COMMON;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.opcode =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld COMMON_OPCODE_GET_SLI4_PARAMS;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.timeout = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.req_length = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.version = 0; /* V0 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld return;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld} /* emlxs_mb_get_sli4_params() */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld/* SLI4 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld/*ARGSUSED*/
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeldextern void
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeldemlxs_mb_get_extents_info(emlxs_hba_t *hba, MAILBOXQ *mbq, uint16_t type)
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld{
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld MAILBOX4 *mb4 = (MAILBOX4 *)mbq;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld IOCTL_COMMON_EXTENTS *ep;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld bzero((void *) mb4, MAILBOX_CMD_SLI4_BSIZE);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mbq->nonembed = NULL;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mbq->mbox_cmpl = NULL; /* no cmpl needed */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mbq->port = (void *)&PPORT;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.embedded = 1;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->mbxCommand = MBX_SLI_CONFIG;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->mbxOwner = OWN_HOST;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.payload_length = IOCTL_HEADER_SZ;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.subsystem =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld IOCTL_SUBSYSTEM_COMMON;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.opcode =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld COMMON_OPCODE_GET_EXTENTS_INFO;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.timeout = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.req_length =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld sizeof (IOCTL_COMMON_EXTENTS);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.vf_number = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.vh_number = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.pf_number = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.version = 0; /* V0 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld ep = (IOCTL_COMMON_EXTENTS *)&mb4->un.varSLIConfig.payload;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld ep->params.request.RscType = type;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld return;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld} /* emlxs_mb_get_extents_info() */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld/* SLI4 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld/*ARGSUSED*/
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeldextern void
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeldemlxs_mb_get_extents(emlxs_hba_t *hba, MAILBOXQ *mbq, uint16_t type)
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld{
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld MAILBOX4 *mb4 = (MAILBOX4 *)mbq;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld IOCTL_COMMON_EXTENTS *ep;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld bzero((void *) mb4, MAILBOX_CMD_SLI4_BSIZE);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mbq->nonembed = NULL;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mbq->mbox_cmpl = NULL; /* no cmpl needed */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mbq->port = (void *)&PPORT;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.embedded = 1;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->mbxCommand = MBX_SLI_CONFIG;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->mbxOwner = OWN_HOST;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.payload_length = IOCTL_HEADER_SZ;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.subsystem =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld IOCTL_SUBSYSTEM_COMMON;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.opcode =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld COMMON_OPCODE_GET_EXTENTS;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.timeout = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.req_length =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld sizeof (IOCTL_COMMON_EXTENTS);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.vf_number = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.vh_number = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.pf_number = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.version = 0; /* V0 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld ep = (IOCTL_COMMON_EXTENTS *)&mb4->un.varSLIConfig.payload;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld ep->params.request.RscType = type;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld return;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld} /* emlxs_mb_get_extents() */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld/* SLI4 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld/*ARGSUSED*/
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeldextern void
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeldemlxs_mb_alloc_extents(emlxs_hba_t *hba, MAILBOXQ *mbq, uint16_t type,
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld uint16_t count)
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld{
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld MAILBOX4 *mb4 = (MAILBOX4 *)mbq;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld IOCTL_COMMON_EXTENTS *ep;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld bzero((void *) mb4, MAILBOX_CMD_SLI4_BSIZE);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mbq->nonembed = NULL;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mbq->mbox_cmpl = NULL; /* no cmpl needed */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mbq->port = (void *)&PPORT;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.embedded = 1;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->mbxCommand = MBX_SLI_CONFIG;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->mbxOwner = OWN_HOST;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.payload_length = IOCTL_HEADER_SZ;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.subsystem =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld IOCTL_SUBSYSTEM_COMMON;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.opcode =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld COMMON_OPCODE_ALLOC_EXTENTS;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.timeout = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.req_length =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld sizeof (IOCTL_COMMON_EXTENTS);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.vf_number = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.vh_number = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.pf_number = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.version = 0; /* V0 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld ep = (IOCTL_COMMON_EXTENTS *)&mb4->un.varSLIConfig.payload;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld ep->params.request.RscType = type;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld count = min(count, MAX_EXTENTS);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld ep->params.request.RscCnt = count;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld return;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld} /* emlxs_mb_alloc_extents() */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld/* SLI4 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld/*ARGSUSED*/
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeldextern void
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeldemlxs_mb_dealloc_extents(emlxs_hba_t *hba, MAILBOXQ *mbq, uint16_t type)
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld{
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld MAILBOX4 *mb4 = (MAILBOX4 *)mbq;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld IOCTL_COMMON_EXTENTS *ep;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld bzero((void *) mb4, MAILBOX_CMD_SLI4_BSIZE);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mbq->nonembed = NULL;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mbq->mbox_cmpl = NULL; /* no cmpl needed */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mbq->port = (void *)&PPORT;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.embedded = 1;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->mbxCommand = MBX_SLI_CONFIG;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->mbxOwner = OWN_HOST;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.payload_length = IOCTL_HEADER_SZ;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.subsystem =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld IOCTL_SUBSYSTEM_COMMON;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.opcode =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld COMMON_OPCODE_DEALLOC_EXTENTS;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.timeout = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.req_length =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld sizeof (IOCTL_COMMON_EXTENTS);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.vf_number = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.vh_number = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.pf_number = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req2.version = 0; /* V0 */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld ep = (IOCTL_COMMON_EXTENTS *)&mb4->un.varSLIConfig.payload;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld ep->params.request.RscType = type;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld return;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld} /* emlxs_mb_dealloc_extents() */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore/* SLI4 */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan/*ARGSUSED*/
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_wq_create(emlxs_hba_t *hba, MAILBOXQ *mbq, uint32_t num)
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan{
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore MAILBOX4 *mb4 = (MAILBOX4 *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan IOCTL_FCOE_WQ_CREATE *qp;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld IOCTL_FCOE_WQ_CREATE_V1 *qp1;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan uint64_t addr;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan int i;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore bzero((void *) mb4, MAILBOX_CMD_SLI4_BSIZE);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->nonembed = NULL;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /*
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan * Signifies an embedded command
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.embedded = 1;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxCommand = MBX_SLI_CONFIG;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld switch (hba->sli.sli4.param.WQV) {
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld case 0:
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.payload_length =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld sizeof (IOCTL_FCOE_WQ_CREATE) + IOCTL_HEADER_SZ;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.subsystem =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld IOCTL_SUBSYSTEM_FCOE;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.opcode =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld FCOE_OPCODE_WQ_CREATE;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.timeout = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.req_length =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld sizeof (IOCTL_FCOE_WQ_CREATE);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.version = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld addr = hba->sli.sli4.wq[num].addr.phys;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp = (IOCTL_FCOE_WQ_CREATE *)&mb4->un.varSLIConfig.payload;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.CQId = hba->sli.sli4.wq[num].cqid;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.NumPages = EMLXS_NUM_WQ_PAGES;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld for (i = 0; i < EMLXS_NUM_WQ_PAGES; i++) {
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.Pages[i].addrLow = PADDR_LO(addr);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.Pages[i].addrHigh = PADDR_HI(addr);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld addr += 4096;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld }
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld break;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld case 1:
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld default:
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.payload_length =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld sizeof (IOCTL_FCOE_WQ_CREATE_V1) + IOCTL_HEADER_SZ;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.subsystem =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld IOCTL_SUBSYSTEM_FCOE;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.opcode =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld FCOE_OPCODE_WQ_CREATE;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.timeout = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.req_length =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld sizeof (IOCTL_FCOE_WQ_CREATE_V1);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.version = 1;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld addr = hba->sli.sli4.wq[num].addr.phys;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1 = (IOCTL_FCOE_WQ_CREATE_V1 *)&mb4->un.varSLIConfig.payload;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1->params.request.CQId = hba->sli.sli4.wq[num].cqid;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1->params.request.NumPages = EMLXS_NUM_WQ_PAGES;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1->params.request.WqeCnt = WQ_DEPTH;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1->params.request.WqeSize = WQE_SIZE_64_BYTES;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1->params.request.PageSize = WQ_PAGE_SIZE_4K;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld for (i = 0; i < EMLXS_NUM_WQ_PAGES; i++) {
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1->params.request.Pages[i].addrLow = PADDR_LO(addr);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1->params.request.Pages[i].addrHigh = PADDR_HI(addr);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld addr += 4096;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld }
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld break;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan} /* emlxs_mb_wq_create() */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore/* SLI4 */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan/*ARGSUSED*/
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_rq_create(emlxs_hba_t *hba, MAILBOXQ *mbq, uint32_t num)
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore{
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore MAILBOX4 *mb4 = (MAILBOX4 *)mbq;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore IOCTL_FCOE_RQ_CREATE *qp;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld IOCTL_FCOE_RQ_CREATE_V1 *qp1;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore uint64_t addr;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore bzero((void *) mb4, MAILBOX_CMD_SLI4_BSIZE);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->nonembed = NULL;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /*
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore * Signifies an embedded command
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.embedded = 1;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxCommand = MBX_SLI_CONFIG;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld switch (hba->sli.sli4.param.RQV) {
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld case 0:
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.payload_length =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld sizeof (IOCTL_FCOE_RQ_CREATE) + IOCTL_HEADER_SZ;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.subsystem =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld IOCTL_SUBSYSTEM_FCOE;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.opcode =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld FCOE_OPCODE_RQ_CREATE;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.timeout = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.req_length =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld sizeof (IOCTL_FCOE_RQ_CREATE);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.version = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld addr = hba->sli.sli4.rq[num].addr.phys;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp = (IOCTL_FCOE_RQ_CREATE *)&mb4->un.varSLIConfig.payload;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.RQContext.RqeCnt = RQ_DEPTH_EXPONENT;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.RQContext.BufferSize = RQB_DATA_SIZE;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.RQContext.CQId =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld hba->sli.sli4.rq[num].cqid;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.NumPages = 1;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.Pages[0].addrLow = PADDR_LO(addr);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.Pages[0].addrHigh = PADDR_HI(addr);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld break;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld case 1:
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld default:
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.payload_length =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld sizeof (IOCTL_FCOE_RQ_CREATE_V1) + IOCTL_HEADER_SZ;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.subsystem =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld IOCTL_SUBSYSTEM_FCOE;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.opcode =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld FCOE_OPCODE_RQ_CREATE;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.timeout = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.req_length =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld sizeof (IOCTL_FCOE_RQ_CREATE_V1);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.version = 1;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld addr = hba->sli.sli4.rq[num].addr.phys;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1 = (IOCTL_FCOE_RQ_CREATE_V1 *)&mb4->un.varSLIConfig.payload;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1->params.request.RQContext.RqeCnt = RQ_DEPTH;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1->params.request.RQContext.RqeSize = RQE_SIZE_8_BYTES;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1->params.request.RQContext.PageSize = RQ_PAGE_SIZE_4K;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1->params.request.RQContext.BufferSize = RQB_DATA_SIZE;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1->params.request.RQContext.CQId =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld hba->sli.sli4.rq[num].cqid;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1->params.request.NumPages = 1;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1->params.request.Pages[0].addrLow = PADDR_LO(addr);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1->params.request.Pages[0].addrHigh = PADDR_HI(addr);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld break;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore return;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore} /* emlxs_mb_rq_create() */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore/* SLI4 */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan/*ARGSUSED*/
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amoreextern void
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amoreemlxs_mb_mq_create(emlxs_hba_t *hba, MAILBOXQ *mbq)
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan{
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore MAILBOX4 *mb4 = (MAILBOX4 *)mbq;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore IOCTL_COMMON_MQ_CREATE *qp;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore uint64_t addr;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore bzero((void *) mb4, MAILBOX_CMD_SLI4_BSIZE);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->nonembed = NULL;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore /*
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore * Signifies an embedded command
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.embedded = 1;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxCommand = MBX_SLI_CONFIG;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxOwner = OWN_HOST;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.payload_length =
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore sizeof (IOCTL_COMMON_MQ_CREATE) + IOCTL_HEADER_SZ;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.un_hdr.hdr_req.subsystem =
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore IOCTL_SUBSYSTEM_COMMON;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.un_hdr.hdr_req.opcode = COMMON_OPCODE_MQ_CREATE;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.un_hdr.hdr_req.timeout = 0;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.un_hdr.hdr_req.req_length =
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore sizeof (IOCTL_COMMON_MQ_CREATE);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore addr = hba->sli.sli4.mq.addr.phys;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore qp = (IOCTL_COMMON_MQ_CREATE *)&mb4->un.varSLIConfig.payload;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore qp->params.request.MQContext.Size = MQ_ELEMENT_COUNT_16;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore qp->params.request.MQContext.Valid = 1;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore qp->params.request.MQContext.CQId = hba->sli.sli4.mq.cqid;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore qp->params.request.NumPages = 1;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore qp->params.request.Pages[0].addrLow = PADDR_LO(addr);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore qp->params.request.Pages[0].addrHigh = PADDR_HI(addr);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore return;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore} /* emlxs_mb_mq_create() */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore/* SLI4 */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan/*ARGSUSED*/
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amoreextern void
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeldemlxs_mb_mq_create_ext(emlxs_hba_t *hba, MAILBOXQ *mbq)
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan{
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore MAILBOX4 *mb4 = (MAILBOX4 *)mbq;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld IOCTL_COMMON_MQ_CREATE_EXT *qp;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld IOCTL_COMMON_MQ_CREATE_EXT_V1 *qp1;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore uint64_t addr;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore bzero((void *) mb4, MAILBOX_CMD_SLI4_BSIZE);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->nonembed = NULL;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore /*
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore * Signifies an embedded command
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varSLIConfig.be.embedded = 1;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxCommand = MBX_SLI_CONFIG;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld switch (hba->sli.sli4.param.MQV) {
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld case 0:
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.payload_length =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld sizeof (IOCTL_COMMON_MQ_CREATE_EXT) + IOCTL_HEADER_SZ;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.subsystem =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld IOCTL_SUBSYSTEM_COMMON;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.opcode =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld COMMON_OPCODE_MQ_CREATE_EXT;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.timeout = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.req_length =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld sizeof (IOCTL_COMMON_MQ_CREATE_EXT);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.version = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld addr = hba->sli.sli4.mq.addr.phys;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp = (IOCTL_COMMON_MQ_CREATE_EXT *)
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld &mb4->un.varSLIConfig.payload;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.num_pages = 1;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.async_event_bitmap =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld ASYNC_LINK_EVENT | ASYNC_FCF_EVENT | ASYNC_GROUP5_EVENT;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.context.Size = MQ_ELEMENT_COUNT_16;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.context.Valid = 1;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.context.CQId = hba->sli.sli4.mq.cqid;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.pages[0].addrLow = PADDR_LO(addr);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp->params.request.pages[0].addrHigh = PADDR_HI(addr);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld break;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld case 1:
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld default:
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.payload_length =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld sizeof (IOCTL_COMMON_MQ_CREATE) + IOCTL_HEADER_SZ;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.subsystem =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld IOCTL_SUBSYSTEM_COMMON;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.opcode =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld COMMON_OPCODE_MQ_CREATE_EXT;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.timeout = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.req_length =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld sizeof (IOCTL_COMMON_MQ_CREATE_EXT_V1);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb4->un.varSLIConfig.be.un_hdr.hdr_req.version = 1;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld addr = hba->sli.sli4.mq.addr.phys;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1 = (IOCTL_COMMON_MQ_CREATE_EXT_V1 *)
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld &mb4->un.varSLIConfig.payload;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1->params.request.num_pages = 1;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1->params.request.async_event_bitmap =
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld ASYNC_LINK_EVENT | ASYNC_FCF_EVENT | ASYNC_GROUP5_EVENT |
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld ASYNC_FC_EVENT | ASYNC_PORT_EVENT;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1->params.request.context.Size = MQ_ELEMENT_COUNT_16;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1->params.request.context.Valid = 1;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1->params.request.CQId = hba->sli.sli4.mq.cqid;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1->params.request.pages[0].addrLow = PADDR_LO(addr);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld qp1->params.request.pages[0].addrHigh = PADDR_HI(addr);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld break;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore return;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld} /* emlxs_mb_mq_create_ext() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan/*ARGSUSED*/
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_async_event(emlxs_hba_t *hba, MAILBOXQ *mbq)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte bzero((void *) mb, MAILBOX_CMD_BSIZE);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxCommand = MBX_ASYNC_EVENT;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varWords[0] = hba->channel_els;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} /* emlxs_mb_async_event() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan/*ARGSUSED*/
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_heartbeat(emlxs_hba_t *hba, MAILBOXQ *mbq)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte bzero((void *) mb, MAILBOX_CMD_BSIZE);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxCommand = MBX_HEARTBEAT;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed for hbeat */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} /* emlxs_mb_heartbeat() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#ifdef MSI_SUPPORT
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan/*ARGSUSED*/
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_config_msi(emlxs_hba_t *hba, MAILBOXQ *mbq, uint32_t *intr_map,
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte uint32_t intr_count)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore uint16_t i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte uint32_t mask;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bzero((void *)mb, MAILBOX_CMD_BSIZE);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxCommand = MBX_CONFIG_MSI;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Set the default message id to zero */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSI.defaultPresent = 1;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSI.defaultMessageNumber = 0;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte for (i = 1; i < intr_count; i++) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mask = intr_map[i];
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSI.attConditions |= mask;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#ifdef EMLXS_BIG_ENDIAN
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_R0ATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSI.messageNumberByHA[3] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_R1ATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSI.messageNumberByHA[7] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_R2ATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSI.messageNumberByHA[11] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_R3ATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSI.messageNumberByHA[15] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_LATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSI.messageNumberByHA[29] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_MBATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSI.messageNumberByHA[30] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_ERATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSI.messageNumberByHA[31] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#endif /* EMLXS_BIG_ENDIAN */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#ifdef EMLXS_LITTLE_ENDIAN
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Accounts for half word swap of LE architecture */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_R0ATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSI.messageNumberByHA[2] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_R1ATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSI.messageNumberByHA[6] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_R2ATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSI.messageNumberByHA[10] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_R3ATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSI.messageNumberByHA[14] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_LATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSI.messageNumberByHA[28] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_MBATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSI.messageNumberByHA[31] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_ERATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSI.messageNumberByHA[30] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#endif /* EMLXS_LITTLE_ENDIAN */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} /* emlxs_mb_config_msi() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan/*ARGSUSED*/
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_config_msix(emlxs_hba_t *hba, MAILBOXQ *mbq, uint32_t *intr_map,
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte uint32_t intr_count)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore uint8_t i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte uint32_t mask;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bzero((void *)mb, MAILBOX_CMD_BSIZE);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxCommand = MBX_CONFIG_MSIX;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Set the default message id to zero */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSIX.defaultPresent = 1;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSIX.defaultMessageNumber = 0;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte for (i = 1; i < intr_count; i++) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mask = intr_map[i];
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSIX.attConditions1 |= mask;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#ifdef EMLXS_BIG_ENDIAN
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_R0ATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSIX.messageNumberByHA[3] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_R1ATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSIX.messageNumberByHA[7] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_R2ATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSIX.messageNumberByHA[11] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_R3ATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSIX.messageNumberByHA[15] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_LATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSIX.messageNumberByHA[29] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_MBATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSIX.messageNumberByHA[30] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_ERATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSIX.messageNumberByHA[31] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#endif /* EMLXS_BIG_ENDIAN */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#ifdef EMLXS_LITTLE_ENDIAN
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Accounts for word swap of LE architecture */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_R0ATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSIX.messageNumberByHA[0] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_R1ATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSIX.messageNumberByHA[4] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_R2ATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSIX.messageNumberByHA[8] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_R3ATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSIX.messageNumberByHA[12] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_LATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSIX.messageNumberByHA[30] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_MBATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSIX.messageNumberByHA[29] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mask & HA_ERATT) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgMSIX.messageNumberByHA[28] = i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#endif /* EMLXS_LITTLE_ENDIAN */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} /* emlxs_mb_config_msix() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#endif /* MSI_SUPPORT */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan/*ARGSUSED*/
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_reset_ring(emlxs_hba_t *hba, MAILBOXQ *mbq, uint32_t ringno)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bzero((void *)mb, MAILBOX_CMD_BSIZE);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxCommand = MBX_RESET_RING;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varRstRing.ring_no = ringno;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} /* emlxs_mb_reset_ring() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan/*ARGSUSED*/
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_dump_vpd(emlxs_hba_t *hba, MAILBOXQ *mbq, uint32_t offset)
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (hba->sli_mode == EMLXS_HBA_SLI4_MODE) {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore MAILBOX4 *mb4 = (MAILBOX4 *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Clear the local dump_region */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bzero(hba->sli.sli4.dump_region.virt,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->sli.sli4.dump_region.size);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore bzero((void *) mb4, MAILBOX_CMD_SLI4_BSIZE);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxCommand = MBX_DUMP_MEMORY;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varDmp4.type = DMP_NV_PARAMS;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varDmp4.entry_index = offset;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varDmp4.region_id = DMP_VPD_REGION;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varDmp4.available_cnt = hba->sli.sli4.dump_region.size;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varDmp4.addrHigh =
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan PADDR_HI(hba->sli.sli4.dump_region.phys);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varDmp4.addrLow =
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan PADDR_LO(hba->sli.sli4.dump_region.phys);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varDmp4.rsp_cnt = 0;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan } else {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bzero((void *)mb, MAILBOX_CMD_BSIZE);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->mbxCommand = MBX_DUMP_MEMORY;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varDmp.cv = 1;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varDmp.type = DMP_NV_PARAMS;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varDmp.entry_index = offset;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varDmp.region_id = DMP_VPD_REGION;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* limited by mailbox size */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varDmp.word_cnt = DMP_VPD_DUMP_WCOUNT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varDmp.co = 0;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varDmp.resp_offset = 0;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan} /* emlxs_mb_dump_vpd() */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore/* SLI4 */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan/*ARGSUSED*/
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_dump_fcoe(emlxs_hba_t *hba, MAILBOXQ *mbq, uint32_t offset)
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan{
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore MAILBOX4 *mb4 = (MAILBOX4 *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore if (hba->sli_mode < EMLXS_HBA_SLI4_MODE) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Clear the local dump_region */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bzero(hba->sli.sli4.dump_region.virt,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->sli.sli4.dump_region.size);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore bzero((void *) mb4, MAILBOX_CMD_SLI4_BSIZE);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxCommand = MBX_DUMP_MEMORY;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varDmp4.type = DMP_NV_PARAMS;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varDmp4.entry_index = offset;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varDmp4.region_id = DMP_FCOE_REGION;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varDmp4.available_cnt = hba->sli.sli4.dump_region.size;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varDmp4.addrHigh =
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan PADDR_HI(hba->sli.sli4.dump_region.phys);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varDmp4.addrLow =
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan PADDR_LO(hba->sli.sli4.dump_region.phys);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varDmp4.rsp_cnt = 0;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan} /* emlxs_mb_dump_fcoe() */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan/*ARGSUSED*/
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_dump(emlxs_hba_t *hba, MAILBOXQ *mbq, uint32_t offset, uint32_t words)
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (hba->sli_mode == EMLXS_HBA_SLI4_MODE) {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore MAILBOX4 *mb4 = (MAILBOX4 *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Clear the local dump_region */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bzero(hba->sli.sli4.dump_region.virt,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->sli.sli4.dump_region.size);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore bzero((void *) mb4, MAILBOX_CMD_SLI4_BSIZE);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxCommand = MBX_DUMP_MEMORY;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varDmp4.type = DMP_MEM_REG;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varDmp4.entry_index = offset;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varDmp4.region_id = 0;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varDmp4.available_cnt = min((words*4),
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->sli.sli4.dump_region.size);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varDmp4.addrHigh =
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan PADDR_HI(hba->sli.sli4.dump_region.phys);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varDmp4.addrLow =
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan PADDR_LO(hba->sli.sli4.dump_region.phys);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->un.varDmp4.rsp_cnt = 0;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb4->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan } else {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bzero((void *)mb, MAILBOX_CMD_BSIZE);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->mbxCommand = MBX_DUMP_MEMORY;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varDmp.type = DMP_MEM_REG;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varDmp.word_cnt = words;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varDmp.base_adr = offset;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varDmp.co = 0;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varDmp.resp_offset = 0;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan} /* emlxs_mb_dump() */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan/*
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan * emlxs_mb_read_nv Issue a READ NVPARAM mailbox command
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan/*ARGSUSED*/
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_read_nv(emlxs_hba_t *hba, MAILBOXQ *mbq)
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bzero((void *)mb, MAILBOX_CMD_BSIZE);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->mbxCommand = MBX_READ_NV;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan} /* emlxs_mb_read_nv() */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan * emlxs_mb_read_rev Issue a READ REV mailbox command
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan/*ARGSUSED*/
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_read_rev(emlxs_hba_t *hba, MAILBOXQ *mbq, uint32_t v3)
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (hba->sli_mode == EMLXS_HBA_SLI4_MODE) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bzero((void *) mb, MAILBOX_CMD_SLI4_BSIZE);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->nonembed = NULL;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan } else {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bzero((void *)mb, MAILBOX_CMD_BSIZE);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varRdRev.cv = 1;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (v3) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varRdRev.cv3 = 1;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->mbxCommand = MBX_READ_REV;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan} /* emlxs_mb_read_rev() */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan/*
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan * emlxs_mb_run_biu_diag Issue a RUN_BIU_DIAG mailbox command
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan/*ARGSUSED*/
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanextern uint32_t
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_run_biu_diag(emlxs_hba_t *hba, MAILBOXQ *mbq, uint64_t out,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan uint64_t in)
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bzero((void *)mb, MAILBOX_CMD_BSIZE);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->mbxCommand = MBX_RUN_BIU_DIAG64;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varBIUdiag.un.s2.xmit_bde64.tus.f.bdeSize = MEM_ELSBUF_SIZE;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varBIUdiag.un.s2.xmit_bde64.addrHigh = PADDR_HI(out);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varBIUdiag.un.s2.xmit_bde64.addrLow = PADDR_LO(out);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varBIUdiag.un.s2.rcv_bde64.tus.f.bdeSize = MEM_ELSBUF_SIZE;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varBIUdiag.un.s2.rcv_bde64.addrHigh = PADDR_HI(in);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varBIUdiag.un.s2.rcv_bde64.addrLow = PADDR_LO(in);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return (0);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan} /* emlxs_mb_run_biu_diag() */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan/* This should only be called with active MBX_NOWAIT mailboxes */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanvoid
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_retry(emlxs_hba_t *hba, MAILBOXQ *mbq)
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mbox;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan int rc;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mbox = (MAILBOX *)emlxs_mem_get(hba, MEM_MBOX);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (!mbox) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb = (MAILBOX *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bcopy((uint8_t *)mb, (uint8_t *)mbox, MAILBOX_CMD_BSIZE);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbox->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbox->mbxStatus = 0;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mutex_enter(&EMLXS_PORT_LOCK);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan HBASTATS.MboxCompleted++;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (mb->mbxStatus != 0) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan HBASTATS.MboxError++;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan } else {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan HBASTATS.MboxGood++;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore hba->mbox_mbq = NULL;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->mbox_queue_flag = 0;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mutex_exit(&EMLXS_PORT_LOCK);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan rc = EMLXS_SLI_ISSUE_MBOX_CMD(hba, mbox, MBX_NOWAIT, 0);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if ((rc != MBX_BUSY) && (rc != MBX_SUCCESS)) {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore emlxs_mem_put(hba, MEM_MBOX, (void *)mbox);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan} /* emlxs_mb_retry() */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore/* SLI3 */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amorestatic uint32_t
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amoreemlxs_read_la_mbcmpl(emlxs_hba_t *hba, MAILBOXQ *mbq)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore emlxs_port_t *port = (emlxs_port_t *)mbq->port;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOXQ *mbox;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MATCHMAP *mp;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan READ_LA_VAR la;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan int i;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan uint32_t control;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb = (MAILBOX *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (mb->mbxStatus) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (mb->mbxStatus == MBXERR_NO_RESOURCES) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan control = mb->un.varReadLA.un.lilpBde64.tus.f.bdeSize;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (control == 0) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (void) emlxs_mb_read_la(hba, mbq);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan emlxs_mb_retry(hba, mbq);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return (1);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Enable Link Attention interrupts */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mutex_enter(&EMLXS_PORT_LOCK);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (!(hba->sli.sli3.hc_copy & HC_LAINT_ENA)) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->sli.sli3.hc_copy |= HC_LAINT_ENA;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan WRITE_CSR_REG(hba, FC_HC_REG(hba),
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->sli.sli3.hc_copy);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan#ifdef FMA_SUPPORT
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Access handle validation */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan EMLXS_CHK_ACC_HANDLE(hba,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->sli.sli3.csr_acc_handle);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan#endif /* FMA_SUPPORT */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mutex_exit(&EMLXS_PORT_LOCK);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return (0);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore bcopy((void *)&mb->un.varReadLA, (void *)&la, sizeof (READ_LA_VAR));
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mp = (MATCHMAP *)mbq->bp;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (mp) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bcopy((caddr_t)mp->virt, (caddr_t)port->alpa_map, 128);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan } else {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bzero((caddr_t)port->alpa_map, 128);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (la.attType == AT_LINK_UP) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_linkup_atten_msg,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan "tag=%d -> %d ALPA=%x",
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (uint32_t)hba->link_event_tag,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (uint32_t)la.eventTag,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (uint32_t)la.granted_AL_PA);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan } else {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_linkdown_atten_msg,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan "tag=%d -> %d ALPA=%x",
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (uint32_t)hba->link_event_tag,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (uint32_t)la.eventTag,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (uint32_t)la.granted_AL_PA);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (la.pb) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->flag |= FC_BYPASSED_MODE;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan } else {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->flag &= ~FC_BYPASSED_MODE;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (hba->link_event_tag == la.eventTag) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan HBASTATS.LinkMultiEvent++;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan } else if (hba->link_event_tag + 1 < la.eventTag) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan HBASTATS.LinkMultiEvent++;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Make sure link is declared down */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan emlxs_linkdown(hba);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->link_event_tag = la.eventTag;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan port->lip_type = 0;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* If link not already up then declare it up now */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if ((la.attType == AT_LINK_UP) && (hba->state < FC_LINK_UP)) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan#ifdef MENLO_SUPPORT
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld if ((hba->model_info.device_id == PCI_DEVICE_ID_HORNET) &&
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (hba->flag & (FC_ILB_MODE | FC_ELB_MODE))) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan la.topology = TOPOLOGY_LOOP;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan la.granted_AL_PA = 0;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan port->alpa_map[0] = 1;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan port->alpa_map[1] = 0;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan la.lipType = LT_PORT_INIT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan#endif /* MENLO_SUPPORT */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Save the linkspeed */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->linkspeed = la.UlnkSpeed;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Check for old model adapters that only */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* supported 1Gb */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if ((hba->linkspeed == 0) &&
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (hba->model_info.chip & EMLXS_DRAGONFLY_CHIP)) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->linkspeed = LA_1GHZ_LINK;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if ((hba->topology = la.topology) == TOPOLOGY_LOOP) {
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld port->granted_alpa = la.granted_AL_PA;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld port->did = port->granted_alpa;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan port->lip_type = la.lipType;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (hba->flag & FC_SLIM2_MODE) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan i = la.un.lilpBde64.tus.f.bdeSize;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan } else {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan i = la.un.lilpBde.bdeSize;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (i == 0) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan port->alpa_map[0] = 0;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan } else {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan uint8_t *alpa_map;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan uint32_t j;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Check number of devices in map */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (port->alpa_map[0] > 127) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan port->alpa_map[0] = 127;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan alpa_map = (uint8_t *)port->alpa_map;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan EMLXS_MSGF(EMLXS_CONTEXT,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan &emlxs_link_atten_msg,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan "alpa_map: %d device(s): "
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan "%02x %02x %02x %02x %02x %02x "
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan "%02x", alpa_map[0], alpa_map[1],
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan alpa_map[2], alpa_map[3],
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan alpa_map[4], alpa_map[5],
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan alpa_map[6], alpa_map[7]);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan for (j = 8; j <= alpa_map[0]; j += 8) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan EMLXS_MSGF(EMLXS_CONTEXT,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan &emlxs_link_atten_msg,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan "alpa_map: "
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan "%02x %02x %02x %02x %02x "
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan "%02x %02x %02x",
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan alpa_map[j],
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan alpa_map[j + 1],
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan alpa_map[j + 2],
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan alpa_map[j + 3],
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan alpa_map[j + 4],
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan alpa_map[j + 5],
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan alpa_map[j + 6],
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan alpa_map[j + 7]);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan#ifdef MENLO_SUPPORT
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Check if Menlo maintenance mode is enabled */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (hba->model_info.device_id ==
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld PCI_DEVICE_ID_HORNET) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (la.mm == 1) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan EMLXS_MSGF(EMLXS_CONTEXT,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan &emlxs_link_atten_msg,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan "Maintenance Mode enabled.");
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mutex_enter(&EMLXS_PORT_LOCK);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->flag |= FC_MENLO_MODE;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mutex_exit(&EMLXS_PORT_LOCK);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mutex_enter(&EMLXS_LINKUP_LOCK);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan cv_broadcast(&EMLXS_LINKUP_CV);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mutex_exit(&EMLXS_LINKUP_LOCK);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan } else {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan EMLXS_MSGF(EMLXS_CONTEXT,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan &emlxs_link_atten_msg,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan "Maintenance Mode disabled.");
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Check FCoE attention bit */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (la.fa == 1) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan emlxs_thread_spawn(hba,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan emlxs_fcoe_attention_thread,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore 0, 0);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan#endif /* MENLO_SUPPORT */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if ((mbox = (MAILBOXQ *)emlxs_mem_get(hba,
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld MEM_MBOX))) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* This should turn on DELAYED ABTS for */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* ELS timeouts */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan emlxs_mb_set_var(hba, mbox, 0x00052198, 0x1);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan emlxs_mb_put(hba, mbox);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if ((mbox = (MAILBOXQ *)emlxs_mem_get(hba,
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld MEM_MBOX))) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* If link not already down then */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* declare it down now */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (emlxs_mb_read_sparam(hba, mbox) == 0) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan emlxs_mb_put(hba, mbox);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan } else {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore emlxs_mem_put(hba, MEM_MBOX,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore (void *)mbox);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if ((mbox = (MAILBOXQ *)emlxs_mem_get(hba,
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld MEM_MBOX))) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan emlxs_mb_config_link(hba, mbox);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan emlxs_mb_put(hba, mbox);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Declare the linkup here */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan emlxs_linkup(hba);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* If link not already down then declare it down now */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan else if (la.attType == AT_LINK_DOWN) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Make sure link is declared down */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan emlxs_linkdown(hba);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Enable Link attention interrupt */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mutex_enter(&EMLXS_PORT_LOCK);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (!(hba->sli.sli3.hc_copy & HC_LAINT_ENA)) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->sli.sli3.hc_copy |= HC_LAINT_ENA;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan WRITE_CSR_REG(hba, FC_HC_REG(hba), hba->sli.sli3.hc_copy);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan#ifdef FMA_SUPPORT
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Access handle validation */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli3.csr_acc_handle);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan#endif /* FMA_SUPPORT */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mutex_exit(&EMLXS_PORT_LOCK);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (0);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore} /* emlxs_read_la_mbcmpl() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern uint32_t
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_read_la(emlxs_hba_t *hba, MAILBOXQ *mbq)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte MATCHMAP *mp;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bzero((void *)mb, MAILBOX_CMD_BSIZE);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld if ((mp = (MATCHMAP *)emlxs_mem_get(hba, MEM_BUF)) == 0) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxCommand = MBX_READ_LA64;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (1);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxCommand = MBX_READ_LA64;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varReadLA.un.lilpBde64.tus.f.bdeSize = 128;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varReadLA.un.lilpBde64.addrHigh = PADDR_HI(mp->phys);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varReadLA.un.lilpBde64.addrLow = PADDR_LO(mp->phys);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxOwner = OWN_HOST;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->mbox_cmpl = emlxs_read_la_mbcmpl;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /*
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * save address for completion
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->bp = (void *)mp;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (0);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} /* emlxs_mb_read_la() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore/* SLI3 */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amorestatic uint32_t
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amoreemlxs_clear_la_mbcmpl(emlxs_hba_t *hba, MAILBOXQ *mbq)
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan{
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore emlxs_port_t *port = (emlxs_port_t *)mbq->port;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOXQ *mbox;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan emlxs_port_t *vport;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan uint32_t la_enable;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan int i, rc;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb = (MAILBOX *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (mb->mbxStatus) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan la_enable = 1;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (mb->mbxStatus == 0x1601) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Get a buffer which will be used for */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* mailbox commands */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if ((mbox = (MAILBOXQ *)emlxs_mem_get(hba,
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld MEM_MBOX))) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Get link attention message */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (emlxs_mb_read_la(hba, mbox) == 0) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan rc = EMLXS_SLI_ISSUE_MBOX_CMD(hba,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (MAILBOX *)mbox, MBX_NOWAIT, 0);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if ((rc != MBX_BUSY) &&
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (rc != MBX_SUCCESS)) {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore emlxs_mem_put(hba,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore MEM_MBOX, (void *)mbox);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan la_enable = 0;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan } else {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore emlxs_mem_put(hba, MEM_MBOX,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore (void *)mbox);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mutex_enter(&EMLXS_PORT_LOCK);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (la_enable) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (!(hba->sli.sli3.hc_copy & HC_LAINT_ENA)) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Enable Link Attention interrupts */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->sli.sli3.hc_copy |= HC_LAINT_ENA;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan WRITE_CSR_REG(hba, FC_HC_REG(hba),
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->sli.sli3.hc_copy);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan#ifdef FMA_SUPPORT
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Access handle validation */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan EMLXS_CHK_ACC_HANDLE(hba,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->sli.sli3.csr_acc_handle);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan#endif /* FMA_SUPPORT */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan } else {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (hba->sli.sli3.hc_copy & HC_LAINT_ENA) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Disable Link Attention interrupts */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->sli.sli3.hc_copy &= ~HC_LAINT_ENA;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan WRITE_CSR_REG(hba, FC_HC_REG(hba),
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->sli.sli3.hc_copy);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan#ifdef FMA_SUPPORT
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Access handle validation */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan EMLXS_CHK_ACC_HANDLE(hba,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->sli.sli3.csr_acc_handle);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan#endif /* FMA_SUPPORT */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mutex_exit(&EMLXS_PORT_LOCK);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return (0);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Enable on Link Attention interrupts */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mutex_enter(&EMLXS_PORT_LOCK);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (!(hba->sli.sli3.hc_copy & HC_LAINT_ENA)) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->sli.sli3.hc_copy |= HC_LAINT_ENA;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan WRITE_CSR_REG(hba, FC_HC_REG(hba), hba->sli.sli3.hc_copy);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan#ifdef FMA_SUPPORT
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Access handle validation */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan EMLXS_CHK_ACC_HANDLE(hba, hba->sli.sli3.csr_acc_handle);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan#endif /* FMA_SUPPORT */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (hba->state >= FC_LINK_UP) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan EMLXS_STATE_CHANGE_LOCKED(hba, FC_READY);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mutex_exit(&EMLXS_PORT_LOCK);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Adapter is now ready for FCP traffic */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (hba->state == FC_READY) {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Register vpi's for all ports that have did's */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan for (i = 0; i < MAX_VPORTS; i++) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan vport = &VPORT(i);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (!(vport->flag & EMLXS_PORT_BOUND) ||
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan !(vport->did)) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan continue;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (void) emlxs_mb_reg_vpi(vport, NULL);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Attempt to send any pending IO */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan EMLXS_SLI_ISSUE_IOCB_CMD(hba, &hba->chan[hba->channel_fcp], 0);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return (0);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore} /* emlxs_clear_la_mbcmpl() */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore/* SLI3 */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_clear_la(emlxs_hba_t *hba, MAILBOXQ *mbq)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#ifdef FC_RPI_CHECK
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte emlxs_rpi_check(hba);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte#endif /* FC_RPI_CHECK */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bzero((void *)mb, MAILBOX_CMD_BSIZE);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varClearLA.eventTag = hba->link_event_tag;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxCommand = MBX_CLEAR_LA;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxOwner = OWN_HOST;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->mbox_cmpl = emlxs_clear_la_mbcmpl;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan} /* emlxs_mb_clear_la() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan * emlxs_mb_read_status Issue a READ STATUS mailbox command
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan/*ARGSUSED*/
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_read_status(emlxs_hba_t *hba, MAILBOXQ *mbq)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bzero((void *)mb, MAILBOX_CMD_BSIZE);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxCommand = MBX_READ_STATUS;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan} /* fc_read_status() */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan * emlxs_mb_read_lnk_stat Issue a LINK STATUS mailbox command
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan/*ARGSUSED*/
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_read_lnk_stat(emlxs_hba_t *hba, MAILBOXQ *mbq)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bzero((void *)mb, MAILBOX_CMD_BSIZE);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxCommand = MBX_READ_LNK_STAT;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan} /* emlxs_mb_read_lnk_stat() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan * emlxs_mb_config_ring Issue a CONFIG RING mailbox command
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_config_ring(emlxs_hba_t *hba, int32_t ring, MAILBOXQ *mbq)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte int32_t i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte int32_t j;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bzero((void *)mb, MAILBOX_CMD_BSIZE);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte j = 0;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte for (i = 0; i < ring; i++) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan j += hba->sli.sli3.ring_masks[i];
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan for (i = 0; i < hba->sli.sli3.ring_masks[ring]; i++) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if ((j + i) >= 6) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte break;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varCfgRing.rrRegs[i].rval =
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->sli.sli3.ring_rval[j + i];
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varCfgRing.rrRegs[i].rmask =
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->sli.sli3.ring_rmask[j + i];
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varCfgRing.rrRegs[i].tval =
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->sli.sli3.ring_tval[j + i];
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varCfgRing.rrRegs[i].tmask =
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->sli.sli3.ring_tmask[j + i];
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgRing.ring = ring;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgRing.profile = 0;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgRing.maxOrigXchg = 0;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgRing.maxRespXchg = 0;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgRing.recvNotify = 1;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varCfgRing.numMask = hba->sli.sli3.ring_masks[ring];
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxCommand = MBX_CONFIG_RING;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan} /* emlxs_mb_config_ring() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan * emlxs_mb_config_link Issue a CONFIG LINK mailbox command
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_config_link(emlxs_hba_t *hba, MAILBOXQ *mbq)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan emlxs_port_t *port = &PPORT;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte emlxs_config_t *cfg = &CFG;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bzero((void *)mb, MAILBOX_CMD_BSIZE);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /*
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * NEW_FEATURE SLI-2, Coalescing Response Feature.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (cfg[CFG_CR_DELAY].current) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgLnk.cr = 1;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgLnk.ci = 1;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgLnk.cr_delay = cfg[CFG_CR_DELAY].current;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgLnk.cr_count = cfg[CFG_CR_COUNT].current;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld if (cfg[CFG_ACK0].current) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgLnk.ack0_enable = 1;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgLnk.myId = port->did;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgLnk.edtov = hba->fc_edtov;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgLnk.arbtov = hba->fc_arbtov;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgLnk.ratov = hba->fc_ratov;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgLnk.rttov = hba->fc_rttov;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgLnk.altov = hba->fc_altov;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgLnk.crtov = hba->fc_crtov;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgLnk.citov = hba->fc_citov;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxCommand = MBX_CONFIG_LINK;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)port;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} /* emlxs_mb_config_link() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amorestatic uint32_t
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amoreemlxs_init_link_mbcmpl(emlxs_hba_t *hba, MAILBOXQ *mbq)
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan{
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore emlxs_port_t *port = (emlxs_port_t *)mbq->port;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan emlxs_config_t *cfg = &CFG;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb = (MAILBOX *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (mb->mbxStatus) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if ((hba->flag & FC_SLIM2_MODE) &&
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (hba->mbox_queue_flag == MBX_NOWAIT)) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Retry only MBX_NOWAIT requests */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if ((cfg[CFG_LINK_SPEED].current > 0) &&
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan ((mb->mbxStatus == 0x0011) ||
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (mb->mbxStatus == 0x0500))) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan EMLXS_MSGF(EMLXS_CONTEXT,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan &emlxs_mbox_event_msg,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan "Retrying. %s: status=%x. Auto-speed set.",
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan emlxs_mb_cmd_xlate(mb->mbxCommand),
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (uint32_t)mb->mbxStatus);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varInitLnk.link_flags &=
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan ~FLAGS_LINK_SPEED;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varInitLnk.link_speed = 0;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan emlxs_mb_retry(hba, mbq);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return (1);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return (0);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore} /* emlxs_init_link_mbcmpl() */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan * emlxs_mb_init_link Issue an INIT LINK mailbox command
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_init_link(emlxs_hba_t *hba, MAILBOXQ *mbq, uint32_t topology,
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte uint32_t linkspeed)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan emlxs_vpd_t *vpd = &VPD;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan emlxs_config_t *cfg = &CFG;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld if ((hba->sli_mode == EMLXS_HBA_SLI4_MODE) &&
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld (SLI4_FCOE_MODE)) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bzero((void *) mb, MAILBOX_CMD_SLI4_BSIZE);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->nonembed = NULL;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->mbxCommand = (volatile uint8_t) MBX_INIT_LINK;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bzero((void *)mb, MAILBOX_CMD_BSIZE);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte switch (topology) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte case FLAGS_LOCAL_LB:
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varInitLnk.link_flags = FLAGS_TOPOLOGY_MODE_LOOP;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varInitLnk.link_flags |= FLAGS_LOCAL_LB;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte break;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte case FLAGS_TOPOLOGY_MODE_LOOP_PT:
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varInitLnk.link_flags = FLAGS_TOPOLOGY_MODE_LOOP;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varInitLnk.link_flags |= FLAGS_TOPOLOGY_FAILOVER;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte break;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte case FLAGS_TOPOLOGY_MODE_PT_PT:
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varInitLnk.link_flags = FLAGS_TOPOLOGY_MODE_PT_PT;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte break;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte case FLAGS_TOPOLOGY_MODE_LOOP:
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varInitLnk.link_flags = FLAGS_TOPOLOGY_MODE_LOOP;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte break;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte case FLAGS_TOPOLOGY_MODE_PT_LOOP:
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varInitLnk.link_flags = FLAGS_TOPOLOGY_MODE_PT_PT;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varInitLnk.link_flags |= FLAGS_TOPOLOGY_FAILOVER;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte break;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (cfg[CFG_LILP_ENABLE].current == 0) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Disable LIRP/LILP support */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varInitLnk.link_flags |= FLAGS_LIRP_LILP;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /*
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * Setting up the link speed
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte switch (linkspeed) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte case 0:
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte break;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte case 1:
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (!(vpd->link_speed & LMT_1GB_CAPABLE)) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte linkspeed = 0;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte break;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte case 2:
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (!(vpd->link_speed & LMT_2GB_CAPABLE)) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte linkspeed = 0;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte break;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte case 4:
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (!(vpd->link_speed & LMT_4GB_CAPABLE)) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte linkspeed = 0;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte break;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte case 8:
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (!(vpd->link_speed & LMT_8GB_CAPABLE)) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte linkspeed = 0;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte break;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte case 10:
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (!(vpd->link_speed & LMT_10GB_CAPABLE)) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte linkspeed = 0;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte break;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld case 16:
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld if (!(vpd->link_speed & LMT_16GB_CAPABLE)) {
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld linkspeed = 0;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld }
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld break;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte default:
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte linkspeed = 0;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte break;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if ((linkspeed > 0) && (vpd->feaLevelHigh >= 0x02)) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varInitLnk.link_flags |= FLAGS_LINK_SPEED;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varInitLnk.link_speed = linkspeed;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varInitLnk.link_flags |= FLAGS_PREABORT_RETURN;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mb->un.varInitLnk.fabric_AL_PA =
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan (uint8_t)cfg[CFG_ASSIGN_ALPA].current;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxCommand = (volatile uint8_t) MBX_INIT_LINK;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxOwner = OWN_HOST;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->mbox_cmpl = emlxs_init_link_mbcmpl;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} /* emlxs_mb_init_link() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan * emlxs_mb_down_link Issue a DOWN LINK mailbox command
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan/*ARGSUSED*/
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_down_link(emlxs_hba_t *hba, MAILBOXQ *mbq)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bzero((void *)mb, MAILBOX_CMD_BSIZE);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxCommand = MBX_DOWN_LINK;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} /* emlxs_mb_down_link() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amorestatic uint32_t
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amoreemlxs_read_sparam_mbcmpl(emlxs_hba_t *hba, MAILBOXQ *mbq)
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan{
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld emlxs_port_t *port = &PPORT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MATCHMAP *mp;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan emlxs_port_t *vport;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan int32_t i;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan uint32_t control;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan uint8_t null_wwn[8];
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb = (MAILBOX *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (mb->mbxStatus) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (mb->mbxStatus == MBXERR_NO_RESOURCES) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan control = mb->un.varRdSparm.un.sp64.tus.f.bdeSize;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (control == 0) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (void) emlxs_mb_read_sparam(hba, mbq);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan emlxs_mb_retry(hba, mbq);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return (1);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return (0);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mp = (MATCHMAP *)mbq->bp;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (!mp) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return (0);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bcopy((caddr_t)mp->virt, (caddr_t)&hba->sparam, sizeof (SERV_PARM));
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Initialize the node name and port name only once */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bzero(null_wwn, 8);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if ((bcmp((caddr_t)&hba->wwnn, (caddr_t)null_wwn, 8) == 0) &&
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (bcmp((caddr_t)&hba->wwpn, (caddr_t)null_wwn, 8) == 0)) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bcopy((caddr_t)&hba->sparam.nodeName,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (caddr_t)&hba->wwnn, sizeof (NAME_TYPE));
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bcopy((caddr_t)&hba->sparam.portName,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (caddr_t)&hba->wwpn, sizeof (NAME_TYPE));
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan } else {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bcopy((caddr_t)&hba->wwnn,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (caddr_t)&hba->sparam.nodeName, sizeof (NAME_TYPE));
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bcopy((caddr_t)&hba->wwpn,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (caddr_t)&hba->sparam.portName, sizeof (NAME_TYPE));
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_sli_detail_msg,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore "SPARAM: EDTOV hba=%x mbox_csp=%x BBC=%x",
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->fc_edtov, hba->sparam.cmn.e_d_tov,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->sparam.cmn.bbCreditlsb);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Initialize the physical port */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld bcopy((caddr_t)&hba->sparam, (caddr_t)&port->sparam,
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld sizeof (SERV_PARM));
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bcopy((caddr_t)&hba->wwpn, (caddr_t)&port->wwpn,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan sizeof (NAME_TYPE));
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bcopy((caddr_t)&hba->wwnn, (caddr_t)&port->wwnn,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan sizeof (NAME_TYPE));
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Initialize the virtual ports */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan for (i = 1; i < MAX_VPORTS; i++) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan vport = &VPORT(i);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld if (! (vport->flag & EMLXS_PORT_BOUND)) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan continue;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bcopy((caddr_t)&hba->sparam,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (caddr_t)&vport->sparam,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan sizeof (SERV_PARM));
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bcopy((caddr_t)&vport->wwnn,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (caddr_t)&vport->sparam.nodeName,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan sizeof (NAME_TYPE));
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bcopy((caddr_t)&vport->wwpn,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (caddr_t)&vport->sparam.portName,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan sizeof (NAME_TYPE));
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return (0);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore} /* emlxs_read_sparam_mbcmpl() */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan * emlxs_mb_read_sparam Issue a READ SPARAM mailbox command
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern uint32_t
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_read_sparam(emlxs_hba_t *hba, MAILBOXQ *mbq)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte MATCHMAP *mp;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bzero((void *)mb, MAILBOX_CMD_BSIZE);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld if ((mp = (MATCHMAP *)emlxs_mem_get(hba, MEM_BUF)) == 0) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxCommand = MBX_READ_SPARM64;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (1);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varRdSparm.un.sp64.tus.f.bdeSize = sizeof (SERV_PARM);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varRdSparm.un.sp64.addrHigh = PADDR_HI(mp->phys);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varRdSparm.un.sp64.addrLow = PADDR_LO(mp->phys);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxCommand = MBX_READ_SPARM64;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxOwner = OWN_HOST;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->mbox_cmpl = emlxs_read_sparam_mbcmpl;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /*
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * save address for completion
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->bp = (void *)mp;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (0);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} /* emlxs_mb_read_sparam() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan * emlxs_mb_read_rpi Issue a READ RPI mailbox command
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan/*ARGSUSED*/
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern uint32_t
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_read_rpi(emlxs_hba_t *hba, uint32_t rpi, MAILBOXQ *mbq,
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan uint32_t flag)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bzero((void *)mb, MAILBOX_CMD_BSIZE);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /*
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * Set flag to issue action on cmpl
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varWords[30] = flag;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varRdRPI.reqRpi = (volatile uint16_t) rpi;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxCommand = MBX_READ_RPI64;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (0);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan} /* emlxs_mb_read_rpi() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan * emlxs_mb_read_xri Issue a READ XRI mailbox command
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan/*ARGSUSED*/
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern uint32_t
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_read_xri(emlxs_hba_t *hba, uint32_t xri, MAILBOXQ *mbq,
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan uint32_t flag)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bzero((void *)mb, MAILBOX_CMD_BSIZE);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /*
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * Set flag to issue action on cmpl
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varWords[30] = flag;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mb->un.varRdXRI.reqXri = (volatile uint16_t)xri;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxCommand = MBX_READ_XRI;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return (0);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan} /* emlxs_mb_read_xri() */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan/*ARGSUSED*/
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanextern int32_t
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_check_sparm(emlxs_hba_t *hba, SERV_PARM *nsp)
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan uint32_t nsp_value;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan uint32_t *iptr;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (nsp->cmn.fPort) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return (0);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Validate the service parameters */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan iptr = (uint32_t *)&nsp->portName;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (iptr[0] == 0 && iptr[1] == 0) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return (1);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan iptr = (uint32_t *)&nsp->nodeName;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (iptr[0] == 0 && iptr[1] == 0) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return (2);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (nsp->cls2.classValid) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan nsp_value =
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan ((nsp->cls2.rcvDataSizeMsb & 0x0f) << 8) | nsp->cls2.
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan rcvDataSizeLsb;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* If the receive data length is zero then set it to */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* the CSP value */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (!nsp_value) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan nsp->cls2.rcvDataSizeMsb = nsp->cmn.bbRcvSizeMsb;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan nsp->cls2.rcvDataSizeLsb = nsp->cmn.bbRcvSizeLsb;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return (0);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (nsp->cls3.classValid) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan nsp_value =
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan ((nsp->cls3.rcvDataSizeMsb & 0x0f) << 8) | nsp->cls3.
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan rcvDataSizeLsb;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* If the receive data length is zero then set it to */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* the CSP value */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (!nsp_value) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan nsp->cls3.rcvDataSizeMsb = nsp->cmn.bbRcvSizeMsb;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan nsp->cls3.rcvDataSizeLsb = nsp->cmn.bbRcvSizeLsb;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return (0);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return (0);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan} /* emlxs_mb_check_sparm() */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan * emlxs_mb_set_var Issue a special debug mbox command to write slim
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan/*ARGSUSED*/
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_set_var(emlxs_hba_t *hba, MAILBOXQ *mbq, uint32_t addr,
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan uint32_t value)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bzero((void *)mb, MAILBOX_CMD_BSIZE);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* addr = 0x090597 is AUTO ABTS disable for ELS commands */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* addr = 0x052198 is DELAYED ABTS enable for ELS commands */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* addr = 0x100506 is for setting PCI MAX READ value */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /*
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * Always turn on DELAYED ABTS for ELS timeouts
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if ((addr == 0x052198) && (value == 0)) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte value = 1;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varWords[0] = addr;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varWords[1] = value;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxCommand = MBX_SET_VARIABLE;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan} /* emlxs_mb_set_var() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * Disable Traffic Cop
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan/*ARGSUSED*/
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_disable_tc(emlxs_hba_t *hba, MAILBOXQ *mbq)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bzero((void *)mb, MAILBOX_CMD_BSIZE);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varWords[0] = 0x50797;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varWords[1] = 0;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varWords[2] = 0xfffffffe;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxCommand = MBX_SET_VARIABLE;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan} /* emlxs_disable_tc() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_config_hbq(emlxs_hba_t *hba, MAILBOXQ *mbq, int hbq_id)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan HBQ_INIT_t *hbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan int i;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bzero((void *)mb, MAILBOX_CMD_BSIZE);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hbq = &hba->sli.sli3.hbq_table[hbq_id];
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgHbq.hbqId = hbq_id;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgHbq.numEntries = hbq->HBQ_numEntries;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgHbq.recvNotify = hbq->HBQ_recvNotify;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgHbq.numMask = hbq->HBQ_num_mask;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgHbq.profile = hbq->HBQ_profile;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgHbq.ringMask = hbq->HBQ_ringMask;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgHbq.headerLen = hbq->HBQ_headerLen;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgHbq.logEntry = hbq->HBQ_logEntry;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varCfgHbq.hbqaddrLow = PADDR_LO(hbq->HBQ_host_buf.phys);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb->un.varCfgHbq.hbqaddrHigh = PADDR_HI(hbq->HBQ_host_buf.phys);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxCommand = MBX_CONFIG_HBQ;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Copy info for profiles 2,3,5. Other profiles this area is reserved */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if ((hbq->HBQ_profile == 2) || (hbq->HBQ_profile == 3) ||
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte (hbq->HBQ_profile == 5)) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte bcopy(&hbq->profiles.allprofiles,
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte &mb->un.varCfgHbq.profiles.allprofiles,
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte sizeof (hbq->profiles));
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Return if no rctl / type masks for this HBQ */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (!hbq->HBQ_num_mask) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Otherwise we setup specific rctl / type masks for this HBQ */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte for (i = 0; i < hbq->HBQ_num_mask; i++) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mb->un.varCfgHbq.hbqMasks[i].tmatch =
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan hbq->HBQ_Masks[i].tmatch;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgHbq.hbqMasks[i].tmask = hbq->HBQ_Masks[i].tmask;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgHbq.hbqMasks[i].rctlmatch =
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte hbq->HBQ_Masks[i].rctlmatch;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgHbq.hbqMasks[i].rctlmask =
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte hbq->HBQ_Masks[i].rctlmask;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} /* emlxs_mb_config_hbq() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore/* SLI3 */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amorestatic uint32_t
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amoreemlxs_reg_vpi_mbcmpl(emlxs_hba_t *hba, MAILBOXQ *mbq)
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan{
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore emlxs_port_t *port = (emlxs_port_t *)mbq->port;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mb = (MAILBOX *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mutex_enter(&EMLXS_PORT_LOCK);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (mb->mbxStatus != MBX_SUCCESS) {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore port->flag &= ~EMLXS_PORT_REG_VPI;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mutex_exit(&EMLXS_PORT_LOCK);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_sli_detail_msg,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore "cmpl_reg_vpi:%d failed. status=%x",
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore port->vpi, mb->mbxStatus);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return (0);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore port->flag |= EMLXS_PORT_REG_VPI_CMPL;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mutex_exit(&EMLXS_PORT_LOCK);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_sli_detail_msg,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore "cmpl_reg_vpi:%d ",
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore port->vpi);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return (0);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore} /* emlxs_reg_vpi_mbcmpl */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore/* SLI3 */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanextern uint32_t
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_reg_vpi(emlxs_port_t *port, emlxs_buf_t *sbp)
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan emlxs_hba_t *hba = HBA;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOXQ *mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan int rval;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore if (hba->sli_mode > EMLXS_HBA_SLI3_MODE) {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore return (1);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore }
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (!(hba->flag & FC_NPIV_ENABLED)) {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_sli_detail_msg,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore "reg_vpi:%d failed. NPIV disabled.",
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore port->vpi);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore return (1);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore }
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore if (port->flag & EMLXS_PORT_REG_VPI) {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_sli_detail_msg,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore "reg_vpi:%d failed. Already registered.",
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore port->vpi);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (0);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mutex_enter(&EMLXS_PORT_LOCK);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Can't reg vpi until ClearLA is sent */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (hba->state != FC_READY) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mutex_exit(&EMLXS_PORT_LOCK);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_sli_detail_msg,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore "reg_vpi:%d failed. HBA state not READY",
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore port->vpi);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (1);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Must have port id */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (!port->did) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mutex_exit(&EMLXS_PORT_LOCK);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_sli_detail_msg,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore "reg_vpi:%d failed. Port did=0",
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore port->vpi);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (1);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld if (!(mbq = (MAILBOXQ *)emlxs_mem_get(hba, MEM_MBOX))) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mutex_exit(&EMLXS_PORT_LOCK);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_sli_detail_msg,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore "reg_vpi:%d failed. Unable to allocate mbox.",
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore port->vpi);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (1);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore port->flag |= EMLXS_PORT_REG_VPI;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mutex_exit(&EMLXS_PORT_LOCK);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan mb = (MAILBOX *)mbq->mbox;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore bzero((void *)mb, MAILBOX_CMD_BSIZE);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_sli_detail_msg,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore "reg_vpi:%d", port->vpi);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb->un.varRegVpi.vpi = port->vpi;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varRegVpi.sid = port->did;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxCommand = MBX_REG_VPI;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxOwner = OWN_HOST;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->sbp = (void *)sbp;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->mbox_cmpl = emlxs_reg_vpi_mbcmpl;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->context = NULL;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)port;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan rval = EMLXS_SLI_ISSUE_MBOX_CMD(hba, mbq, MBX_NOWAIT, 0);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if ((rval != MBX_BUSY) && (rval != MBX_SUCCESS)) {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_sli_detail_msg,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore "reg_vpi:%d failed. Unable to send request.",
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore port->vpi);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore emlxs_mem_put(hba, MEM_MBOX, (void *)mbq);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore return (1);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (0);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} /* emlxs_mb_reg_vpi() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore/* SLI3 */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amorestatic uint32_t
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amoreemlxs_unreg_vpi_mbcmpl(emlxs_hba_t *hba, MAILBOXQ *mbq)
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan{
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore emlxs_port_t *port = (emlxs_port_t *)mbq->port;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore MAILBOX *mb;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb = (MAILBOX *)mbq->mbox;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore if (mb->mbxStatus != MBX_SUCCESS) {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_sli_detail_msg,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore "unreg_vpi_mbcmpl:%d failed. status=%x",
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore port->vpi, mb->mbxStatus);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore return (0);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_sli_detail_msg,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore "unreg_vpi_mbcmpl:%d", port->vpi);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mutex_enter(&EMLXS_PORT_LOCK);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore port->flag &= ~EMLXS_PORT_REG_VPI_CMPL;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mutex_exit(&EMLXS_PORT_LOCK);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan return (0);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore} /* emlxs_unreg_vpi_mbcmpl() */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore/* SLI3 */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern uint32_t
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteemlxs_mb_unreg_vpi(emlxs_port_t *port)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan emlxs_hba_t *hba = HBA;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan MAILBOXQ *mbq;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan MAILBOX *mb;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan int rval;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore if (hba->sli_mode > EMLXS_HBA_SLI3_MODE) {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore return (1);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore }
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mutex_enter(&EMLXS_PORT_LOCK);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore if (!(port->flag & EMLXS_PORT_REG_VPI) ||
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore !(port->flag & EMLXS_PORT_REG_VPI_CMPL)) {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_sli_detail_msg,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore "unreg_vpi:%d failed. Not registered. flag=%x",
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore port->vpi, port->flag);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mutex_exit(&EMLXS_PORT_LOCK);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (0);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld if (!(mbq = (MAILBOXQ *)emlxs_mem_get(hba, MEM_MBOX))) {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_sli_detail_msg,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore "unreg_vpi:%d failed. Unable to allocate mbox.",
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore port->vpi);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mutex_exit(&EMLXS_PORT_LOCK);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (1);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore port->flag &= ~EMLXS_PORT_REG_VPI;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mutex_exit(&EMLXS_PORT_LOCK);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_sli_detail_msg,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore "unreg_vpi:%d", port->vpi);
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb = (MAILBOX *)mbq->mbox;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore bzero((void *)mb, MAILBOX_CMD_BSIZE);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb->un.varUnregVpi.vpi = port->vpi;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb->mbxCommand = MBX_UNREG_VPI;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mb->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->mbox_cmpl = emlxs_unreg_vpi_mbcmpl;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->context = NULL;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)port;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore rval = EMLXS_SLI_ISSUE_MBOX_CMD(hba, mbq, MBX_NOWAIT, 0);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore if ((rval != MBX_BUSY) && (rval != MBX_SUCCESS)) {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_sli_detail_msg,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore "unreg_vpi:%d failed. Unable to send request.",
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore port->vpi);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore emlxs_mem_put(hba, MEM_MBOX, (void *)mbq);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore return (1);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (0);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} /* emlxs_mb_unreg_vpi() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan * emlxs_mb_config_farp Issue a CONFIG FARP mailbox command
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_config_farp(emlxs_hba_t *hba, MAILBOXQ *mbq)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bzero((void *)mb, MAILBOX_CMD_BSIZE);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bcopy((uint8_t *)&hba->wwpn,
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan (uint8_t *)&mb->un.varCfgFarp.portname, sizeof (NAME_TYPE));
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan bcopy((uint8_t *)&hba->wwpn,
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan (uint8_t *)&mb->un.varCfgFarp.nodename, sizeof (NAME_TYPE));
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgFarp.filterEnable = 1;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgFarp.portName = 1;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->un.varCfgFarp.nodeName = 1;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxCommand = MBX_CONFIG_FARP;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} /* emlxs_mb_config_farp() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan * emlxs_mb_read_nv Issue a READ CONFIG mailbox command
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan/*ARGSUSED*/
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_read_config(emlxs_hba_t *hba, MAILBOXQ *mbq)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX *mb = (MAILBOX *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (hba->sli_mode == EMLXS_HBA_SLI4_MODE) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bzero((void *) mb, MAILBOX_CMD_SLI4_BSIZE);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->nonembed = NULL;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan } else {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bzero((void *)mb, MAILBOX_CMD_BSIZE);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxCommand = MBX_READ_CONFIG;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mb->mbxOwner = OWN_HOST;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbq->mbox_cmpl = NULL; /* no cmpl needed */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbq->port = (void *)&PPORT;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} /* emlxs_mb_read_config() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * NAME: emlxs_mb_put
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * FUNCTION: put mailbox cmd onto the mailbox queue.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * EXECUTION ENVIRONMENT: process and interrupt level.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * NOTES:
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan * CALLED FROM: EMLXS_SLI_ISSUE_MBOX_CMD
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan * INPUT: hba - pointer to the device info area
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan * mbp - pointer to mailbox queue entry of mailbox cmd
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * RETURNS: NULL - command queued
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteemlxs_mb_put(emlxs_hba_t *hba, MAILBOXQ *mbq)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mutex_enter(&EMLXS_MBOX_LOCK);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (hba->mbox_queue.q_first) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /*
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * queue command to end of list
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan ((MAILBOXQ *)hba->mbox_queue.q_last)->next = mbq;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte hba->mbox_queue.q_last = (uint8_t *)mbq;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte hba->mbox_queue.q_cnt++;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte } else {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /*
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * add command to empty list
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte hba->mbox_queue.q_first = (uint8_t *)mbq;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte hba->mbox_queue.q_last = (uint8_t *)mbq;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte hba->mbox_queue.q_cnt = 1;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mbq->next = NULL;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mutex_exit(&EMLXS_MBOX_LOCK);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} /* emlxs_mb_put() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/*
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * NAME: emlxs_mb_get
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * FUNCTION: get a mailbox command from mailbox command queue
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * EXECUTION ENVIRONMENT: interrupt level.
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * NOTES:
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * CALLED FROM: emlxs_handle_mb_event
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * INPUT: hba - pointer to the device info area
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte *
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte * RETURNS: NULL - no match found mb pointer - pointer to a mailbox command
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern MAILBOXQ *
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteemlxs_mb_get(emlxs_hba_t *hba)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan MAILBOXQ *p_first = NULL;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mutex_enter(&EMLXS_MBOX_LOCK);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (hba->mbox_queue.q_first) {
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan p_first = (MAILBOXQ *)hba->mbox_queue.q_first;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte hba->mbox_queue.q_first = (uint8_t *)p_first->next;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (hba->mbox_queue.q_first == NULL) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte hba->mbox_queue.q_last = NULL;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte hba->mbox_queue.q_cnt = 0;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte } else {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte hba->mbox_queue.q_cnt--;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte p_first->next = NULL;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mutex_exit(&EMLXS_MBOX_LOCK);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (p_first);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} /* emlxs_mb_get() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte/* EMLXS_PORT_LOCK must be held when calling this */
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathanvoid
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteemlxs_mb_init(emlxs_hba_t *hba, MAILBOXQ *mbq, uint32_t flag, uint32_t tmo)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan MATCHMAP *mp;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte HBASTATS.MboxIssued++;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte hba->mbox_queue_flag = flag;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Set the Mailbox timer */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld if (hba->timer_tics) {
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld hba->mbox_timer = hba->timer_tics + tmo;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld } else {
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld hba->mbox_timer = DRV_TIME + tmo;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Initialize mailbox */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mbq->flag &= MBQ_INIT_MASK;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mbq->next = 0;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mutex_enter(&EMLXS_MBOX_LOCK);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore hba->mbox_mbq = (void *)mbq;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mutex_exit(&EMLXS_MBOX_LOCK);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (mbq->nonembed) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mp = (MATCHMAP *) mbq->nonembed;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan EMLXS_MPDATA_SYNC(mp->dma_handle, 0, mp->size,
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte DDI_DMA_SYNC_FORDEV);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (mbq->bp) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mp = (MATCHMAP *) mbq->bp;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan EMLXS_MPDATA_SYNC(mp->dma_handle, 0, mp->size,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan DDI_DMA_SYNC_FORDEV);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} /* emlxs_mb_init() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteextern void
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forteemlxs_mb_fini(emlxs_hba_t *hba, MAILBOX *mb, uint32_t mbxStatus)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan emlxs_port_t *port = &PPORT;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MATCHMAP *mbox_nonembed;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan MATCHMAP *mbox_bp;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan emlxs_buf_t *mbox_sbp;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan fc_unsol_buf_t *mbox_ubp;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan IOCBQ *mbox_iocbq;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan MAILBOXQ *mbox_mbq;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan MAILBOX *mbox;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan uint32_t mbox_queue_flag;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mutex_enter(&EMLXS_PORT_LOCK);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (hba->mbox_queue_flag) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte HBASTATS.MboxCompleted++;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mbxStatus != MBX_SUCCESS) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte HBASTATS.MboxError++;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte } else {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte HBASTATS.MboxGood++;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mutex_enter(&EMLXS_MBOX_LOCK);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mbox_queue_flag = hba->mbox_queue_flag;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbox_mbq = (MAILBOXQ *)hba->mbox_mbq;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (mbox_mbq) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbox_nonembed = (MATCHMAP *)mbox_mbq->nonembed;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbox_bp = (MATCHMAP *)mbox_mbq->bp;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbox_sbp = (emlxs_buf_t *)mbox_mbq->sbp;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbox_ubp = (fc_unsol_buf_t *)mbox_mbq->ubp;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbox_iocbq = (IOCBQ *)mbox_mbq->iocbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan } else {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbox_nonembed = NULL;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbox_bp = NULL;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbox_sbp = NULL;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbox_ubp = NULL;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbox_iocbq = NULL;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore hba->mbox_mbq = NULL;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte hba->mbox_queue_flag = 0;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->mbox_timer = 0;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mutex_exit(&EMLXS_MBOX_LOCK);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mutex_exit(&EMLXS_PORT_LOCK);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld#ifdef SFCT_SUPPORT
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld if (mb && mbox_sbp && mbox_sbp->fct_cmd) {
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_fct_detail_msg,
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld "FCT mailbox: %s: status=%x",
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld emlxs_mb_cmd_xlate(mb->mbxCommand),
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mb->mbxStatus);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld }
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld#endif /* SFCT_SUPPORT */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (mbox_queue_flag == MBX_NOWAIT) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Check for deferred MBUF cleanup */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (mbox_bp) {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore emlxs_mem_put(hba, MEM_BUF, (void *)mbox_bp);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (mbox_nonembed) {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore emlxs_mem_put(hba, MEM_BUF,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore (void *)mbox_nonembed);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (mbox_mbq) {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore emlxs_mem_put(hba, MEM_MBOX,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore (void *)mbox_mbq);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan } else { /* MBX_WAIT */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (mbox_mbq) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (mb) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Copy the local mailbox provided back into */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* the original mailbox */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (hba->sli_mode == EMLXS_HBA_SLI4_MODE) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bcopy((uint32_t *)mb,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (uint32_t *)mbox_mbq,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX_CMD_SLI4_BSIZE);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan } else {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan bcopy((uint32_t *)mb,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan (uint32_t *)mbox_mbq,
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MAILBOX_CMD_BSIZE);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbox = (MAILBOX *)mbox_mbq;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore mbox->mbxStatus = (uint16_t)mbxStatus;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Mark mailbox complete */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbox_mbq->flag |= MBQ_COMPLETED;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Wake up the sleeping thread */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mbox_queue_flag == MBX_SLEEP) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mutex_enter(&EMLXS_MBOX_LOCK);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte cv_broadcast(&EMLXS_MBOX_CV);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte mutex_exit(&EMLXS_MBOX_LOCK);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore emlxs_mb_deferred_cmpl(port, mbxStatus, mbox_sbp, mbox_ubp, mbox_iocbq);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore return;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore} /* emlxs_mb_fini() */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amoreextern void
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amoreemlxs_mb_deferred_cmpl(emlxs_port_t *port, uint32_t mbxStatus, emlxs_buf_t *sbp,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore fc_unsol_buf_t *ubp, IOCBQ *iocbq)
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore{
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore emlxs_hba_t *hba = HBA;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore emlxs_ub_priv_t *ub_priv;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore#ifdef SFCT_SUPPORT
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld if (sbp && sbp->fct_cmd && (sbp->fct_state == EMLXS_FCT_REG_PENDING)) {
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mutex_enter(&EMLXS_PKT_LOCK);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld sbp->fct_flags |= EMLXS_FCT_REGISTERED;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld cv_broadcast(&EMLXS_PKT_CV);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld mutex_exit(&EMLXS_PKT_LOCK);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld sbp = NULL;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore }
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore#endif /* SFCT_SUPPORT */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Check for deferred pkt completion */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore if (sbp) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (mbxStatus != MBX_SUCCESS) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Set error status */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore sbp->pkt_flags &= ~PACKET_STATE_VALID;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore emlxs_set_pkt_state(sbp, IOSTAT_LOCAL_REJECT,
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte IOERR_NO_RESOURCES, 1);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore emlxs_pkt_complete(sbp, -1, 0, 1);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Check for deferred ub completion */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore if (ubp) {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore ub_priv = ubp->ub_fca_private;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore if (mbxStatus == MBX_SUCCESS) {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore emlxs_ub_callback(ub_priv->port, ubp);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore } else {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore (void) emlxs_fca_ub_release(ub_priv->port, 1,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore &ubp->ub_token);
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore /* Special handling for restricted login */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore if (iocbq == (IOCBQ *)1) {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore iocbq = NULL;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte /* Check for deferred iocb tx */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore if (iocbq) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Check for driver special codes */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* These indicate the mailbox is being flushed */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan if (mbxStatus >= MBX_DRIVER_RESERVED) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Set the error status and return it */
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore iocbq->iocb.ULPSTATUS = IOSTAT_LOCAL_REJECT;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore iocbq->iocb.un.grsp.perr.statLocalError =
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan IOERR_ABORT_REQUESTED;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore emlxs_proc_channel_event(hba, iocbq->channel,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore iocbq);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan } else {
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore EMLXS_SLI_ISSUE_IOCB_CMD(hba, iocbq->channel,
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore iocbq);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore} /* emlxs_mb_deferred_cmpl() */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanextern void
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathanemlxs_mb_flush(emlxs_hba_t *hba)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan MAILBOXQ *mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan uint32_t mbxStatus;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mbxStatus = (hba->flag & FC_HARDWARE_ERROR) ?
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan MBX_HARDWARE_ERROR : MBX_NOT_FINISHED;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Flush out the active mbox command */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan emlxs_mb_fini(hba, NULL, mbxStatus);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan /* Flush out the queued mbox commands */
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan while (mbq = (MAILBOXQ *)emlxs_mb_get(hba)) {
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mutex_enter(&EMLXS_MBOX_LOCK);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan hba->mbox_queue_flag = MBX_NOWAIT;
a9800beb32c1006bb21c8da39e0180ea440b7badGarrett D'Amore hba->mbox_mbq = (void *)mbq;
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan mutex_exit(&EMLXS_MBOX_LOCK);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan emlxs_mb_fini(hba, NULL, mbxStatus);
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
825277341c15b6b0d2c4b8b622ae7b1d2bdc0390Sukumar Swaminathan} /* emlxs_mb_flush */
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathanextern char *
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathanemlxs_mb_cmd_xlate(uint8_t cmd)
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte{
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan static char buffer[32];
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan uint32_t i;
291a2b48b9adcd7b3666c34e80ba6411929afe7fSukumar Swaminathan uint32_t count;
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte count = sizeof (emlxs_mb_cmd_table) / sizeof (emlxs_table_t);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte for (i = 0; i < count; i++) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte if (cmd == emlxs_mb_cmd_table[i].code) {
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (emlxs_mb_cmd_table[i].string);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte }
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld (void) snprintf(buffer, sizeof (buffer), "Cmd=0x%x", cmd);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte return (buffer);
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte
fcf3ce441efd61da9bb2884968af01cb7c1452ccJohn Forte} /* emlxs_mb_cmd_xlate() */
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeldextern char *
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeldemlxs_request_feature_xlate(uint32_t mask)
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld{
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld static char buffer[64];
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld uint32_t i;
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld bzero((char *)&buffer[0], 64);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld for (i = 0; i < 12; i++) {
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld if (mask & (1<<i)) {
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld (void) strlcat(buffer,
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld emlxs_request_feature_table[i].string,
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld sizeof (buffer));
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld }
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld }
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld return (buffer);
8f23e9fa8abcb5857661066b954e63400d589b65Hans Rosenfeld}