Print this page
NEX-5733 cleanup qlt/qlc
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Alek Pinchuk <alek.pinchuk@nexenta.com>
NEX-5717 import QLogic 16G FC drivers
Reviewed by: Steve Peng <steve.peng@nexenta.com>
Reviewed by: Josef 'Jeff' Sipek <josef.sipek@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>

*** 17,41 **** * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ ! /* Copyright 2010 QLogic Corporation */ /* ! * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. */ ! #pragma ident "Copyright 2010 QLogic Corporation; ql_mbx.c" /* * ISP2xxx Solaris Fibre Channel Adapter (FCA) driver source file. * * *********************************************************************** * * ** * * NOTICE ** ! * * COPYRIGHT (C) 1996-2010 QLOGIC CORPORATION ** * * ALL RIGHTS RESERVED ** * * ** * *********************************************************************** * */ --- 17,41 ---- * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ ! /* Copyright 2015 QLogic Corporation */ /* ! * Copyright (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved. */ ! #pragma ident "Copyright 2015 QLogic Corporation; ql_mbx.c" /* * ISP2xxx Solaris Fibre Channel Adapter (FCA) driver source file. * * *********************************************************************** * * ** * * NOTICE ** ! * * COPYRIGHT (C) 1996-2015 QLOGIC CORPORATION ** * * ALL RIGHTS RESERVED ** * * ** * *********************************************************************** * */
*** 44,53 **** --- 44,54 ---- #include <ql_api.h> #include <ql_debug.h> #include <ql_iocb.h> #include <ql_isr.h> #include <ql_mbx.h> + #include <ql_nx.h> #include <ql_xioctl.h> /* * Local data */
*** 54,73 **** /* * Local prototypes */ static int ql_mailbox_command(ql_adapter_state_t *, mbx_cmd_t *); ! static int ql_task_mgmt_iocb(ql_adapter_state_t *, ql_tgt_t *, uint16_t, uint32_t, uint16_t); static int ql_abort_cmd_iocb(ql_adapter_state_t *, ql_srb_t *); static int ql_setup_mbox_dma_transfer(ql_adapter_state_t *, dma_mem_t *, caddr_t, uint32_t); static int ql_setup_mbox_dma_resources(ql_adapter_state_t *, dma_mem_t *, uint32_t); static void ql_setup_mbox_dma_data(dma_mem_t *, caddr_t); static void ql_get_mbox_dma_data(dma_mem_t *, caddr_t); ! /* * ql_mailbox_command * Issue mailbox command and waits for completion. * * Input: --- 55,75 ---- /* * Local prototypes */ static int ql_mailbox_command(ql_adapter_state_t *, mbx_cmd_t *); ! static int ql_task_mgmt_iocb(ql_adapter_state_t *, ql_tgt_t *, uint64_t, uint32_t, uint16_t); static int ql_abort_cmd_iocb(ql_adapter_state_t *, ql_srb_t *); static int ql_setup_mbox_dma_transfer(ql_adapter_state_t *, dma_mem_t *, caddr_t, uint32_t); static int ql_setup_mbox_dma_resources(ql_adapter_state_t *, dma_mem_t *, uint32_t); static void ql_setup_mbox_dma_data(dma_mem_t *, caddr_t); static void ql_get_mbox_dma_data(dma_mem_t *, caddr_t); ! static int ql_init_req_q(ql_adapter_state_t *, ql_request_q_t *, uint16_t); ! static int ql_init_rsp_q(ql_adapter_state_t *, ql_response_q_t *, uint16_t); /* * ql_mailbox_command * Issue mailbox command and waits for completion. * * Input:
*** 90,119 **** uint32_t set_flags = 0; uint32_t reset_flags = 0; ql_adapter_state_t *ha = vha->pha; int mbx_cmd = mcp->mb[0]; ! QL_PRINT_3(CE_CONT, "(%d): started, cmd=%xh\n", ha->instance, mbx_cmd); /* Acquire mailbox register lock. */ MBX_REGISTER_LOCK(ha); /* Check for mailbox available, if not wait for signal. */ ! while (ha->mailbox_flags & MBX_BUSY_FLG || ! (CFG_IST(ha, CFG_CTRL_8021) && ! RD32_IO_REG(ha, nx_host_int) & NX_MBX_CMD)) { ! ha->mailbox_flags = (uint8_t) ! (ha->mailbox_flags | MBX_WANT_FLG); ! if (ha->task_daemon_flags & TASK_DAEMON_POWERING_DOWN) { ! EL(vha, "failed availability cmd=%xh\n", mcp->mb[0]); MBX_REGISTER_UNLOCK(ha); return (QL_LOCK_TIMEOUT); } /* Set timeout after command that is running. */ ! timer = (mcp->timeout + 20) * drv_usectohz(1000000); cv_stat = cv_reltimedwait_sig(&ha->cv_mbx_wait, &ha->pha->mbx_mutex, timer, TR_CLOCK_TICK); if (cv_stat == -1 || cv_stat == 0) { /* * The timeout time 'timer' was --- 92,120 ---- uint32_t set_flags = 0; uint32_t reset_flags = 0; ql_adapter_state_t *ha = vha->pha; int mbx_cmd = mcp->mb[0]; ! QL_PRINT_3(ha, "started, cmd=%xh\n", mbx_cmd); /* Acquire mailbox register lock. */ MBX_REGISTER_LOCK(ha); /* Check for mailbox available, if not wait for signal. */ ! while (ha->mailbox_flags & MBX_BUSY_FLG) { if (ha->task_daemon_flags & TASK_DAEMON_POWERING_DOWN) { ! EL(vha, "powerdown availability cmd=%xh\n", mcp->mb[0]); MBX_REGISTER_UNLOCK(ha); return (QL_LOCK_TIMEOUT); } + ha->mailbox_flags = (uint8_t) + (ha->mailbox_flags | MBX_WANT_FLG); /* Set timeout after command that is running. */ ! timer = ha->mailbox_flags & MBX_BUSY_FLG ? ! (mcp->timeout + 20) : 2; ! timer = timer * drv_usectohz(1000000); cv_stat = cv_reltimedwait_sig(&ha->cv_mbx_wait, &ha->pha->mbx_mutex, timer, TR_CLOCK_TICK); if (cv_stat == -1 || cv_stat == 0) { /* * The timeout time 'timer' was
*** 151,172 **** data >>= 1; } /* Issue set host interrupt command. */ ha->mailbox_flags = (uint8_t)(ha->mailbox_flags & ~MBX_INTERRUPT); ! if (CFG_IST(ha, CFG_CTRL_8021)) { WRT32_IO_REG(ha, nx_host_int, NX_MBX_CMD); ! } else if (CFG_IST(ha, CFG_CTRL_242581)) { WRT32_IO_REG(ha, hccr, HC24_SET_HOST_INT); } else { WRT16_IO_REG(ha, hccr, HC_SET_HOST_INT); } /* Wait for command to complete. */ if (ha->flags & INTERRUPTS_ENABLED && ! !(ha->task_daemon_flags & (TASK_THREAD_CALLED | ! TASK_DAEMON_POWERING_DOWN)) && !ddi_in_panic()) { timer = mcp->timeout * drv_usectohz(1000000); while (!(ha->mailbox_flags & (MBX_INTERRUPT | MBX_ABORT)) && !(ha->task_daemon_flags & ISP_ABORT_NEEDED)) { --- 152,172 ---- data >>= 1; } /* Issue set host interrupt command. */ ha->mailbox_flags = (uint8_t)(ha->mailbox_flags & ~MBX_INTERRUPT); ! if (CFG_IST(ha, CFG_CTRL_82XX)) { WRT32_IO_REG(ha, nx_host_int, NX_MBX_CMD); ! } else if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { WRT32_IO_REG(ha, hccr, HC24_SET_HOST_INT); } else { WRT16_IO_REG(ha, hccr, HC_SET_HOST_INT); } /* Wait for command to complete. */ if (ha->flags & INTERRUPTS_ENABLED && ! !(ha->task_daemon_flags & TASK_DAEMON_POWERING_DOWN) && !ddi_in_panic()) { timer = mcp->timeout * drv_usectohz(1000000); while (!(ha->mailbox_flags & (MBX_INTERRUPT | MBX_ABORT)) && !(ha->task_daemon_flags & ISP_ABORT_NEEDED)) {
*** 175,184 **** --- 175,186 ---- /* * The timeout time 'timer' was * reached without the condition * being signaled. */ + EL(vha, "reltimedwait expired cmd=%xh\n", + mcp->mb[0]); MBX_REGISTER_UNLOCK(ha); while (INTERRUPT_PENDING(ha)) { (void) ql_isr((caddr_t)ha); INTR_LOCK(ha); ha->intr_claimed = B_TRUE;
*** 223,233 **** /* Mailbox command timeout? */ if (ha->task_daemon_flags & ISP_ABORT_NEEDED || ha->mailbox_flags & MBX_ABORT) { rval = QL_ABORTED; } else if ((ha->mailbox_flags & MBX_INTERRUPT) == 0) { ! if (!CFG_IST(ha, CFG_CTRL_8021)) { if (CFG_IST(ha, CFG_DUMP_MAILBOX_TIMEOUT)) { (void) ql_binary_fw_dump(ha, FALSE); } EL(vha, "command timeout, isp_abort_needed\n"); set_flags |= ISP_ABORT_NEEDED; --- 225,235 ---- /* Mailbox command timeout? */ if (ha->task_daemon_flags & ISP_ABORT_NEEDED || ha->mailbox_flags & MBX_ABORT) { rval = QL_ABORTED; } else if ((ha->mailbox_flags & MBX_INTERRUPT) == 0) { ! if (!CFG_IST(ha, CFG_CTRL_82XX)) { if (CFG_IST(ha, CFG_DUMP_MAILBOX_TIMEOUT)) { (void) ql_binary_fw_dump(ha, FALSE); } EL(vha, "command timeout, isp_abort_needed\n"); set_flags |= ISP_ABORT_NEEDED;
*** 246,256 **** /* * Clear outbound to risc mailbox registers per spec. The exception * is on 2200 mailbox 4 and 5 affect the req and resp que indexes * so avoid writing them. */ ! if (ha->cfg_flags & CFG_CTRL_2200) { data = ((mcp->out_mb & ~(MBX_4 | MBX_5)) >> 1); } else { data = (mcp->out_mb >> 1); } for (cnt = 1; cnt < ha->reg_off->mbox_cnt && data; cnt++) { --- 248,258 ---- /* * Clear outbound to risc mailbox registers per spec. The exception * is on 2200 mailbox 4 and 5 affect the req and resp que indexes * so avoid writing them. */ ! if (CFG_IST(ha, CFG_CTRL_22XX)) { data = ((mcp->out_mb & ~(MBX_4 | MBX_5)) >> 1); } else { data = (mcp->out_mb >> 1); } for (cnt = 1; cnt < ha->reg_off->mbox_cnt && data; cnt++) {
*** 282,292 **** if (rval != QL_SUCCESS) { EL(vha, "%s failed, rval=%xh, mcp->mb[0]=%xh\n", mbx_cmd_text(mbx_cmd), rval, mcp->mb[0]); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 284,294 ---- if (rval != QL_SUCCESS) { EL(vha, "%s failed, rval=%xh, mcp->mb[0]=%xh\n", mbx_cmd_text(mbx_cmd), rval, mcp->mb[0]); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 425,444 **** int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); ! if (CFG_IST(ha, (CFG_CTRL_6322 | CFG_CTRL_258081)) || ! ha->vp_index != 0) { ha->flags &= ~IP_INITIALIZED; EL(ha, "HBA does not support IP\n"); return (QL_FUNCTION_FAILED); } ! ha->rcvbuf_ring_ptr = ha->rcvbuf_ring_bp; ha->rcvbuf_ring_index = 0; /* Reset all sequence counts. */ for (index = 0; index < DEVICE_HEAD_LIST_SIZE; index++) { for (link = ha->dev[index].first; link != NULL; --- 427,445 ---- int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); ! if (!CFG_IST(ha, CFG_FCIP_SUPPORT) || ha->vp_index != 0) { ha->flags &= ~IP_INITIALIZED; EL(ha, "HBA does not support IP\n"); return (QL_FUNCTION_FAILED); } ! ha->rcvbuf_ring_ptr = ha->rcv_ring.bp; ha->rcvbuf_ring_index = 0; /* Reset all sequence counts. */ for (index = 0; index < DEVICE_HEAD_LIST_SIZE; index++) { for (link = ha->dev[index].first; link != NULL;
*** 470,480 **** if (rval == QL_SUCCESS) { ADAPTER_STATE_LOCK(ha); ha->flags |= IP_INITIALIZED; ADAPTER_STATE_UNLOCK(ha); ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } else { ha->flags &= ~IP_INITIALIZED; EL(ha, "failed, rval = %xh\n", rval); } return (rval); --- 471,481 ---- if (rval == QL_SUCCESS) { ADAPTER_STATE_LOCK(ha); ha->flags |= IP_INITIALIZED; ADAPTER_STATE_UNLOCK(ha); ! QL_PRINT_3(ha, "done\n"); } else { ha->flags &= ~IP_INITIALIZED; EL(ha, "failed, rval = %xh\n", rval); } return (rval);
*** 501,511 **** mbx_cmd_t *mcp = &mc; fc_unsol_buf_t *ubp; ql_srb_t *sp; uint16_t index; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_UNLOAD_IP; mcp->out_mb = MBX_0; mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV; --- 502,512 ---- mbx_cmd_t *mcp = &mc; fc_unsol_buf_t *ubp; ql_srb_t *sp; uint16_t index; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_UNLOAD_IP; mcp->out_mb = MBX_0; mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV;
*** 527,537 **** ha->flags &= ~IP_INITIALIZED; ADAPTER_STATE_UNLOCK(ha); if (rval == QL_SUCCESS) { /* EMPTY - no need to check return value of MBC_SHUTDOWN_IP */ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } else { EL(ha, "failed, rval = %xh\n", rval); } return (rval); } --- 528,538 ---- ha->flags &= ~IP_INITIALIZED; ADAPTER_STATE_UNLOCK(ha); if (rval == QL_SUCCESS) { /* EMPTY - no need to check return value of MBC_SHUTDOWN_IP */ ! QL_PRINT_3(ha, "done\n"); } else { EL(ha, "failed, rval = %xh\n", rval); } return (rval); }
*** 554,564 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_ONLINE_SELF_TEST; mcp->out_mb = MBX_0; mcp->in_mb = MBX_0 | MBX_1 | MBX_2 | MBX_3; mcp->timeout = MAILBOX_TOV; --- 555,565 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_ONLINE_SELF_TEST; mcp->out_mb = MBX_0; mcp->in_mb = MBX_0 | MBX_1 | MBX_2 | MBX_3; mcp->timeout = MAILBOX_TOV;
*** 567,577 **** if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh, mb1=%xh, mb2=%xh, mb3=%xh\n", rval, mcp->mb[1], mcp->mb[2], mcp->mb[3]); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } /* --- 568,578 ---- if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh, mb1=%xh, mb2=%xh, mb3=%xh\n", rval, mcp->mb[1], mcp->mb[2], mcp->mb[3]); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); } /*
*** 596,606 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_DIAGNOSTIC_LOOP_BACK; mcp->mb[1] = lb->options; mcp->mb[2] = findex; mcp->mb[6] = LSW(h_rcv); --- 597,607 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_DIAGNOSTIC_LOOP_BACK; mcp->mb[1] = lb->options; mcp->mb[2] = findex; mcp->mb[6] = LSW(h_rcv);
*** 631,641 **** if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh, mb1=%xh, mb2=%xh, mb3=%xh\n", rval, mcp->mb[1], mcp->mb[2], mcp->mb[3]); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } #else int --- 632,642 ---- if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh, mb1=%xh, mb2=%xh, mb3=%xh\n", rval, mcp->mb[1], mcp->mb[2], mcp->mb[3]); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); } #else int
*** 643,653 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_DIAGNOSTIC_LOOP_BACK; mcp->mb[1] = lb->options; mcp->mb[2] = findex; mcp->mb[6] = LSW(h_rcv); --- 644,654 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_DIAGNOSTIC_LOOP_BACK; mcp->mb[1] = lb->options; mcp->mb[2] = findex; mcp->mb[6] = LSW(h_rcv);
*** 685,695 **** if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } #endif --- 686,696 ---- if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); } #endif
*** 714,724 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_ECHO; /* ECHO command */ mcp->mb[1] = echo_pt->options; /* command options; 64 bit */ /* addressing (bit 6) and */ /* real echo (bit 15 */ --- 715,725 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_ECHO; /* ECHO command */ mcp->mb[1] = echo_pt->options; /* command options; 64 bit */ /* addressing (bit 6) and */ /* real echo (bit 15 */
*** 772,782 **** if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } /* --- 773,783 ---- if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); } /*
*** 798,808 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_SEND_CHANGE_REQUEST; mcp->mb[1] = fmt; mcp->out_mb = MBX_1|MBX_0; if (ha->flags & VP_ENABLED) { --- 799,809 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_SEND_CHANGE_REQUEST; mcp->mb[1] = fmt; mcp->out_mb = MBX_1|MBX_0; if (ha->flags & VP_ENABLED) {
*** 815,825 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } /* --- 816,826 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); } /*
*** 843,853 **** uint16_t size; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); /* LFA_CB sz = 4 16bit words subcommand + 10 16bit words header. */ size = (uint16_t)((lfa->subcommand_length[0] + 10) << 1); rval = ql_setup_mbox_dma_transfer(ha, &mem_desc, (caddr_t)lfa, size); --- 844,854 ---- uint16_t size; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); /* LFA_CB sz = 4 16bit words subcommand + 10 16bit words header. */ size = (uint16_t)((lfa->subcommand_length[0] + 10) << 1); rval = ql_setup_mbox_dma_transfer(ha, &mem_desc, (caddr_t)lfa, size);
*** 875,885 **** if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 876,886 ---- if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 888,937 **** * Issue clear ACA mailbox command. * * Input: * ha: adapter state pointer. * tq: target queue pointer. ! * lun: LUN. * * Returns: * ql local function return status code. * * Context: * Kernel context. */ int ! ql_clear_aca(ql_adapter_state_t *ha, ql_tgt_t *tq, uint16_t lun) { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); ! if (CFG_IST(ha, CFG_CTRL_24258081)) { ! rval = ql_task_mgmt_iocb(ha, tq, lun, CF_CLEAR_ACA, 0); } else { mcp->mb[0] = MBC_CLEAR_ACA; if (CFG_IST(ha, CFG_EXT_FW_INTERFACE)) { mcp->mb[1] = tq->loop_id; } else { mcp->mb[1] = (uint16_t)(tq->loop_id << 8); } ! mcp->mb[2] = lun; mcp->out_mb = MBX_2|MBX_1|MBX_0; mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); } ! (void) ql_marker(ha, tq->loop_id, lun, MK_SYNC_ID); if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 889,939 ---- * Issue clear ACA mailbox command. * * Input: * ha: adapter state pointer. * tq: target queue pointer. ! * lq: LUN queue pointer. * * Returns: * ql local function return status code. * * Context: * Kernel context. */ int ! ql_clear_aca(ql_adapter_state_t *ha, ql_tgt_t *tq, ql_lun_t *lq) { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); ! if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { ! rval = ql_task_mgmt_iocb(ha, tq, lq->lun_addr, ! CF_CLEAR_ACA, 0); } else { mcp->mb[0] = MBC_CLEAR_ACA; if (CFG_IST(ha, CFG_EXT_FW_INTERFACE)) { mcp->mb[1] = tq->loop_id; } else { mcp->mb[1] = (uint16_t)(tq->loop_id << 8); } ! mcp->mb[2] = lq->lun_no; mcp->out_mb = MBX_2|MBX_1|MBX_0; mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); } ! (void) ql_marker(ha, tq->loop_id, lq, MK_SYNC_ID); if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 952,969 **** */ int ql_target_reset(ql_adapter_state_t *ha, ql_tgt_t *tq, uint16_t delay) { ql_link_t *link; uint16_t index; ! int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); ! if (CFG_IST(ha, CFG_CTRL_24258081)) { /* queue = NULL, all targets. */ if (tq == NULL) { for (index = 0; index < DEVICE_HEAD_LIST_SIZE; index++) { for (link = ha->dev[index].first; link != --- 954,983 ---- */ int ql_target_reset(ql_adapter_state_t *ha, ql_tgt_t *tq, uint16_t delay) { ql_link_t *link; + ql_srb_t *sp; uint16_t index; ! int rval = QL_SUCCESS; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); ! ql_requeue_pending_cmds(ha, tq); ! INTR_LOCK(ha); ! for (index = 1; index < ha->pha->osc_max_cnt; index++) { ! if ((sp = ha->pha->outstanding_cmds[index]) != NULL && ! sp->lun_queue != NULL && ! sp->lun_queue->target_queue == tq) { ! sp->flags |= SRB_ABORTING; ! } ! } ! INTR_UNLOCK(ha); ! ! if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { /* queue = NULL, all targets. */ if (tq == NULL) { for (index = 0; index < DEVICE_HEAD_LIST_SIZE; index++) { for (link = ha->dev[index].first; link !=
*** 1030,1040 **** if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 1044,1054 ---- if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 1054,1070 **** * Kernel context. */ int ql_abort_target(ql_adapter_state_t *ha, ql_tgt_t *tq, uint16_t delay) { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); ! if (CFG_IST(ha, CFG_CTRL_24258081)) { rval = ql_task_mgmt_iocb(ha, tq, 0, CF_DO_NOT_SEND | CF_TARGET_RESET, delay); } else { mcp->mb[0] = MBC_ABORT_TARGET; /* Don't send Task Mgt */ --- 1068,1097 ---- * Kernel context. */ int ql_abort_target(ql_adapter_state_t *ha, ql_tgt_t *tq, uint16_t delay) { + ql_srb_t *sp; + uint16_t index; int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); ! ql_requeue_pending_cmds(ha, tq); ! INTR_LOCK(ha); ! for (index = 1; index < ha->pha->osc_max_cnt; index++) { ! if ((sp = ha->pha->outstanding_cmds[index]) != NULL && ! sp->lun_queue != NULL && ! sp->lun_queue->target_queue == tq) { ! sp->flags |= SRB_ABORTING; ! } ! } ! INTR_UNLOCK(ha); ! ! if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { rval = ql_task_mgmt_iocb(ha, tq, 0, CF_DO_NOT_SEND | CF_TARGET_RESET, delay); } else { mcp->mb[0] = MBC_ABORT_TARGET; /* Don't send Task Mgt */
*** 1086,1096 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, d_id=%xh\n", rval, tq->d_id.b24); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } /* --- 1113,1123 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, d_id=%xh\n", rval, tq->d_id.b24); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); } /*
*** 1098,1147 **** * Issue LUN reset task management mailbox command. * * Input: * ha: adapter state pointer. * tq: target queue pointer. ! * lun: LUN. * * Returns: * ql local function return status code. * * Context: * Kernel context. */ int ! ql_lun_reset(ql_adapter_state_t *ha, ql_tgt_t *tq, uint16_t lun) { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); ! if (CFG_IST(ha, CFG_CTRL_24258081)) { ! rval = ql_task_mgmt_iocb(ha, tq, lun, CF_LUN_RESET, 0); } else { mcp->mb[0] = MBC_LUN_RESET; if (CFG_IST(ha, CFG_EXT_FW_INTERFACE)) { mcp->mb[1] = tq->loop_id; } else { mcp->mb[1] = (uint16_t)(tq->loop_id << 8); } ! mcp->mb[2] = lun; mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0; mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); } ! (void) ql_marker(ha, tq->loop_id, lun, MK_SYNC_ID); if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, d_id=%xh\n", rval, tq->d_id.b24); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } /* --- 1125,1189 ---- * Issue LUN reset task management mailbox command. * * Input: * ha: adapter state pointer. * tq: target queue pointer. ! * lq: LUN queue pointer. * * Returns: * ql local function return status code. * * Context: * Kernel context. */ int ! ql_lun_reset(ql_adapter_state_t *ha, ql_tgt_t *tq, ql_lun_t *lq) { + ql_srb_t *sp; + uint16_t index; int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); ! ql_requeue_pending_cmds(ha, tq); ! INTR_LOCK(ha); ! for (index = 1; index < ha->pha->osc_max_cnt; index++) { ! if ((sp = ha->pha->outstanding_cmds[index]) != NULL && ! sp->lun_queue != NULL && ! sp->lun_queue->target_queue == tq && ! sp->lun_queue == lq) { ! sp->flags |= SRB_ABORTING; ! } ! } ! INTR_UNLOCK(ha); ! ! if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { ! rval = ql_task_mgmt_iocb(ha, tq, lq->lun_addr, ! CF_LUN_RESET, 0); } else { mcp->mb[0] = MBC_LUN_RESET; if (CFG_IST(ha, CFG_EXT_FW_INTERFACE)) { mcp->mb[1] = tq->loop_id; } else { mcp->mb[1] = (uint16_t)(tq->loop_id << 8); } ! mcp->mb[2] = lq->lun_no; mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0; mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); } ! (void) ql_marker(ha, tq->loop_id, lq, MK_SYNC_ID); if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, d_id=%xh\n", rval, tq->d_id.b24); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); } /*
*** 1149,1198 **** * Issue clear task set mailbox command. * * Input: * ha: adapter state pointer. * tq: target queue pointer. ! * lun: LUN. * * Returns: * ql local function return status code. * * Context: * Kernel context. */ int ! ql_clear_task_set(ql_adapter_state_t *ha, ql_tgt_t *tq, uint16_t lun) { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); ! if (CFG_IST(ha, CFG_CTRL_24258081)) { ! rval = ql_task_mgmt_iocb(ha, tq, lun, CF_CLEAR_TASK_SET, 0); } else { mcp->mb[0] = MBC_CLEAR_TASK_SET; if (CFG_IST(ha, CFG_EXT_FW_INTERFACE)) { mcp->mb[1] = tq->loop_id; } else { mcp->mb[1] = (uint16_t)(tq->loop_id << 8); } ! mcp->mb[2] = lun; mcp->out_mb = MBX_2|MBX_1|MBX_0; mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); } ! (void) ql_marker(ha, tq->loop_id, lun, MK_SYNC_ID); if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, d_id=%xh\n", rval, tq->d_id.b24); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 1191,1255 ---- * Issue clear task set mailbox command. * * Input: * ha: adapter state pointer. * tq: target queue pointer. ! * lq: LUN queue pointer. * * Returns: * ql local function return status code. * * Context: * Kernel context. */ int ! ql_clear_task_set(ql_adapter_state_t *ha, ql_tgt_t *tq, ql_lun_t *lq) { + ql_srb_t *sp; + uint16_t index; int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); ! ql_requeue_pending_cmds(ha, tq); ! INTR_LOCK(ha); ! for (index = 1; index < ha->pha->osc_max_cnt; index++) { ! if ((sp = ha->pha->outstanding_cmds[index]) != NULL && ! sp->lun_queue != NULL && ! sp->lun_queue->target_queue == tq && ! sp->lun_queue == lq) { ! sp->flags |= SRB_ABORTING; ! } ! } ! INTR_UNLOCK(ha); ! ! if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { ! rval = ql_task_mgmt_iocb(ha, tq, lq->lun_addr, ! CF_CLEAR_TASK_SET, 0); } else { mcp->mb[0] = MBC_CLEAR_TASK_SET; if (CFG_IST(ha, CFG_EXT_FW_INTERFACE)) { mcp->mb[1] = tq->loop_id; } else { mcp->mb[1] = (uint16_t)(tq->loop_id << 8); } ! mcp->mb[2] = lq->lun_no; mcp->out_mb = MBX_2|MBX_1|MBX_0; mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); } ! (void) ql_marker(ha, tq->loop_id, lq, MK_SYNC_ID); if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, d_id=%xh\n", rval, tq->d_id.b24); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 1201,1250 **** * Issue abort task set mailbox command. * * Input: * ha: adapter state pointer. * tq: target queue pointer. ! * lun: LUN. * * Returns: * ql local function return status code. * * Context: * Kernel context. */ int ! ql_abort_task_set(ql_adapter_state_t *ha, ql_tgt_t *tq, uint16_t lun) { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); ! if (CFG_IST(ha, CFG_CTRL_24258081)) { ! rval = ql_task_mgmt_iocb(ha, tq, lun, CF_ABORT_TASK_SET, 0); } else { mcp->mb[0] = MBC_ABORT_TASK_SET; if (CFG_IST(ha, CFG_EXT_FW_INTERFACE)) { mcp->mb[1] = tq->loop_id; } else { mcp->mb[1] = (uint16_t)(tq->loop_id << 8); } ! mcp->mb[2] = lun; mcp->out_mb = MBX_2|MBX_1|MBX_0; mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); } ! (void) ql_marker(ha, tq->loop_id, lun, MK_SYNC_ID); if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, d_id=%xh\n", rval, tq->d_id.b24); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 1258,1322 ---- * Issue abort task set mailbox command. * * Input: * ha: adapter state pointer. * tq: target queue pointer. ! * lq: LUN queue pointer. * * Returns: * ql local function return status code. * * Context: * Kernel context. */ int ! ql_abort_task_set(ql_adapter_state_t *ha, ql_tgt_t *tq, ql_lun_t *lq) { + ql_srb_t *sp; + uint16_t index; int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); ! ql_requeue_pending_cmds(ha, tq); ! INTR_LOCK(ha); ! for (index = 1; index < ha->pha->osc_max_cnt; index++) { ! if ((sp = ha->pha->outstanding_cmds[index]) != NULL && ! sp->lun_queue != NULL && ! sp->lun_queue->target_queue == tq && ! sp->lun_queue == lq) { ! sp->flags |= SRB_ABORTING; ! } ! } ! INTR_UNLOCK(ha); ! ! if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { ! rval = ql_task_mgmt_iocb(ha, tq, lq->lun_addr, ! CF_ABORT_TASK_SET, 0); } else { mcp->mb[0] = MBC_ABORT_TASK_SET; if (CFG_IST(ha, CFG_EXT_FW_INTERFACE)) { mcp->mb[1] = tq->loop_id; } else { mcp->mb[1] = (uint16_t)(tq->loop_id << 8); } ! mcp->mb[2] = lq->lun_no; mcp->out_mb = MBX_2|MBX_1|MBX_0; mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); } ! (void) ql_marker(ha, tq->loop_id, lq, MK_SYNC_ID); if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, d_id=%xh\n", rval, tq->d_id.b24); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 1253,1263 **** * Function issues task management IOCB. * * Input: * ha: adapter state pointer. * tq: target queue pointer. ! * lun: LUN. * flags: control flags. * delay: seconds. * * Returns: * ql local function return status code. --- 1325,1335 ---- * Function issues task management IOCB. * * Input: * ha: adapter state pointer. * tq: target queue pointer. ! * lun_addr: LUN. * flags: control flags. * delay: seconds. * * Returns: * ql local function return status code.
*** 1264,1281 **** * * Context: * Kernel context */ static int ! ql_task_mgmt_iocb(ql_adapter_state_t *ha, ql_tgt_t *tq, uint16_t lun, uint32_t flags, uint16_t delay) { ql_mbx_iocb_t *pkt; int rval; uint32_t pkt_size; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); pkt_size = sizeof (ql_mbx_iocb_t); pkt = kmem_zalloc(pkt_size, KM_SLEEP); if (pkt == NULL) { EL(ha, "failed, kmem_zalloc\n"); --- 1336,1354 ---- * * Context: * Kernel context */ static int ! ql_task_mgmt_iocb(ql_adapter_state_t *ha, ql_tgt_t *tq, uint64_t lun_addr, uint32_t flags, uint16_t delay) { ql_mbx_iocb_t *pkt; int rval; uint32_t pkt_size; + fcp_ent_addr_t *fcp_ent_addr; ! QL_PRINT_3(ha, "started\n"); pkt_size = sizeof (ql_mbx_iocb_t); pkt = kmem_zalloc(pkt_size, KM_SLEEP); if (pkt == NULL) { EL(ha, "failed, kmem_zalloc\n");
*** 1286,1297 **** pkt->mgmt.entry_count = 1; pkt->mgmt.n_port_hdl = (uint16_t)LE_16(tq->loop_id); pkt->mgmt.delay = (uint16_t)LE_16(delay); pkt->mgmt.timeout = LE_16(MAILBOX_TOV); ! pkt->mgmt.fcp_lun[2] = LSB(lun); ! pkt->mgmt.fcp_lun[3] = MSB(lun); pkt->mgmt.control_flags = LE_32(flags); pkt->mgmt.target_id[0] = tq->d_id.b.al_pa; pkt->mgmt.target_id[1] = tq->d_id.b.area; pkt->mgmt.target_id[2] = tq->d_id.b.domain; pkt->mgmt.vp_index = ha->vp_index; --- 1359,1379 ---- pkt->mgmt.entry_count = 1; pkt->mgmt.n_port_hdl = (uint16_t)LE_16(tq->loop_id); pkt->mgmt.delay = (uint16_t)LE_16(delay); pkt->mgmt.timeout = LE_16(MAILBOX_TOV); ! ! fcp_ent_addr = (fcp_ent_addr_t *)&lun_addr; ! pkt->mgmt.fcp_lun[2] = lobyte(fcp_ent_addr->ent_addr_0); ! pkt->mgmt.fcp_lun[3] = hibyte(fcp_ent_addr->ent_addr_0); ! pkt->mgmt.fcp_lun[0] = lobyte(fcp_ent_addr->ent_addr_1); ! pkt->mgmt.fcp_lun[1] = hibyte(fcp_ent_addr->ent_addr_1); ! pkt->mgmt.fcp_lun[6] = lobyte(fcp_ent_addr->ent_addr_2); ! pkt->mgmt.fcp_lun[7] = hibyte(fcp_ent_addr->ent_addr_2); ! pkt->mgmt.fcp_lun[4] = lobyte(fcp_ent_addr->ent_addr_3); ! pkt->mgmt.fcp_lun[5] = hibyte(fcp_ent_addr->ent_addr_3); ! pkt->mgmt.control_flags = LE_32(flags); pkt->mgmt.target_id[0] = tq->d_id.b.al_pa; pkt->mgmt.target_id[1] = tq->d_id.b.area; pkt->mgmt.target_id[2] = tq->d_id.b.domain; pkt->mgmt.vp_index = ha->vp_index;
*** 1315,1325 **** if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 1397,1407 ---- if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 1342,1356 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_LOOP_PORT_BYPASS; ! if (CFG_IST(ha, CFG_CTRL_24258081)) { mcp->mb[1] = tq->d_id.b.al_pa; } else if (CFG_IST(ha, CFG_EXT_FW_INTERFACE)) { mcp->mb[1] = tq->loop_id; } else { mcp->mb[1] = (uint16_t)(tq->loop_id << 8); --- 1424,1438 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_LOOP_PORT_BYPASS; ! if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { mcp->mb[1] = tq->d_id.b.al_pa; } else if (CFG_IST(ha, CFG_EXT_FW_INTERFACE)) { mcp->mb[1] = tq->loop_id; } else { mcp->mb[1] = (uint16_t)(tq->loop_id << 8);
*** 1363,1373 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, d_id=%xh\n", rval, tq->d_id.b24); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 1445,1455 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, d_id=%xh\n", rval, tq->d_id.b24); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 1390,1404 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_LOOP_PORT_ENABLE; ! if (CFG_IST(ha, CFG_CTRL_24258081)) { mcp->mb[1] = tq->d_id.b.al_pa; } else if (CFG_IST(ha, CFG_EXT_FW_INTERFACE)) { mcp->mb[1] = tq->loop_id; } else { mcp->mb[1] = (uint16_t)(tq->loop_id << 8); --- 1472,1486 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_LOOP_PORT_ENABLE; ! if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { mcp->mb[1] = tq->d_id.b.al_pa; } else if (CFG_IST(ha, CFG_EXT_FW_INTERFACE)) { mcp->mb[1] = tq->loop_id; } else { mcp->mb[1] = (uint16_t)(tq->loop_id << 8);
*** 1410,1420 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, d_id=%xh\n", rval, tq->d_id.b24); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 1492,1502 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, d_id=%xh\n", rval, tq->d_id.b24); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 1443,1456 **** uint16_t flags; ql_mbx_data_t mr; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started, d_id=%xh, loop_id=%xh\n", ha->instance, tq->d_id.b24, loop_id); ! if (CFG_IST(ha, CFG_CTRL_24258081)) { flags = CF_CMD_PLOGI; if ((opt & LLF_PLOGI) == 0) { flags = (uint16_t)(flags | CFO_COND_PLOGI); } rval = ql_log_iocb(ha, tq, loop_id, flags, &mr); --- 1525,1538 ---- uint16_t flags; ql_mbx_data_t mr; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started, d_id=%xh, loop_id=%xh\n", ha->instance, tq->d_id.b24, loop_id); ! if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { flags = CF_CMD_PLOGI; if ((opt & LLF_PLOGI) == 0) { flags = (uint16_t)(flags | CFO_COND_PLOGI); } rval = ql_log_iocb(ha, tq, loop_id, flags, &mr);
*** 1471,1481 **** if (rval != QL_SUCCESS) { EL(ha, "d_id=%xh, loop_id=%xh, failed=%xh\n", tq->d_id.b24, loop_id, rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 1553,1563 ---- if (rval != QL_SUCCESS) { EL(ha, "d_id=%xh, loop_id=%xh, failed=%xh\n", tq->d_id.b24, loop_id, rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 1504,1521 **** int rval; uint16_t flags; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started, d_id=%xh, loop_id=%xh\n", ha->instance, tq->d_id.b24, loop_id); ! if ((tq->d_id.b24 & 0xffffff) == 0xfffffa) { opt = (uint16_t)(opt | LFF_NO_PRLI); } ! if (CFG_IST(ha, CFG_CTRL_24258081)) { flags = CF_CMD_PLOGI; if (opt & LFF_NO_PLOGI) { flags = (uint16_t)(flags | CFO_COND_PLOGI); } if (opt & LFF_NO_PRLI) { --- 1586,1603 ---- int rval; uint16_t flags; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started, d_id=%xh, loop_id=%xh\n", ha->instance, tq->d_id.b24, loop_id); ! if ((tq->d_id.b24 & QL_PORT_ID_MASK) == FS_MANAGEMENT_SERVER) { opt = (uint16_t)(opt | LFF_NO_PRLI); } ! if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { flags = CF_CMD_PLOGI; if (opt & LFF_NO_PLOGI) { flags = (uint16_t)(flags | CFO_COND_PLOGI); } if (opt & LFF_NO_PRLI) {
*** 1548,1562 **** } } if (rval != QL_SUCCESS) { EL(ha, "d_id=%xh, loop_id=%xh, failed=%xh, mb1=%02xh, " ! "mb2=%04x\n", tq->d_id.b24, loop_id, rval, mr->mb[1], ! mr->mb[2]); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 1630,1645 ---- } } if (rval != QL_SUCCESS) { EL(ha, "d_id=%xh, loop_id=%xh, failed=%xh, mb1=%02xh, " ! "mb2=%04x\n", tq->d_id.b24, loop_id, rval, ! mr != NULL ? mr->mb[1] : mcp->mb[1], ! mr != NULL ? mr->mb[2] : mcp->mb[2]); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 1581,1598 **** uint16_t flag; ql_mbx_data_t mr; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started, loop_id=%xh d_id=%xh\n", ! ha->instance, tq->loop_id, tq->d_id.b24); ! if (CFG_IST(ha, CFG_CTRL_24258081)) { flag = (uint16_t)(RESERVED_LOOP_ID(ha, tq->loop_id) ? ! CFO_EXPLICIT_LOGO |CF_CMD_LOGO | CFO_FREE_N_PORT_HANDLE : ! CFO_IMPLICIT_LOGO |CF_CMD_LOGO | CFO_FREE_N_PORT_HANDLE); rval = ql_log_iocb(ha, tq, tq->loop_id, flag, &mr); } else { flag = (uint16_t)(RESERVED_LOOP_ID(ha, tq->loop_id) ? 1 : 0); mcp->mb[0] = MBC_LOGOUT_FABRIC_PORT; if (CFG_IST(ha, CFG_EXT_FW_INTERFACE)) { mcp->mb[1] = tq->loop_id; --- 1664,1698 ---- uint16_t flag; ql_mbx_data_t mr; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started, loop_id=%xh d_id=%xh\n", ! tq->loop_id, tq->d_id.b24); ! if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { ! if ((ha->topology & QL_N_PORT) && ! (tq->loop_id != 0x7fe) && ! (tq->loop_id != 0x7ff)) { ! flag = (uint16_t)(CFO_IMPLICIT_LOGO | ! CF_CMD_LOGO | CFO_FREE_N_PORT_HANDLE); ! ! rval = ql_log_iocb(ha, tq, tq->loop_id, flag, &mr); ! } else { flag = (uint16_t)(RESERVED_LOOP_ID(ha, tq->loop_id) ? ! CFO_EXPLICIT_LOGO | CF_CMD_LOGO | ! CFO_FREE_N_PORT_HANDLE : ! CFO_IMPLICIT_LOGO | CF_CMD_LOGO | ! CFO_FREE_N_PORT_HANDLE); ! rval = ql_log_iocb(ha, tq, tq->loop_id, flag, &mr); + } + + if (rval == QL_SUCCESS) { + EL(ha, "tq=%ph, loop_id=%xh, d_id=%xh, flag=%xh\n", + tq, tq->loop_id, tq->d_id.b24, flag); + } } else { flag = (uint16_t)(RESERVED_LOOP_ID(ha, tq->loop_id) ? 1 : 0); mcp->mb[0] = MBC_LOGOUT_FABRIC_PORT; if (CFG_IST(ha, CFG_EXT_FW_INTERFACE)) { mcp->mb[1] = tq->loop_id;
*** 1606,1620 **** mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); } if (rval != QL_SUCCESS) { ! EL(ha, "d_id=%xh, loop_id=%xh, failed=%xh\n", rval, tq->d_id.b24, tq->loop_id); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 1706,1720 ---- mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); } if (rval != QL_SUCCESS) { ! EL(ha, "failed, rval=%xh, d_id=%xh, loop_id=%xh\n", rval, tq->d_id.b24, tq->loop_id); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 1641,1651 **** { ql_mbx_iocb_t *pkt; int rval; uint32_t pkt_size; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); pkt_size = sizeof (ql_mbx_iocb_t); pkt = kmem_zalloc(pkt_size, KM_SLEEP); if (pkt == NULL) { EL(ha, "failed, kmem_zalloc\n"); --- 1741,1751 ---- { ql_mbx_iocb_t *pkt; int rval; uint32_t pkt_size; ! QL_PRINT_3(ha, "started\n"); pkt_size = sizeof (ql_mbx_iocb_t); pkt = kmem_zalloc(pkt_size, KM_SLEEP); if (pkt == NULL) { EL(ha, "failed, kmem_zalloc\n");
*** 1766,1777 **** mr->mb[0] = MBS_COMMAND_PARAMETER_ERROR; break; } } else { ! QL_PRINT_3(CE_CONT, "(%d): status=%xh\n", ! ha->instance, pkt->log.status); mr->mb[0] = MBS_COMMAND_COMPLETE; mr->mb[1] = (uint16_t) (pkt->log.io_param[0] & BIT_4 ? 0 : BIT_0); if (pkt->log.io_param[0] & BIT_8) { --- 1866,1876 ---- mr->mb[0] = MBS_COMMAND_PARAMETER_ERROR; break; } } else { ! QL_PRINT_3(ha, "status=%xh\n", pkt->log.status); mr->mb[0] = MBS_COMMAND_COMPLETE; mr->mb[1] = (uint16_t) (pkt->log.io_param[0] & BIT_4 ? 0 : BIT_0); if (pkt->log.io_param[0] & BIT_8) {
*** 1785,1798 **** } kmem_free(pkt, pkt_size); if (rval != QL_SUCCESS) { ! EL(ha, "failed=%xh, d_id=%xh\n", rval, tq->d_id.b24); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 1884,1898 ---- } kmem_free(pkt, pkt_size); if (rval != QL_SUCCESS) { ! EL(ha, "failed, rval=%xh, d_id=%xh loop_id=%xh\n", ! rval, tq->d_id.b24, loop_id); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 1819,1829 **** dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; port_database_23_t *pd23; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); pd23 = (port_database_23_t *)kmem_zalloc(PORT_DATABASE_SIZE, KM_SLEEP); if (pd23 == NULL) { rval = QL_MEMORY_ALLOC_FAILED; EL(ha, "failed, rval = %xh\n", rval); --- 1919,1929 ---- dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; port_database_23_t *pd23; ! QL_PRINT_3(ha, "started\n"); pd23 = (port_database_23_t *)kmem_zalloc(PORT_DATABASE_SIZE, KM_SLEEP); if (pd23 == NULL) { rval = QL_MEMORY_ALLOC_FAILED; EL(ha, "failed, rval = %xh\n", rval);
*** 1833,1843 **** if ((rval = ql_setup_mbox_dma_resources(ha, &mem_desc, PORT_DATABASE_SIZE)) != QL_SUCCESS) { return (QL_MEMORY_ALLOC_FAILED); } ! if (CFG_IST(ha, CFG_CTRL_24258081)) { mcp->mb[0] = MBC_GET_PORT_DATABASE; mcp->mb[1] = tq->loop_id; mcp->mb[4] = CHAR_TO_SHORT(tq->d_id.b.al_pa, tq->d_id.b.area); mcp->mb[5] = (uint16_t)tq->d_id.b.domain; mcp->mb[9] = ha->vp_index; --- 1933,1943 ---- if ((rval = ql_setup_mbox_dma_resources(ha, &mem_desc, PORT_DATABASE_SIZE)) != QL_SUCCESS) { return (QL_MEMORY_ALLOC_FAILED); } ! if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { mcp->mb[0] = MBC_GET_PORT_DATABASE; mcp->mb[1] = tq->loop_id; mcp->mb[4] = CHAR_TO_SHORT(tq->d_id.b.al_pa, tq->d_id.b.area); mcp->mb[5] = (uint16_t)tq->d_id.b.domain; mcp->mb[9] = ha->vp_index;
*** 1871,1881 **** } ql_free_dma_resource(ha, &mem_desc); if (rval == QL_SUCCESS) { ! if (CFG_IST(ha, CFG_CTRL_24258081)) { port_database_24_t *pd24 = (port_database_24_t *)pd23; tq->master_state = pd24->current_login_state; tq->slave_state = pd24->last_stable_login_state; if (PD_PORT_LOGIN(tq)) { --- 1971,1981 ---- } ql_free_dma_resource(ha, &mem_desc); if (rval == QL_SUCCESS) { ! if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { port_database_24_t *pd24 = (port_database_24_t *)pd23; tq->master_state = pd24->current_login_state; tq->slave_state = pd24->last_stable_login_state; if (PD_PORT_LOGIN(tq)) {
*** 1963,1978 **** } } kmem_free(pd23, PORT_DATABASE_SIZE); ! if ((rval != QL_SUCCESS) && (rval != QL_PARAMETER_ERROR)) { ! EL(ha, "d_id=%xh, loop_id=%xh, failed=%xh\n", tq->d_id.b24, ! tq->loop_id, rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 2063,2081 ---- } } kmem_free(pd23, PORT_DATABASE_SIZE); ! /* ! * log the trace in any cases other than QL_SUCCESS. ! */ ! if (rval != QL_SUCCESS) { ! EL(ha, "failed, rval=%xh, d_id=%xh, loop_id=%xh\n", ! rval, tq->d_id.b24, tq->loop_id); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 1997,2007 **** int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); if ((rval = ql_setup_mbox_dma_resources(ha, &mem_desc, (uint32_t)size)) != QL_SUCCESS) { EL(ha, "setup_mbox_dma_resources failed: %xh\n", rval); return (QL_MEMORY_ALLOC_FAILED); --- 2100,2110 ---- int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); if ((rval = ql_setup_mbox_dma_resources(ha, &mem_desc, (uint32_t)size)) != QL_SUCCESS) { EL(ha, "setup_mbox_dma_resources failed: %xh\n", rval); return (QL_MEMORY_ALLOC_FAILED);
*** 2025,2035 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 2128,2138 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 2054,2064 **** int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); if ((rval = ql_setup_mbox_dma_transfer(ha, &mem_desc, bufp, (uint32_t)size)) != QL_SUCCESS) { EL(ha, "failed, setup_mbox_dma_transfer: %x\n", rval); return (rval); --- 2157,2167 ---- int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); if ((rval = ql_setup_mbox_dma_transfer(ha, &mem_desc, bufp, (uint32_t)size)) != QL_SUCCESS) { EL(ha, "failed, setup_mbox_dma_transfer: %x\n", rval); return (rval);
*** 2078,2088 **** if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 2181,2191 ---- if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 2110,2128 **** int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); if ((rval = ql_setup_mbox_dma_resources(ha, &mem_desc, (uint32_t)size)) != QL_SUCCESS) { return (QL_MEMORY_ALLOC_FAILED); } mcp->mb[0] = MBC_SEND_RNID_ELS; ! if (CFG_IST(ha, CFG_CTRL_24258081)) { mcp->mb[1] = loop_id; mcp->mb[9] = ha->vp_index; mcp->mb[10] = opt; mcp->out_mb = MBX_10|MBX_9|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0; } else if (CFG_IST(ha, CFG_EXT_FW_INTERFACE)) { --- 2213,2231 ---- int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); if ((rval = ql_setup_mbox_dma_resources(ha, &mem_desc, (uint32_t)size)) != QL_SUCCESS) { return (QL_MEMORY_ALLOC_FAILED); } mcp->mb[0] = MBC_SEND_RNID_ELS; ! if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { mcp->mb[1] = loop_id; mcp->mb[9] = ha->vp_index; mcp->mb[10] = opt; mcp->out_mb = MBX_10|MBX_9|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0; } else if (CFG_IST(ha, CFG_EXT_FW_INTERFACE)) {
*** 2149,2159 **** if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 2252,2262 ---- if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 2178,2188 **** int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); if ((rval = ql_setup_mbox_dma_resources(ha, &mem_desc, (uint32_t)size)) != QL_SUCCESS) { return (QL_MEMORY_ALLOC_FAILED); } --- 2281,2291 ---- int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); if ((rval = ql_setup_mbox_dma_resources(ha, &mem_desc, (uint32_t)size)) != QL_SUCCESS) { return (QL_MEMORY_ALLOC_FAILED); }
*** 2205,2215 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 2308,2318 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 2238,2258 **** mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; int rval = QL_SUCCESS; int retry = 0; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); do { if ((rval = ql_setup_mbox_dma_resources(ha, &mem_desc, (uint32_t)size)) != QL_SUCCESS) { EL(ha, "setup_mbox_dma_resources failed: %xh\n", rval); return (QL_MEMORY_ALLOC_FAILED); } mcp->mb[0] = MBC_GET_LINK_STATUS; ! if (CFG_IST(ha, CFG_CTRL_24258081)) { if (loop_id == ha->loop_id) { mcp->mb[0] = MBC_GET_STATUS_COUNTS; mcp->mb[8] = (uint16_t)(size >> 2); mcp->out_mb = MBX_10|MBX_8; } else { --- 2341,2361 ---- mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; int rval = QL_SUCCESS; int retry = 0; ! QL_PRINT_3(ha, "started\n"); do { if ((rval = ql_setup_mbox_dma_resources(ha, &mem_desc, (uint32_t)size)) != QL_SUCCESS) { EL(ha, "setup_mbox_dma_resources failed: %xh\n", rval); return (QL_MEMORY_ALLOC_FAILED); } mcp->mb[0] = MBC_GET_LINK_STATUS; ! if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { if (loop_id == ha->loop_id) { mcp->mb[0] = MBC_GET_STATUS_COUNTS; mcp->mb[8] = (uint16_t)(size >> 2); mcp->out_mb = MBX_10|MBX_8; } else {
*** 2304,2314 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, mbx1=%xh\n", rval, mcp->mb[1]); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 2407,2417 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, mbx1=%xh\n", rval, mcp->mb[1]); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 2336,2362 **** dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; int rval = QL_SUCCESS; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); if ((rval = ql_setup_mbox_dma_resources(ha, &mem_desc, (uint32_t)size)) != QL_SUCCESS) { EL(ha, "setup_mbox_dma_resources failed: %x\n", rval); return (QL_MEMORY_ALLOC_FAILED); } ! if (CFG_IST(ha, CFG_CTRL_24258081)) { mcp->mb[0] = MBC_GET_STATUS_COUNTS; mcp->mb[8] = (uint16_t)(size / 4); mcp->out_mb = MBX_10|MBX_8; } else { mcp->mb[0] = MBC_GET_LINK_STATUS; /* allows reporting when link is down */ ! if (CFG_IST(ha, CFG_CTRL_2200) == 0) { port_no = (uint8_t)(port_no | BIT_6); } if (CFG_IST(ha, CFG_EXT_FW_INTERFACE)) { mcp->mb[1] = loop_id; --- 2439,2465 ---- dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; int rval = QL_SUCCESS; ! QL_PRINT_3(ha, "started\n"); if ((rval = ql_setup_mbox_dma_resources(ha, &mem_desc, (uint32_t)size)) != QL_SUCCESS) { EL(ha, "setup_mbox_dma_resources failed: %x\n", rval); return (QL_MEMORY_ALLOC_FAILED); } ! if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { mcp->mb[0] = MBC_GET_STATUS_COUNTS; mcp->mb[8] = (uint16_t)(size / 4); mcp->out_mb = MBX_10|MBX_8; } else { mcp->mb[0] = MBC_GET_LINK_STATUS; /* allows reporting when link is down */ ! if (CFG_IST(ha, CFG_CTRL_22XX) == 0) { port_no = (uint8_t)(port_no | BIT_6); } if (CFG_IST(ha, CFG_EXT_FW_INTERFACE)) { mcp->mb[1] = loop_id;
*** 2386,2396 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, mbx1=%xh, mbx2=%xh\n", rval, mcp->mb[1], mcp->mb[2]); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 2489,2499 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, mbx1=%xh, mbx2=%xh\n", rval, mcp->mb[1], mcp->mb[2]); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 2412,2422 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_RESET_LINK_STATUS; mcp->out_mb = MBX_0; mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV; --- 2515,2525 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_RESET_LINK_STATUS; mcp->out_mb = MBX_0; mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV;
*** 2424,2434 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 2527,2537 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 2448,2458 **** int ql_loop_reset(ql_adapter_state_t *ha) { int rval; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); if (CFG_IST(ha, CFG_ENABLE_LIP_RESET)) { rval = ql_lip_reset(ha, 0xff); } else if (CFG_IST(ha, CFG_ENABLE_FULL_LIP_LOGIN)) { rval = ql_full_login_lip(ha); --- 2551,2561 ---- int ql_loop_reset(ql_adapter_state_t *ha) { int rval; ! QL_PRINT_3(ha, "started\n"); if (CFG_IST(ha, CFG_ENABLE_LIP_RESET)) { rval = ql_lip_reset(ha, 0xff); } else if (CFG_IST(ha, CFG_ENABLE_FULL_LIP_LOGIN)) { rval = ql_full_login_lip(ha);
*** 2464,2474 **** if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 2567,2577 ---- if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 2490,2505 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); ! if (CFG_IST(ha, CFG_CTRL_24258081)) { mcp->mb[0] = MBC_LIP_FULL_LOGIN; ! mcp->mb[1] = (uint16_t)(CFG_IST(ha, CFG_CTRL_8081) ? ! BIT_1 : BIT_4); mcp->mb[3] = ha->loop_reset_delay; mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0; } else { mcp->mb[0] = MBC_INITIATE_LIP; mcp->out_mb = MBX_0; --- 2593,2612 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); ! if (CFG_IST(ha, CFG_FCOE_SUPPORT)) { ! ql_toggle_loop_state(ha); ! QL_PRINT_3(ha, "8081 done\n"); ! return (QL_SUCCESS); ! } ! if (CFG_IST(ha, CFG_FC_TYPE_2)) { mcp->mb[0] = MBC_LIP_FULL_LOGIN; ! mcp->mb[1] = BIT_4; mcp->mb[3] = ha->loop_reset_delay; mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0; } else { mcp->mb[0] = MBC_INITIATE_LIP; mcp->out_mb = MBX_0;
*** 2510,2520 **** if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 2617,2627 ---- if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 2536,2552 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_LIP_FULL_LOGIN; ! if (CFG_IST(ha, CFG_CTRL_2425)) { mcp->mb[1] = BIT_3; - } else if (CFG_IST(ha, CFG_CTRL_8081)) { - mcp->mb[1] = BIT_1; } mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0; mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); --- 2643,2662 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); + if (CFG_IST(ha, CFG_FCOE_SUPPORT)) { + ql_toggle_loop_state(ha); + QL_PRINT_3(ha, "8081 done\n"); + return (QL_SUCCESS); + } mcp->mb[0] = MBC_LIP_FULL_LOGIN; ! if (CFG_IST(ha, CFG_FC_TYPE_2)) { mcp->mb[1] = BIT_3; } mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0; mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp);
*** 2553,2563 **** if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done", ha->instance); } return (rval); } --- 2663,2673 ---- if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done"); } return (rval); }
*** 2580,2595 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); ! if (CFG_IST(ha, CFG_CTRL_24258081)) { mcp->mb[0] = MBC_LIP_FULL_LOGIN; ! mcp->mb[1] = (uint16_t)(CFG_IST(ha, CFG_CTRL_8081) ? ! BIT_1 : BIT_6); mcp->mb[3] = ha->loop_reset_delay; mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0; } else { mcp->mb[0] = MBC_LIP_RESET; if (CFG_IST(ha, CFG_EXT_FW_INTERFACE)) { --- 2690,2710 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); ! if (CFG_IST(ha, CFG_FCOE_SUPPORT)) { ! ql_toggle_loop_state(ha); ! QL_PRINT_3(ha, "8081 done\n"); ! return (QL_SUCCESS); ! } ! ! if (CFG_IST(ha, CFG_FC_TYPE_2)) { mcp->mb[0] = MBC_LIP_FULL_LOGIN; ! mcp->mb[1] = BIT_6; mcp->mb[3] = ha->loop_reset_delay; mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0; } else { mcp->mb[0] = MBC_LIP_RESET; if (CFG_IST(ha, CFG_EXT_FW_INTERFACE)) {
*** 2607,2617 **** if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 2722,2732 ---- if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 2635,2647 **** int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ql_tgt_t *tq = sp->lun_queue->target_queue; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); ! if (CFG_IST(ha, CFG_CTRL_24258081)) { rval = ql_abort_cmd_iocb(ha, sp); } else { mcp->mb[0] = MBC_ABORT_COMMAND_IOCB; if (CFG_IST(ha, CFG_EXT_FW_INTERFACE)) { mcp->mb[1] = tq->loop_id; --- 2750,2763 ---- int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ql_tgt_t *tq = sp->lun_queue->target_queue; ! QL_PRINT_3(ha, "started\n"); ! sp->flags |= SRB_ABORTING; ! if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { rval = ql_abort_cmd_iocb(ha, sp); } else { mcp->mb[0] = MBC_ABORT_COMMAND_IOCB; if (CFG_IST(ha, CFG_EXT_FW_INTERFACE)) { mcp->mb[1] = tq->loop_id;
*** 2661,2671 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, d_id=%xh, handle=%xh\n", rval, tq->d_id.b24, sp->handle); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 2777,2787 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, d_id=%xh, handle=%xh\n", rval, tq->d_id.b24, sp->handle); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 2690,2700 **** int rval; uint32_t pkt_size; uint16_t comp_status; ql_tgt_t *tq = sp->lun_queue->target_queue; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); pkt_size = sizeof (ql_mbx_iocb_t); if ((pkt = kmem_zalloc(pkt_size, KM_SLEEP)) == NULL) { EL(ha, "failed, kmem_zalloc\n"); return (QL_MEMORY_ALLOC_FAILED); --- 2806,2816 ---- int rval; uint32_t pkt_size; uint16_t comp_status; ql_tgt_t *tq = sp->lun_queue->target_queue; ! QL_PRINT_3(ha, "started\n"); pkt_size = sizeof (ql_mbx_iocb_t); if ((pkt = kmem_zalloc(pkt_size, KM_SLEEP)) == NULL) { EL(ha, "failed, kmem_zalloc\n"); return (QL_MEMORY_ALLOC_FAILED);
*** 2701,2711 **** } pkt->abo.entry_type = ABORT_CMD_TYPE; pkt->abo.entry_count = 1; pkt->abo.n_port_hdl = (uint16_t)LE_16(tq->loop_id); ! if (!CFG_IST(ha, CFG_CTRL_8021)) { pkt->abo.options = AF_NO_ABTS; } pkt->abo.cmd_handle = LE_32(sp->handle); pkt->abo.target_id[0] = tq->d_id.b.al_pa; pkt->abo.target_id[1] = tq->d_id.b.area; --- 2817,2827 ---- } pkt->abo.entry_type = ABORT_CMD_TYPE; pkt->abo.entry_count = 1; pkt->abo.n_port_hdl = (uint16_t)LE_16(tq->loop_id); ! if (!CFG_IST(ha, CFG_CTRL_82XX)) { pkt->abo.options = AF_NO_ABTS; } pkt->abo.cmd_handle = LE_32(sp->handle); pkt->abo.target_id[0] = tq->d_id.b.al_pa; pkt->abo.target_id[1] = tq->d_id.b.area;
*** 2733,2743 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, d_id=%xh\n", rval, tq->d_id.b24); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 2849,2859 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, d_id=%xh\n", rval, tq->d_id.b24); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 2759,2772 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_VERIFY_CHECKSUM; ! if (CFG_IST(ha, CFG_CTRL_24258081)) { mcp->mb[1] = MSW(ha->risc_fw[0].addr); mcp->mb[2] = LSW(ha->risc_fw[0].addr); } else { mcp->mb[1] = LSW(ha->risc_fw[0].addr); } --- 2875,2888 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_VERIFY_CHECKSUM; ! if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { mcp->mb[1] = MSW(ha->risc_fw[0].addr); mcp->mb[2] = LSW(ha->risc_fw[0].addr); } else { mcp->mb[1] = LSW(ha->risc_fw[0].addr); }
*** 2777,2787 **** if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 2893,2903 ---- if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 2808,2827 **** int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); if ((rval = ql_setup_mbox_dma_resources(ha, &mem_desc, (uint32_t)size)) != QL_SUCCESS) { EL(ha, "setup_mbox_dma_resources failed: %xh\n", rval); return (QL_MEMORY_ALLOC_FAILED); } mcp->mb[0] = MBC_GET_ID_LIST; ! if (CFG_IST(ha, CFG_CTRL_24258081)) { mcp->mb[2] = MSW(LSD(mem_desc.cookie.dmac_laddress)); mcp->mb[3] = LSW(LSD(mem_desc.cookie.dmac_laddress)); mcp->mb[6] = MSW(MSD(mem_desc.cookie.dmac_laddress)); mcp->mb[7] = LSW(MSD(mem_desc.cookie.dmac_laddress)); mcp->mb[8] = (uint16_t)size; --- 2924,2943 ---- int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); if ((rval = ql_setup_mbox_dma_resources(ha, &mem_desc, (uint32_t)size)) != QL_SUCCESS) { EL(ha, "setup_mbox_dma_resources failed: %xh\n", rval); return (QL_MEMORY_ALLOC_FAILED); } mcp->mb[0] = MBC_GET_ID_LIST; ! if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { mcp->mb[2] = MSW(LSD(mem_desc.cookie.dmac_laddress)); mcp->mb[3] = LSW(LSD(mem_desc.cookie.dmac_laddress)); mcp->mb[6] = MSW(MSD(mem_desc.cookie.dmac_laddress)); mcp->mb[7] = LSW(MSD(mem_desc.cookie.dmac_laddress)); mcp->mb[8] = (uint16_t)size;
*** 2852,2862 **** if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 2968,2978 ---- if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 2882,2920 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); ! if (CFG_IST(ha, CFG_CTRL_242581)) { mcp->mb[0] = MBC_LOAD_RAM_EXTENDED; mcp->mb[4] = MSW(word_count); mcp->mb[5] = LSW(word_count); - mcp->mb[6] = MSW(MSD(bp)); - mcp->mb[7] = LSW(MSD(bp)); mcp->mb[8] = MSW(risc_address); ! mcp->out_mb = MBX_8|MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1| ! MBX_0; } else { ! mcp->mb[0] = MBC_LOAD_RAM; mcp->mb[4] = LSW(word_count); ! mcp->out_mb = MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; } ! mcp->mb[1] = LSW(risc_address); ! mcp->mb[2] = MSW(LSD(bp)); ! mcp->mb[3] = LSW(LSD(bp)); mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV; - rval = ql_mailbox_command(ha, mcp); if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 2998,3034 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); ! mcp->mb[1] = LSW(risc_address); ! mcp->mb[2] = MSW(LSD(bp)); ! mcp->mb[3] = LSW(LSD(bp)); ! if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { mcp->mb[0] = MBC_LOAD_RAM_EXTENDED; mcp->mb[4] = MSW(word_count); mcp->mb[5] = LSW(word_count); mcp->mb[8] = MSW(risc_address); ! mcp->out_mb = MBX_0_THRU_8; } else { ! mcp->mb[0] = MBC_LOAD_RISC_RAM; mcp->mb[4] = LSW(word_count); ! mcp->out_mb = MBX_7|MBX_6|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; } ! mcp->mb[6] = MSW(MSD(bp)); ! mcp->mb[7] = LSW(MSD(bp)); mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 2940,2952 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); ! if (CFG_IST(ha, CFG_CTRL_242581)) { mcp->mb[0] = MBC_DUMP_RAM_EXTENDED; mcp->mb[1] = LSW(risc_address); mcp->mb[2] = MSW(LSD(bp)); mcp->mb[3] = LSW(LSD(bp)); mcp->mb[4] = MSW(word_count); --- 3054,3066 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); ! if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { mcp->mb[0] = MBC_DUMP_RAM_EXTENDED; mcp->mb[1] = LSW(risc_address); mcp->mb[2] = MSW(LSD(bp)); mcp->mb[3] = LSW(LSD(bp)); mcp->mb[4] = MSW(word_count);
*** 2970,2980 **** if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 3084,3094 ---- if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 2999,3009 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_WRITE_RAM_EXTENDED; mcp->mb[1] = LSW(risc_address); mcp->mb[2] = LSW(data); mcp->mb[3] = MSW(data); --- 3113,3123 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_WRITE_RAM_EXTENDED; mcp->mb[1] = LSW(risc_address); mcp->mb[2] = LSW(data); mcp->mb[3] = MSW(data);
*** 3016,3026 **** if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 3130,3140 ---- if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 3045,3055 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_READ_RAM_EXTENDED; mcp->mb[1] = LSW(risc_address); mcp->mb[8] = MSW(risc_address); mcp->out_mb = MBX_8|MBX_1|MBX_0; --- 3159,3169 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_READ_RAM_EXTENDED; mcp->mb[1] = LSW(risc_address); mcp->mb[8] = MSW(risc_address); mcp->out_mb = MBX_8|MBX_1|MBX_0;
*** 3060,3073 **** if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { *data = mcp->mb[2]; ! if (CFG_IST(ha, CFG_CTRL_24258081)) { *data |= mcp->mb[3] << 16; } ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 3174,3187 ---- if (rval != QL_SUCCESS) { EL(ha, "failed, rval = %xh\n", rval); } else { *data = mcp->mb[2]; ! if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { *data |= mcp->mb[3] << 16; } ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 3092,3102 **** int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); if ((rval = ql_setup_mbox_dma_transfer(ha, &mem_desc, bp, size)) != QL_SUCCESS) { EL(ha, "setup_mbox_dma_transfer failed: %x\n", rval); return (rval); --- 3206,3216 ---- int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); if ((rval = ql_setup_mbox_dma_transfer(ha, &mem_desc, bp, size)) != QL_SUCCESS) { EL(ha, "setup_mbox_dma_transfer failed: %x\n", rval); return (rval);
*** 3120,3130 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, mbx1=%xh\n", rval, mcp->mb[1]); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 3234,3244 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, mbx1=%xh\n", rval, mcp->mb[1]); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 3147,3189 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); - if (mr != NULL) { mcp->mb[0] = MBC_MAILBOX_REGISTER_TEST; mcp->mb[1] = mr->mb[1]; mcp->mb[2] = mr->mb[2]; mcp->mb[3] = mr->mb[3]; mcp->mb[4] = mr->mb[4]; mcp->mb[5] = mr->mb[5]; mcp->mb[6] = mr->mb[6]; mcp->mb[7] = mr->mb[7]; mcp->out_mb = MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; mcp->in_mb = MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); if (rval == QL_SUCCESS) { ! mr->mb[1] = mcp->mb[1]; ! mr->mb[2] = mcp->mb[2]; ! mr->mb[3] = mcp->mb[3]; ! mr->mb[4] = mcp->mb[4]; ! mr->mb[5] = mcp->mb[5]; ! mr->mb[6] = mcp->mb[6]; ! mr->mb[7] = mcp->mb[7]; } } else { ! rval = QL_FUNCTION_PARAMETER_ERROR; } if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 3261,3324 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started cfg=0x%llx\n", ha->cfg_flags); mcp->mb[0] = MBC_MAILBOX_REGISTER_TEST; + if (mr == NULL) { + mcp->mb[1] = 0xAAAA; + mcp->mb[2] = 0x5555; + mcp->mb[3] = 0xAA55; + mcp->mb[4] = 0x55AA; + mcp->mb[5] = 0xA5A5; + mcp->mb[6] = 0x5A5A; + mcp->mb[7] = 0x2525; + } else { mcp->mb[1] = mr->mb[1]; mcp->mb[2] = mr->mb[2]; mcp->mb[3] = mr->mb[3]; mcp->mb[4] = mr->mb[4]; mcp->mb[5] = mr->mb[5]; mcp->mb[6] = mr->mb[6]; mcp->mb[7] = mr->mb[7]; + } mcp->out_mb = MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; mcp->in_mb = MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); if (rval == QL_SUCCESS) { ! if (mr == NULL) { ! if (mcp->mb[1] != 0xAAAA || mcp->mb[2] != 0x5555 || ! mcp->mb[3] != 0xAA55 || mcp->mb[4] != 0x55AA) { ! rval = QL_FUNCTION_FAILED; } + if (mcp->mb[5] != 0xA5A5 || mcp->mb[6] != 0x5A5A || + mcp->mb[7] != 0x2525) { + rval = QL_FUNCTION_FAILED; + } } else { ! if (mcp->mb[1] != mr->mb[1] || ! mcp->mb[2] != mr->mb[2] || ! mcp->mb[3] != mr->mb[3] || ! mcp->mb[4] != mr->mb[4]) { ! rval = QL_FUNCTION_FAILED; } + if (mcp->mb[5] != mr->mb[5] || + mcp->mb[6] != mr->mb[6] || + mcp->mb[7] != mr->mb[7]) { + rval = QL_FUNCTION_FAILED; + } + } + } if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 3205,3222 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); ! if (CFG_IST(ha, CFG_CTRL_8021)) { return (QL_SUCCESS); } mcp->mb[0] = MBC_EXECUTE_FIRMWARE; ! if (CFG_IST(ha, CFG_CTRL_242581)) { mcp->mb[1] = MSW(ha->risc_fw[0].addr); mcp->mb[2] = LSW(ha->risc_fw[0].addr); } else { mcp->mb[1] = LSW(ha->risc_fw[0].addr); } --- 3340,3357 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); ! if (CFG_IST(ha, CFG_CTRL_82XX)) { return (QL_SUCCESS); } mcp->mb[0] = MBC_EXECUTE_FIRMWARE; ! if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { mcp->mb[1] = MSW(ha->risc_fw[0].addr); mcp->mb[2] = LSW(ha->risc_fw[0].addr); } else { mcp->mb[1] = LSW(ha->risc_fw[0].addr); }
*** 3226,3244 **** mcp->out_mb = MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); ! if (CFG_IST(ha, CFG_CTRL_2200)) { rval = QL_SUCCESS; } if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 3361,3379 ---- mcp->out_mb = MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); ! if (CFG_IST(ha, CFG_CTRL_22XX)) { rval = QL_SUCCESS; } if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 3261,3271 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_GET_FIRMWARE_OPTIONS; mcp->out_mb = MBX_0; mcp->in_mb = MBX_3|MBX_2|MBX_1|MBX_0; mcp->timeout = MAILBOX_TOV; --- 3396,3406 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_GET_FIRMWARE_OPTIONS; mcp->out_mb = MBX_0; mcp->in_mb = MBX_3|MBX_2|MBX_1|MBX_0; mcp->timeout = MAILBOX_TOV;
*** 3281,3291 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_9(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 3416,3426 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_9(ha, "done\n"); } return (rval); }
*** 3308,3318 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); if (mr != NULL) { mcp->mb[0] = MBC_SET_FIRMWARE_OPTIONS; mcp->mb[1] = mr->mb[1]; mcp->mb[2] = mr->mb[2]; --- 3443,3453 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); if (mr != NULL) { mcp->mb[0] = MBC_SET_FIRMWARE_OPTIONS; mcp->mb[1] = mr->mb[1]; mcp->mb[2] = mr->mb[2];
*** 3327,3337 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 3462,3472 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 3355,3379 **** int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); ! if (CFG_IST(ha, CFG_CTRL_8021)) { WRT32_IO_REG(ha, req_out, 0); WRT32_IO_REG(ha, resp_in, 0); WRT32_IO_REG(ha, resp_out, 0); ! } else if (CFG_IST(ha, CFG_CTRL_242581)) { WRT32_IO_REG(ha, req_in, 0); WRT32_IO_REG(ha, resp_out, 0); WRT32_IO_REG(ha, pri_req_in, 0); WRT32_IO_REG(ha, atio_req_out, 0); } else { WRT16_IO_REG(ha, req_in, 0); WRT16_IO_REG(ha, resp_out, 0); } if ((rval = ql_setup_mbox_dma_transfer(ha, &mem_desc, (caddr_t)&ha->init_ctrl_blk, sizeof (ql_comb_init_cb_t))) != QL_SUCCESS) { EL(ha, "dma setup failed=%xh\n", rval); --- 3490,3524 ---- int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); ! if (ha->flags & MULTI_QUEUE) { ! WR32_MBAR_REG(ha, ha->req_q[0]->mbar_req_in, 0); ! WR32_MBAR_REG(ha, ha->rsp_queues[0]->mbar_rsp_out, 0); ! } else if (CFG_IST(ha, CFG_CTRL_82XX)) { ! ql_8021_wr_req_in(ha, 0); WRT32_IO_REG(ha, req_out, 0); WRT32_IO_REG(ha, resp_in, 0); WRT32_IO_REG(ha, resp_out, 0); ! } else if (CFG_IST(ha, CFG_ISP_FW_TYPE_2)) { WRT32_IO_REG(ha, req_in, 0); WRT32_IO_REG(ha, resp_out, 0); WRT32_IO_REG(ha, pri_req_in, 0); WRT32_IO_REG(ha, atio_req_out, 0); } else { WRT16_IO_REG(ha, req_in, 0); WRT16_IO_REG(ha, resp_out, 0); } + if (ha->req_q[0]->req_out_shadow_ptr) { + *ha->req_q[0]->req_out_shadow_ptr = 0; + } + if (ha->rsp_queues[0]->rsp_in_shadow_ptr) { + *ha->rsp_queues[0]->rsp_in_shadow_ptr = 0; + } if ((rval = ql_setup_mbox_dma_transfer(ha, &mem_desc, (caddr_t)&ha->init_ctrl_blk, sizeof (ql_comb_init_cb_t))) != QL_SUCCESS) { EL(ha, "dma setup failed=%xh\n", rval);
*** 3382,3400 **** mcp->mb[0] = (uint16_t)(ha->flags & VP_ENABLED ? MBC_INITIALIZE_MULTI_ID_FW : MBC_INITIALIZE_FIRMWARE); if (CFG_IST(ha, CFG_SBUS_CARD)) { ! mcp->mb[1] = (uint16_t)(CFG_IST(ha, CFG_CTRL_2200) ? 0x204c : 0x52); } mcp->mb[2] = MSW(LSD(mem_desc.cookie.dmac_laddress)); mcp->mb[3] = LSW(LSD(mem_desc.cookie.dmac_laddress)); mcp->mb[6] = MSW(MSD(mem_desc.cookie.dmac_laddress)); mcp->mb[7] = LSW(MSD(mem_desc.cookie.dmac_laddress)); ! if (CFG_IST(ha, CFG_CTRL_8081)) { uint64_t ofst, addr; ql_init_24xx_cb_t *icb = (ql_init_24xx_cb_t *) &ha->init_ctrl_blk.cb24; mcp->mb[0] = MBC_INITIALIZE_MULTI_ID_FW; --- 3527,3545 ---- mcp->mb[0] = (uint16_t)(ha->flags & VP_ENABLED ? MBC_INITIALIZE_MULTI_ID_FW : MBC_INITIALIZE_FIRMWARE); if (CFG_IST(ha, CFG_SBUS_CARD)) { ! mcp->mb[1] = (uint16_t)(CFG_IST(ha, CFG_CTRL_22XX) ? 0x204c : 0x52); } mcp->mb[2] = MSW(LSD(mem_desc.cookie.dmac_laddress)); mcp->mb[3] = LSW(LSD(mem_desc.cookie.dmac_laddress)); mcp->mb[6] = MSW(MSD(mem_desc.cookie.dmac_laddress)); mcp->mb[7] = LSW(MSD(mem_desc.cookie.dmac_laddress)); ! if (CFG_IST(ha, CFG_FCOE_SUPPORT)) { uint64_t ofst, addr; ql_init_24xx_cb_t *icb = (ql_init_24xx_cb_t *) &ha->init_ctrl_blk.cb24; mcp->mb[0] = MBC_INITIALIZE_MULTI_ID_FW;
*** 3417,3434 **** mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); if (rval == QL_SUCCESS) { ha->sfp_stat = mcp->mb[2]; } ql_free_dma_resource(ha, &mem_desc); if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 3562,3607 ---- mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); if (rval == QL_SUCCESS) { ha->sfp_stat = mcp->mb[2]; + if (CFG_IST(ha, CFG_CTRL_82XX)) { + (void) ql_8021_get_md_template(ha); + } else { + uint16_t i, opt; + + opt = ha->flags & NO_INTR_HANDSHAKE ? + IMO_NONE : IMO_INTERRUPT_HANDSHAKE; + if (ha->flags & QUEUE_SHADOW_PTRS) { + opt |= IMO_QUEUE_POINTER_SHADOWING; } + /* Initialize ha multi-response-queue request queue */ + if (ha->rsp_queues_cnt > 1) { + rval = ql_init_req_q(ha, ha->req_q[1], opt); + if (rval != QL_SUCCESS) { + EL(ha, "ql_init_req_q=%xh\n", rval); + return (rval); + } + } + /* Initialize multi-response queues */ + for (i = 1; i < ha->rsp_queues_cnt; i++) { + rval = ql_init_rsp_q(ha, ha->rsp_queues[i], + opt); + if (rval != QL_SUCCESS) { + EL(ha, "ql_init_rsp_q=%xh\n", rval); + return (rval); + } + } + } + } ql_free_dma_resource(ha, &mem_desc); if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 3451,3484 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_GET_FIRMWARE_STATE; mcp->out_mb = MBX_0; ! mcp->in_mb = MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); /* Return mailbox data. */ if (mr != NULL) { mr->mb[1] = mcp->mb[1]; mr->mb[2] = mcp->mb[2]; mr->mb[3] = mcp->mb[3]; mr->mb[4] = mcp->mb[4]; mr->mb[5] = mcp->mb[5]; } ha->sfp_stat = mcp->mb[2]; if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 3624,3666 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_GET_FIRMWARE_STATE; mcp->out_mb = MBX_0; ! mcp->in_mb = MBX_0_THRU_6; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); + ha->fw_state[0] = mcp->mb[0]; + ha->fw_state[1] = mcp->mb[1]; + ha->fw_state[2] = mcp->mb[2]; + ha->fw_state[3] = mcp->mb[3]; + ha->fw_state[4] = mcp->mb[4]; + ha->fw_state[5] = mcp->mb[5]; + ha->fw_state[6] = mcp->mb[6]; + /* Return mailbox data. */ if (mr != NULL) { mr->mb[1] = mcp->mb[1]; mr->mb[2] = mcp->mb[2]; mr->mb[3] = mcp->mb[3]; mr->mb[4] = mcp->mb[4]; mr->mb[5] = mcp->mb[5]; + mr->mb[6] = mcp->mb[6]; } ha->sfp_stat = mcp->mb[2]; if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 3497,3545 **** * Kernel context. */ int ql_get_adapter_id(ql_adapter_state_t *ha, ql_mbx_data_t *mr) { ! int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_GET_ID; if (ha->flags & VP_ENABLED) { mcp->mb[9] = ha->vp_index; } mcp->out_mb = MBX_9|MBX_0; ! mcp->in_mb = MBX_13|MBX_12|MBX_11|MBX_10|MBX_9|MBX_8|MBX_7|MBX_6| ! MBX_3|MBX_2|MBX_1|MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); /* Return mailbox data. */ if (mr != NULL) { ! mr->mb[1] = mcp->mb[1]; ! mr->mb[1] = (uint16_t)(CFG_IST(ha, CFG_CTRL_24258081) ? ! 0xffff : mcp->mb[1]); ! mr->mb[2] = mcp->mb[2]; ! mr->mb[3] = mcp->mb[3]; ! mr->mb[6] = mcp->mb[6]; ! mr->mb[7] = mcp->mb[7]; ! mr->mb[8] = mcp->mb[8]; ! mr->mb[9] = mcp->mb[9]; ! mr->mb[10] = mcp->mb[10]; ! mr->mb[11] = mcp->mb[11]; ! mr->mb[12] = mcp->mb[12]; ! mr->mb[13] = mcp->mb[13]; } if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 3679,3716 ---- * Kernel context. */ int ql_get_adapter_id(ql_adapter_state_t *ha, ql_mbx_data_t *mr) { ! int i, rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_GET_ID; if (ha->flags & VP_ENABLED) { mcp->mb[9] = ha->vp_index; } mcp->out_mb = MBX_9|MBX_0; ! mcp->in_mb = MBX_0_THRU_19; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); /* Return mailbox data. */ if (mr != NULL) { ! for (i = 0; i < 20; i++) { ! mr->mb[i] = mcp->mb[i]; } + } if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 3558,3601 **** * Kernel context. */ int ql_get_fw_version(ql_adapter_state_t *ha, ql_mbx_data_t *mr, uint16_t timeout) { ! int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_ABOUT_FIRMWARE; mcp->out_mb = MBX_0; ! mcp->in_mb = MBX_13|MBX_12|MBX_11|MBX_10|MBX_9|MBX_8|MBX_6|MBX_5| ! MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; mcp->timeout = timeout; rval = ql_mailbox_command(ha, mcp); /* Return mailbox data. */ if (mr != NULL) { ! mr->mb[1] = mcp->mb[1]; ! mr->mb[2] = mcp->mb[2]; ! mr->mb[3] = mcp->mb[3]; ! mr->mb[4] = mcp->mb[4]; ! mr->mb[5] = mcp->mb[5]; ! mr->mb[6] = mcp->mb[6]; ! mr->mb[8] = mcp->mb[8]; ! mr->mb[9] = mcp->mb[9]; ! mr->mb[10] = mcp->mb[10]; ! mr->mb[11] = mcp->mb[11]; ! mr->mb[12] = mcp->mb[12]; ! mr->mb[13] = mcp->mb[13]; } if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 3729,3771 ---- * Kernel context. */ int ql_get_fw_version(ql_adapter_state_t *ha, ql_mbx_data_t *mr, uint16_t timeout) { ! int rval, i; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_ABOUT_FIRMWARE; mcp->out_mb = MBX_0; ! if (CFG_IST(ha, CFG_CTRL_83XX)) { ! mcp->in_mb = MBX_0_THRU_17; ! } else if (CFG_IST(ha, CFG_CTRL_27XX)) { ! mcp->in_mb = MBX_0_THRU_25; ! } else { ! mcp->in_mb = MBX_0_THRU_13; ! } mcp->timeout = timeout; rval = ql_mailbox_command(ha, mcp); /* Return mailbox data. */ if (mr != NULL) { ! for (i = 0; i < ha->reg_off->mbox_cnt && mcp->in_mb; i++) { ! if (mcp->in_mb & MBX_0) { ! mr->mb[i] = mcp->mb[i]; } + mcp->in_mb >>= 1; + } + } if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 3618,3641 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); if (mr != NULL) { mcp->mb[0] = MBC_DATA_RATE; mcp->mb[1] = mr->mb[1]; mcp->mb[2] = mr->mb[2]; mcp->out_mb = MBX_2|MBX_1|MBX_0; ! mcp->in_mb = MBX_2|MBX_1|MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); /* Return mailbox data. */ mr->mb[1] = mcp->mb[1]; mr->mb[2] = mcp->mb[2]; } else { rval = QL_FUNCTION_PARAMETER_ERROR; } ha->sfp_stat = mcp->mb[2]; --- 3788,3812 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); if (mr != NULL) { mcp->mb[0] = MBC_DATA_RATE; mcp->mb[1] = mr->mb[1]; mcp->mb[2] = mr->mb[2]; mcp->out_mb = MBX_2|MBX_1|MBX_0; ! mcp->in_mb = MBX_3|MBX_2|MBX_1|MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); /* Return mailbox data. */ mr->mb[1] = mcp->mb[1]; mr->mb[2] = mcp->mb[2]; + mr->mb[3] = mcp->mb[3]; } else { rval = QL_FUNCTION_PARAMETER_ERROR; } ha->sfp_stat = mcp->mb[2];
*** 3642,3652 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 3813,3823 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 3654,3664 **** * ql_Diag_Loopback * Issue Reset Link Status mailbox command * * Input: * ha: adapter state pointer. - * findex: FCF index. * bp: buffer pointer. * size: buffer size. * opt: command options. * it_cnt: iteration count. * mr: pointer for mailbox data. --- 3825,3834 ----
*** 3668,3696 **** * * Context: * Kernel context. */ int ! ql_diag_loopback(ql_adapter_state_t *ha, uint16_t findex, caddr_t bp, ! uint32_t size, uint16_t opt, uint32_t it_cnt, ql_mbx_data_t *mr) { int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); if ((rval = ql_setup_mbox_dma_transfer(ha, &mem_desc, bp, size)) != QL_SUCCESS) { EL(ha, "setup_mbox_dma_transfer failed: %x\n", rval); return (rval); } mcp->mb[0] = MBC_DIAGNOSTIC_LOOP_BACK; mcp->mb[1] = opt; ! mcp->mb[2] = findex; mcp->mb[6] = LSW(MSD(mem_desc.cookie.dmac_laddress)); mcp->mb[7] = MSW(MSD(mem_desc.cookie.dmac_laddress)); mcp->mb[10] = LSW(size); mcp->mb[11] = MSW(size); mcp->mb[14] = LSW(LSD(mem_desc.cookie.dmac_laddress)); --- 3838,3866 ---- * * Context: * Kernel context. */ int ! ql_diag_loopback(ql_adapter_state_t *ha, caddr_t bp, uint32_t size, ! uint16_t opt, uint32_t it_cnt, ql_mbx_data_t *mr) { int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); if ((rval = ql_setup_mbox_dma_transfer(ha, &mem_desc, bp, size)) != QL_SUCCESS) { EL(ha, "setup_mbox_dma_transfer failed: %x\n", rval); return (rval); } mcp->mb[0] = MBC_DIAGNOSTIC_LOOP_BACK; mcp->mb[1] = opt; ! mcp->mb[2] = ha->fcoe_fcf_idx; mcp->mb[6] = LSW(MSD(mem_desc.cookie.dmac_laddress)); mcp->mb[7] = MSW(MSD(mem_desc.cookie.dmac_laddress)); mcp->mb[10] = LSW(size); mcp->mb[11] = MSW(size); mcp->mb[14] = LSW(LSD(mem_desc.cookie.dmac_laddress));
*** 3728,3738 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, mb1=%xh\n", rval, mcp->mb[1]); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 3898,3908 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, mb1=%xh\n", rval, mcp->mb[1]); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 3740,3750 **** * ql_diag_echo * Issue Diag echo mailbox command. Valid for qla23xx HBA's. * * Input: * ha: adapter state pointer. - * findex: FCF index. * bp: buffer pointer. * size: buffer size. * opt: command options. * mr: pointer to mailbox status. * --- 3910,3919 ----
*** 3753,3781 **** * * Context: * Kernel context. */ int ! ql_diag_echo(ql_adapter_state_t *ha, uint16_t findex, caddr_t bp, ! uint32_t size, uint16_t opt, ql_mbx_data_t *mr) { int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); if ((rval = ql_setup_mbox_dma_transfer(ha, &mem_desc, bp, size)) != QL_SUCCESS) { EL(ha, "setup_mbox_dma_transfer failed: %x\n", rval); return (rval); } mcp->mb[0] = MBC_ECHO; mcp->mb[1] = opt; ! mcp->mb[2] = findex; mcp->mb[6] = LSW(MSD(mem_desc.cookie.dmac_laddress)); mcp->mb[7] = MSW(MSD(mem_desc.cookie.dmac_laddress)); mcp->mb[10] = LSW(size); mcp->mb[14] = LSW(LSD(mem_desc.cookie.dmac_laddress)); mcp->mb[15] = MSW(LSD(mem_desc.cookie.dmac_laddress)); --- 3922,3950 ---- * * Context: * Kernel context. */ int ! ql_diag_echo(ql_adapter_state_t *ha, caddr_t bp, uint32_t size, uint16_t opt, ! ql_mbx_data_t *mr) { int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); if ((rval = ql_setup_mbox_dma_transfer(ha, &mem_desc, bp, size)) != QL_SUCCESS) { EL(ha, "setup_mbox_dma_transfer failed: %x\n", rval); return (rval); } mcp->mb[0] = MBC_ECHO; mcp->mb[1] = opt; ! mcp->mb[2] = ha->fcoe_fcf_idx; mcp->mb[6] = LSW(MSD(mem_desc.cookie.dmac_laddress)); mcp->mb[7] = MSW(MSD(mem_desc.cookie.dmac_laddress)); mcp->mb[10] = LSW(size); mcp->mb[14] = LSW(LSD(mem_desc.cookie.dmac_laddress)); mcp->mb[15] = MSW(LSD(mem_desc.cookie.dmac_laddress));
*** 3802,3818 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, mb1=%xh\n", rval, mcp->mb[1]); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } /* * ql_serdes_param * Set/Get serdes transmit parameters mailbox command. * * Input: * ha: adapter state pointer. --- 3971,4035 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh, mb1=%xh\n", rval, mcp->mb[1]); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); } /* + * ql_diag_beacon + * Enable/Disable beaconing via mailbox command. + * + * Input: + * ha: adapter state pointer. + * mr: pointer to mailbox in/out parameters. + * + * Returns: + * ql local function return status code. + * + * Context: + * Kernel context. + */ + int + ql_diag_beacon(ql_adapter_state_t *ha, int cmd, ql_mbx_data_t *mr) + { + int rval; + mbx_cmd_t mc = {0}; + mbx_cmd_t *mcp = &mc; + + mcp->mb[0] = MBC_SET_LED_CONFIG; + if (cmd == QL_BEACON_ENABLE) { + mcp->mb[7] = 0xE; + } else if (cmd == QL_BEACON_DISABLE) { + mcp->mb[7] = 0xD; + } else { + return (EIO); + } + mcp->out_mb = MBX_7|MBX_0; + mcp->in_mb = MBX_0; + mcp->timeout = MAILBOX_TOV; + + rval = ql_mailbox_command(ha, mcp); + + /* Return mailbox data. */ + if (mr != NULL) { + mr->mb[0] = mcp->mb[0]; + } + + if (rval != QL_SUCCESS) { + EL(ha, "failed=%xh\n", rval); + } + + return (rval); + } + + + /* * ql_serdes_param * Set/Get serdes transmit parameters mailbox command. * * Input: * ha: adapter state pointer.
*** 3829,3839 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_SERDES_TRANSMIT_PARAMETERS; mcp->mb[1] = mr->mb[1]; mcp->mb[2] = mr->mb[2]; mcp->mb[3] = mr->mb[3]; --- 4046,4056 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_SERDES_TRANSMIT_PARAMETERS; mcp->mb[1] = mr->mb[1]; mcp->mb[2] = mr->mb[2]; mcp->mb[3] = mr->mb[3];
*** 3842,3863 **** mcp->in_mb = MBX_4|MBX_3|MBX_2|MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); /* Return mailbox data. */ - if (mr != NULL) { mr->mb[0] = mcp->mb[0]; mr->mb[2] = mcp->mb[2]; mr->mb[3] = mcp->mb[3]; mr->mb[4] = mcp->mb[4]; - } if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 4059,4078 ---- mcp->in_mb = MBX_4|MBX_3|MBX_2|MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); /* Return mailbox data. */ mr->mb[0] = mcp->mb[0]; mr->mb[2] = mcp->mb[2]; mr->mb[3] = mcp->mb[3]; mr->mb[4] = mcp->mb[4]; if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 3880,3899 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_GET_TIMEOUT_PARAMETERS; ! mcp->out_mb = MBX_0; mcp->in_mb = MBX_3|MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); if (rval == QL_SUCCESS) { /* Get 2 * R_A_TOV in seconds */ ! if (CFG_IST(ha, CFG_CTRL_2200) || mcp->mb[3] == 0) { *tov = R_A_TOV_DEFAULT; } else { *tov = (uint16_t)(mcp->mb[3] / 10); if (mcp->mb[3] % 10 != 0) { *tov = (uint16_t)(*tov + 1); --- 4095,4115 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_GET_TIMEOUT_PARAMETERS; ! mcp->mb[1] = ha->fcoe_fcf_idx; ! mcp->out_mb = MBX_1|MBX_0; mcp->in_mb = MBX_3|MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); if (rval == QL_SUCCESS) { /* Get 2 * R_A_TOV in seconds */ ! if (CFG_IST(ha, CFG_CTRL_22XX) || mcp->mb[3] == 0) { *tov = R_A_TOV_DEFAULT; } else { *tov = (uint16_t)(mcp->mb[3] / 10); if (mcp->mb[3] % 10 != 0) { *tov = (uint16_t)(*tov + 1);
*** 3910,3920 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 4126,4136 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 3936,3946 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_STOP_FIRMWARE; mcp->out_mb = MBX_1|MBX_0; mcp->in_mb = MBX_0; mcp->timeout = 2; --- 4152,4162 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_STOP_FIRMWARE; mcp->out_mb = MBX_1|MBX_0; mcp->in_mb = MBX_0; mcp->timeout = 2;
*** 3948,3958 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 4164,4174 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 3962,3972 **** * * Input: * ha: adapter state pointer. * mem: pointer to dma memory object for command. * dev: Device address (A0h or A2h). ! * addr: Data address on SFP EEPROM (0–255). * * Returns: * ql local function return status code. * * Context: --- 4178,4188 ---- * * Input: * ha: adapter state pointer. * mem: pointer to dma memory object for command. * dev: Device address (A0h or A2h). ! * addr: Data address on SFP EEPROM (0-255). * * Returns: * ql local function return status code. * * Context:
*** 3978,3988 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_READ_SFP; mcp->mb[1] = dev; mcp->mb[2] = MSW(mem->cookies->dmac_address); mcp->mb[3] = LSW(mem->cookies->dmac_address); --- 4194,4204 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_READ_SFP; mcp->mb[1] = dev; mcp->mb[2] = MSW(mem->cookies->dmac_address); mcp->mb[3] = LSW(mem->cookies->dmac_address);
*** 4000,4010 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 4216,4226 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 4032,4042 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_PORT_PARAM; mcp->mb[1] = loop_id; mcp->mb[2] = (uint16_t)option; mcp->out_mb = MBX_0|MBX_1|MBX_2; --- 4248,4258 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_PORT_PARAM; mcp->mb[1] = loop_id; mcp->mb[2] = (uint16_t)option; mcp->out_mb = MBX_0|MBX_1|MBX_2;
*** 4057,4067 **** } else { if (option == 0) { *idma_rate = mcp->mb[3]; } ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 4273,4283 ---- } else { if (option == 0) { *idma_rate = mcp->mb[3]; } ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 4083,4093 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_XMIT_PARM; mcp->mb[1] = BIT_1; mcp->out_mb = MBX_1|MBX_0; mcp->in_mb = MBX_0; --- 4299,4309 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_XMIT_PARM; mcp->mb[1] = BIT_1; mcp->out_mb = MBX_1|MBX_0; mcp->in_mb = MBX_0;
*** 4096,4106 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } /* --- 4312,4322 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); } /*
*** 4109,4135 **** * * Input: * ha: adapter state pointer. * mem: pointer to dma memory object for command. * opt: options and opcode. * * Returns: * ql local function return status code. * * Context: * Kernel context. */ int ! ql_fw_etrace(ql_adapter_state_t *ha, dma_mem_t *mem, uint16_t opt) { int rval = QL_SUCCESS; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; uint16_t op_code; uint64_t time; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); /* currently no supported options */ op_code = (uint16_t)(opt & ~0xFF00); mcp->mb[0] = MBC_TRACE_CONTROL; --- 4325,4353 ---- * * Input: * ha: adapter state pointer. * mem: pointer to dma memory object for command. * opt: options and opcode. + * mr: pointer to mailbox in/out parameters. * * Returns: * ql local function return status code. * * Context: * Kernel context. */ int ! ql_fw_etrace(ql_adapter_state_t *ha, dma_mem_t *mem, uint16_t opt, ! ql_mbx_data_t *mr) { int rval = QL_SUCCESS; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; uint16_t op_code; uint64_t time; ! QL_PRINT_3(ha, "started\n"); /* currently no supported options */ op_code = (uint16_t)(opt & ~0xFF00); mcp->mb[0] = MBC_TRACE_CONTROL;
*** 4192,4206 **** if (rval == QL_SUCCESS) { rval = ql_mailbox_command(ha, mcp); } if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 4410,4438 ---- if (rval == QL_SUCCESS) { rval = ql_mailbox_command(ha, mcp); } + /* Return mailbox data. */ + if (mr != NULL) { + mr->mb[0] = mcp->mb[0]; + mr->mb[1] = mcp->mb[1]; + mr->mb[2] = mcp->mb[2]; + mr->mb[3] = mcp->mb[3]; + mr->mb[4] = mcp->mb[4]; + mr->mb[5] = mcp->mb[5]; + mr->mb[6] = mcp->mb[6]; + mr->mb[7] = mcp->mb[7]; + mr->mb[8] = mcp->mb[8]; + mr->mb[9] = mcp->mb[9]; + } + if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 4224,4234 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_RESET_MENLO; mcp->mb[1] = opt; mcp->out_mb = MBX_1|MBX_0; mcp->in_mb = MBX_1|MBX_0; --- 4456,4466 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_RESET_MENLO; mcp->mb[1] = opt; mcp->out_mb = MBX_1|MBX_0; mcp->in_mb = MBX_1|MBX_0;
*** 4243,4253 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 4475,4485 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 4270,4280 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_RESTART_MPI; mcp->out_mb = MBX_0; mcp->in_mb = MBX_1|MBX_0; mcp->timeout = MAILBOX_TOV; --- 4502,4512 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_RESTART_MPI; mcp->out_mb = MBX_0; mcp->in_mb = MBX_1|MBX_0; mcp->timeout = MAILBOX_TOV;
*** 4283,4293 **** /* Return mailbox data. */ if (rval != QL_SUCCESS) { EL(ha, "status=%xh, mbx1=%xh\n", rval, mcp->mb[1]); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 4515,4525 ---- /* Return mailbox data. */ if (rval != QL_SUCCESS) { EL(ha, "status=%xh, mbx1=%xh\n", rval, mcp->mb[1]); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 4310,4320 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_IDC_REQUEST; mcp->mb[1] = mr->mb[1]; mcp->mb[2] = mr->mb[2]; mcp->mb[3] = mr->mb[3]; --- 4542,4552 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_IDC_REQUEST; mcp->mb[1] = mr->mb[1]; mcp->mb[2] = mr->mb[2]; mcp->mb[3] = mr->mb[3];
*** 4326,4339 **** mcp->in_mb = MBX_2|MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); if (rval == QL_SUCCESS) { - if (mr != NULL) { mr->mb[2] = mcp->mb[2]; ! } ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } else { EL(ha, "status=%xh, mbx2=%xh\n", rval, mcp->mb[2]); } return (rval); --- 4558,4569 ---- mcp->in_mb = MBX_2|MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); if (rval == QL_SUCCESS) { mr->mb[2] = mcp->mb[2]; ! QL_PRINT_3(ha, "done\n"); } else { EL(ha, "status=%xh, mbx2=%xh\n", rval, mcp->mb[2]); } return (rval);
*** 4357,4367 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_IDC_ACK; mcp->mb[1] = ha->idc_mb[1]; mcp->mb[2] = ha->idc_mb[2]; mcp->mb[3] = ha->idc_mb[3]; --- 4587,4597 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_IDC_ACK; mcp->mb[1] = ha->idc_mb[1]; mcp->mb[2] = ha->idc_mb[2]; mcp->mb[3] = ha->idc_mb[3];
*** 4372,4382 **** mcp->out_mb = MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); return (rval); } /* --- 4602,4612 ---- mcp->out_mb = MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); ! QL_PRINT_3(ha, "done\n"); return (rval); } /*
*** 4383,4418 **** * ql_idc_time_extend * Inter-Driver Communication Time Extend * * Input: * ha: adapter state pointer. - * mr: pointer for mailbox data. * * Returns: * ql local function return status code. * * Context: * Kernel context. */ int ! ql_idc_time_extend(ql_adapter_state_t *ha, ql_mbx_data_t *mr) { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_IDC_TIME_EXTEND; ! mcp->mb[1] = mr->mb[1]; ! mcp->mb[2] = mr->mb[2]; ! mcp->out_mb = MBX_2|MBX_1|MBX_0; mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); return (rval); } /* --- 4613,4652 ---- * ql_idc_time_extend * Inter-Driver Communication Time Extend * * Input: * ha: adapter state pointer. * * Returns: * ql local function return status code. * * Context: * Kernel context. */ int ! ql_idc_time_extend(ql_adapter_state_t *ha) { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_IDC_TIME_EXTEND; ! mcp->mb[1] = ha->idc_mb[1]; ! mcp->mb[2] = ha->idc_mb[2]; ! mcp->mb[3] = ha->idc_mb[3]; ! mcp->mb[4] = ha->idc_mb[4]; ! mcp->mb[5] = ha->idc_mb[5]; ! mcp->mb[6] = ha->idc_mb[6]; ! mcp->mb[7] = ha->idc_mb[7]; ! mcp->out_mb = MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); ! QL_PRINT_3(ha, "done\n"); return (rval); } /*
*** 4433,4451 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_PORT_RESET; mcp->out_mb = MBX_0; mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); return (rval); } /* --- 4667,4685 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_PORT_RESET; mcp->out_mb = MBX_0; mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); ! QL_PRINT_3(ha, "done\n"); return (rval); } /*
*** 4468,4478 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_SET_PORT_CONFIG; mcp->mb[1] = mrp->mb[1]; mcp->mb[2] = mrp->mb[2]; mcp->mb[3] = mrp->mb[3]; --- 4702,4712 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_SET_PORT_CONFIG; mcp->mb[1] = mrp->mb[1]; mcp->mb[2] = mrp->mb[2]; mcp->mb[3] = mrp->mb[3];
*** 4480,4490 **** mcp->out_mb = MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); return (rval); } /* --- 4714,4724 ---- mcp->out_mb = MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; mcp->in_mb = MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); ! QL_PRINT_3(ha, "done\n"); return (rval); } /*
*** 4507,4517 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_GET_PORT_CONFIG; mcp->out_mb = MBX_0; mcp->in_mb = MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; mcp->timeout = MAILBOX_TOV; --- 4741,4751 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_GET_PORT_CONFIG; mcp->out_mb = MBX_0; mcp->in_mb = MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; mcp->timeout = MAILBOX_TOV;
*** 4522,4532 **** mrp->mb[1] = mcp->mb[1]; mrp->mb[2] = mcp->mb[2]; mrp->mb[3] = mcp->mb[3]; mrp->mb[4] = mcp->mb[4]; } ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } else { EL(ha, "status=%xh, mbx1=%xh, mbx2=%xh, mbx3=%xh, mbx4=%xh\n", rval, mcp->mb[1], mcp->mb[2], mcp->mb[3], mcp->mb[4]); } --- 4756,4766 ---- mrp->mb[1] = mcp->mb[1]; mrp->mb[2] = mcp->mb[2]; mrp->mb[3] = mcp->mb[3]; mrp->mb[4] = mcp->mb[4]; } ! QL_PRINT_3(ha, "done\n"); } else { EL(ha, "status=%xh, mbx1=%xh, mbx2=%xh, mbx3=%xh, mbx4=%xh\n", rval, mcp->mb[1], mcp->mb[2], mcp->mb[3], mcp->mb[4]); }
*** 4557,4592 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_FLASH_ACCESS; - if (cmd > 0 && cmd < 4) { - mcp->mb[1] = (uint16_t)(FAC_FORCE_SEMA_LOCK | cmd); - } else { mcp->mb[1] = cmd; - } mcp->mb[2] = LSW(start); mcp->mb[3] = MSW(start); mcp->mb[4] = LSW(end); mcp->mb[5] = MSW(end); mcp->out_mb = MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; ! mcp->in_mb = MBX_2|MBX_1|MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); if (rval != QL_SUCCESS) { ! EL(ha, "status=%xh, mbx1=%xh, mbx2=%xh\n", rval, mcp->mb[1], ! mcp->mb[2]); } else { if (dp != NULL) { *dp = (uint32_t)mcp->mb[1]; } ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 4791,4823 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started, cmd=%xh\n", cmd); mcp->mb[0] = MBC_FLASH_ACCESS; mcp->mb[1] = cmd; mcp->mb[2] = LSW(start); mcp->mb[3] = MSW(start); mcp->mb[4] = LSW(end); mcp->mb[5] = MSW(end); mcp->out_mb = MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; ! mcp->in_mb = MBX_0_THRU_4; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); if (rval != QL_SUCCESS) { ! EL(ha, "cmd=%xh, status=%xh, mbx1=%xh, mbx2=%xh, mbx3=%xh, " ! "mbx4=%xh\n", cmd, rval, mcp->mb[1], mcp->mb[2], ! mcp->mb[3], mcp->mb[4]); } else { if (dp != NULL) { *dp = (uint32_t)mcp->mb[1]; } ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 4611,4621 **** int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); if ((rval = ql_setup_mbox_dma_resources(ha, &mem_desc, (uint32_t)size)) != QL_SUCCESS) { EL(ha, "setup_mbox_dma_resources failed: %xh\n", rval); return (QL_MEMORY_ALLOC_FAILED); --- 4842,4852 ---- int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); if ((rval = ql_setup_mbox_dma_resources(ha, &mem_desc, (uint32_t)size)) != QL_SUCCESS) { EL(ha, "setup_mbox_dma_resources failed: %xh\n", rval); return (QL_MEMORY_ALLOC_FAILED);
*** 4640,4650 **** if (rval != QL_SUCCESS) { EL(ha, "status=%xh, mbx1=%xh, mbx2=%xh\n", rval, mcp->mb[1], mcp->mb[2]); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 4871,4881 ---- if (rval != QL_SUCCESS) { EL(ha, "status=%xh, mbx1=%xh, mbx2=%xh\n", rval, mcp->mb[1], mcp->mb[2]); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 4669,4679 **** int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); if ((rval = ql_setup_mbox_dma_resources(ha, &mem_desc, size)) != QL_SUCCESS) { EL(ha, "failed=%xh\n", QL_MEMORY_ALLOC_FAILED); return (QL_MEMORY_ALLOC_FAILED); --- 4900,4910 ---- int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); if ((rval = ql_setup_mbox_dma_resources(ha, &mem_desc, size)) != QL_SUCCESS) { EL(ha, "failed=%xh\n", QL_MEMORY_ALLOC_FAILED); return (QL_MEMORY_ALLOC_FAILED);
*** 4699,4709 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } /* --- 4930,4940 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); } /*
*** 4729,4739 **** int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); if ((rval = ql_setup_mbox_dma_resources(ha, &mem_desc, fcf_list->buffer_size)) != QL_SUCCESS) { EL(ha, "failed=%xh\n", QL_MEMORY_ALLOC_FAILED); --- 4960,4970 ---- int rval; dma_mem_t mem_desc; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); if ((rval = ql_setup_mbox_dma_resources(ha, &mem_desc, fcf_list->buffer_size)) != QL_SUCCESS) { EL(ha, "failed=%xh\n", QL_MEMORY_ALLOC_FAILED);
*** 4763,4773 **** if (rval != QL_SUCCESS) { EL(ha, "status=%xh, mbx1=%xh, mbx2=%xh\n", rval, mcp->mb[1], mcp->mb[2]); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 4994,5004 ---- if (rval != QL_SUCCESS) { EL(ha, "status=%xh, mbx1=%xh, mbx2=%xh\n", rval, mcp->mb[1], mcp->mb[2]); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 4791,4804 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_GET_RESOURCE_COUNTS; ! mcp->out_mb = MBX_0; mcp->in_mb = MBX_12|MBX_11|MBX_10|MBX_7|MBX_6| MBX_3|MBX_2|MBX_1|MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp); --- 5022,5035 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_GET_RESOURCE_COUNTS; ! mcp->out_mb = MBX_9|MBX_1|MBX_0; mcp->in_mb = MBX_12|MBX_11|MBX_10|MBX_7|MBX_6| MBX_3|MBX_2|MBX_1|MBX_0; mcp->timeout = MAILBOX_TOV; rval = ql_mailbox_command(ha, mcp);
*** 4816,4826 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 5047,5057 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } return (rval); }
*** 4843,4853 **** { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(CE_CONT, "(%d): started\n", ha->instance); mcp->mb[0] = MBC_TOGGLE_INTERRUPT; mcp->mb[1] = opt; mcp->out_mb = MBX_1|MBX_0; mcp->in_mb = MBX_0; --- 5074,5084 ---- { int rval; mbx_cmd_t mc = {0}; mbx_cmd_t *mcp = &mc; ! QL_PRINT_3(ha, "started\n"); mcp->mb[0] = MBC_TOGGLE_INTERRUPT; mcp->mb[1] = opt; mcp->out_mb = MBX_1|MBX_0; mcp->in_mb = MBX_0;
*** 4856,4865 **** if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(CE_CONT, "(%d): done\n", ha->instance); } return (rval); } --- 5087,5704 ---- if (rval != QL_SUCCESS) { EL(ha, "failed=%xh\n", rval); } else { /*EMPTY*/ ! QL_PRINT_3(ha, "done\n"); } + return (rval); + } + + /* + * ql_get_md_template + * Issue request mini-dump template Mailbox command + * + * Input: + * ha: adapter state pointer. + * mem: pointer to dma memory object for command. + * mr: pointer for return mailboxes. + * ofst: template offset. + * opt: request command code. + * GTO_TEMPLATE_SIZE = Request Template Size. + * GTO_TEMPLATE = Request Template. + * + * Returns: + * ql local function return status code. + * + * Context: + * Kernel context. + */ + int + ql_get_md_template(ql_adapter_state_t *ha, dma_mem_t *mem, ql_mbx_data_t *mr, + uint32_t ofst, uint16_t opt) + { + int rval; + mbx_cmd_t mc = {0}; + mbx_cmd_t *mcp = &mc; + + QL_PRINT_3(ha, "started\n"); + + mcp->mb[0] = MBC_GET_MD_TEMPLATE; + mcp->mb[2] = opt; + if (mem != NULL) { + mcp->mb[4] = LSW(mem->cookies->dmac_address); + mcp->mb[5] = MSW(mem->cookies->dmac_address); + mcp->mb[6] = LSW(mem->cookies->dmac_notused); + mcp->mb[7] = MSW(mem->cookies->dmac_notused); + mcp->mb[8] = LSW(mem->size); + mcp->mb[9] = MSW(mem->size); + } + if (ofst != 0) { + mcp->mb[10] = LSW(ofst); + mcp->mb[11] = MSW(ofst); + } + mcp->out_mb = MBX_11|MBX_10|MBX_9|MBX_8|MBX_7|MBX_6|MBX_5|MBX_4|MBX_3| + MBX_2|MBX_1|MBX_0; + mcp->in_mb = MBX_15|MBX_14|MBX_13|MBX_12|MBX_11|MBX_10|MBX_9|MBX_8| + MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; + mcp->timeout = MAILBOX_TOV; + rval = ql_mailbox_command(ha, mcp); + + /* Return mailbox data. */ + if (mr != NULL) { + mr->mb[0] = mcp->mb[0]; + mr->mb[1] = mcp->mb[1]; + mr->mb[2] = mcp->mb[2]; + mr->mb[3] = mcp->mb[3]; + mr->mb[4] = mcp->mb[4]; + mr->mb[5] = mcp->mb[5]; + mr->mb[6] = mcp->mb[6]; + mr->mb[7] = mcp->mb[7]; + mr->mb[8] = mcp->mb[8]; + mr->mb[9] = mcp->mb[9]; + mr->mb[10] = mcp->mb[10]; + mr->mb[11] = mcp->mb[11]; + mr->mb[12] = mcp->mb[12]; + mr->mb[13] = mcp->mb[13]; + mr->mb[12] = mcp->mb[14]; + mr->mb[13] = mcp->mb[15]; + } + + if (rval != QL_SUCCESS) { + EL(ha, "failed=%xh\n", rval); + } else { + /*EMPTY*/ + QL_PRINT_3(ha, "done\n"); + } + return (rval); + } + + /* + * ql_init_req_q + * Initialize request queue. + * + * Input: + * ha: adapter state pointer. + * req_q: request queue structure pointer. + * opt: Initialize Multiple Queue mailbox command options. + * + * Returns: + * ql driver local function return status codes + * + * Context: + * Kernel context. + */ + static int + ql_init_req_q(ql_adapter_state_t *ha, ql_request_q_t *req_q, uint16_t opt) + { + int rval; + mbx_cmd_t mc = {0}; + mbx_cmd_t *mcp = &mc; + + QL_PRINT_3(ha, "started, req_q_number=%d\n", req_q->req_q_number); + + if (!(opt & IMO_QOS_UPDATE)) { + req_q->req_ring_ptr = req_q->req_ring.bp; + req_q->req_ring_index = 0; + req_q->req_q_cnt = (uint16_t)(req_q->req_entry_cnt - 1); + WR32_MBAR_REG(ha, req_q->mbar_req_in, 0); + if (req_q->req_out_shadow_ptr) { + *req_q->req_out_shadow_ptr = 0; + } + } + + mcp->mb[0] = MBC_INIT_MULTIPLE_QUEUE; + mcp->mb[1] = (uint16_t)(opt | IMO_QUEUE_NOT_ASSOCIATED); + mcp->mb[2] = MSW(LSD(req_q->req_ring.cookie.dmac_laddress)); + mcp->mb[3] = LSW(LSD(req_q->req_ring.cookie.dmac_laddress)); + mcp->mb[4] = req_q->req_q_number; + mcp->mb[5] = req_q->req_entry_cnt; + mcp->mb[6] = MSW(MSD(req_q->req_ring.cookie.dmac_laddress)); + mcp->mb[7] = LSW(MSD(req_q->req_ring.cookie.dmac_laddress)); + mcp->mb[11] = ha->vp_index; + mcp->mb[12] = 0; + mcp->mb[14] = 1; + mcp->out_mb = MBX_0_THRU_14; + mcp->in_mb = MBX_0_THRU_1; + mcp->timeout = MAILBOX_TOV; + rval = ql_mailbox_command(ha, mcp); + + if (rval != QL_SUCCESS) { + EL(ha, "status=%xh, mbx1=%xh\n", rval, mcp->mb[1]); + } else { + /*EMPTY*/ + QL_PRINT_3(ha, "done\n"); + } + return (rval); + } + + /* + * ql_init_rsp_q + * Initialize response queue. + * + * Input: + * ha: adapter state pointer. + * rsp_q: response queue structure pointer. + * opt: Initialize Multiple Queue mailbox command options. + * + * Returns: + * ql driver local function return status codes + * + * Context: + * Kernel context. + */ + static int + ql_init_rsp_q(ql_adapter_state_t *ha, ql_response_q_t *rsp_q, uint16_t opt) + { + int rval; + mbx_cmd_t mc = {0}; + mbx_cmd_t *mcp = &mc; + + QL_PRINT_3(ha, "started, rsp_q_number=%d\n", rsp_q->rsp_q_number); + + if (!(opt & IMO_DELETE_Q)) { + rsp_q->rsp_ring_ptr = rsp_q->rsp_ring.bp; + rsp_q->rsp_ring_index = 0; + WR32_MBAR_REG(ha, rsp_q->mbar_rsp_out, 0); + if (rsp_q->rsp_in_shadow_ptr) { + *rsp_q->rsp_in_shadow_ptr = 0; + } + } + + mcp->mb[0] = MBC_INIT_MULTIPLE_QUEUE; + mcp->mb[1] = (uint16_t)(opt | IMO_QUEUE_NOT_ASSOCIATED | + IMO_RESPONSE_Q_SERVICE); + mcp->mb[2] = MSW(LSD(rsp_q->rsp_ring.cookie.dmac_laddress)); + mcp->mb[3] = LSW(LSD(rsp_q->rsp_ring.cookie.dmac_laddress)); + mcp->mb[4] = rsp_q->rsp_q_number; + mcp->mb[5] = rsp_q->rsp_entry_cnt; + mcp->mb[6] = MSW(MSD(rsp_q->rsp_ring.cookie.dmac_laddress)); + mcp->mb[7] = LSW(MSD(rsp_q->rsp_ring.cookie.dmac_laddress)); + mcp->mb[14] = rsp_q->msi_x_vector; + mcp->out_mb = MBX_0_THRU_14; + mcp->in_mb = MBX_0_THRU_1; + mcp->timeout = MAILBOX_TOV; + rval = ql_mailbox_command(ha, mcp); + + if (rval != QL_SUCCESS) { + EL(ha, "status=%xh, mbx1=%xh\n", rval, mcp->mb[1]); + } else { + /*EMPTY*/ + QL_PRINT_3(ha, "done\n"); + } + return (rval); + } + + /* + * ql_load_flash_image + * Load Flash Firmware. + * + * Input: + * ha: adapter state pointer. + * + * Returns: + * ql local function return status code. + * + * Context: + * Kernel context. + */ + int + ql_load_flash_image(ql_adapter_state_t *ha) + { + int rval; + mbx_cmd_t mc = {0}; + mbx_cmd_t *mcp = &mc; + + QL_PRINT_3(ha, "started\n"); + + mcp->mb[0] = MBC_LOAD_FLASH_IMAGE; + mcp->out_mb = MBX_0; + mcp->in_mb = MBX_2|MBX_1|MBX_0; + mcp->timeout = MAILBOX_TOV; + rval = ql_mailbox_command(ha, mcp); + + if (rval != QL_SUCCESS) { + EL(ha, "failed, rval=%xh, mbx1=%xh, mbx2=%xh\n", + rval, mcp->mb[1], mcp->mb[2]); + } else { + /*EMPTY*/ + QL_PRINT_3(ha, "done\n"); + } + return (rval); + } + + /* + * ql_set_led_config + * Set LED Configuration. + * + * Input: + * ha: adapter state pointer. + * mr: pointer for mailbox data. + * + * Returns: + * ql local function return status code. + * + * Context: + * Kernel context. + */ + int + ql_set_led_config(ql_adapter_state_t *ha, ql_mbx_data_t *mr) + { + int rval; + mbx_cmd_t mc = {0}; + mbx_cmd_t *mcp = &mc; + + QL_PRINT_3(ha, "started\n"); + + mcp->mb[0] = MBC_SET_LED_CONFIG; + mcp->mb[1] = mr->mb[1]; + mcp->mb[2] = mr->mb[2]; + mcp->mb[3] = mr->mb[3]; + mcp->mb[4] = mr->mb[4]; + mcp->mb[5] = mr->mb[5]; + mcp->mb[6] = mr->mb[6]; + mcp->out_mb = MBX_0_THRU_6; + mcp->in_mb = MBX_0; + mcp->timeout = MAILBOX_TOV; + rval = ql_mailbox_command(ha, mcp); + + if (rval != QL_SUCCESS) { + EL(ha, "failed=%xh\n", rval); + } else { + /*EMPTY*/ + QL_PRINT_3(ha, "done\n"); + } + + return (rval); + } + /* + * ql_get_led_config + * Get LED Configuration. + * + * Input: + * ha: adapter state pointer. + * mr: pointer for mailbox data. + * + * Returns: + * ql local function return status code. + * + * Context: + * Kernel context. + */ + int + ql_get_led_config(ql_adapter_state_t *ha, ql_mbx_data_t *mr) + { + int rval; + mbx_cmd_t mc = {0}; + mbx_cmd_t *mcp = &mc; + + QL_PRINT_3(ha, "started\n"); + + mcp->mb[0] = MBC_GET_LED_CONFIG; + mcp->out_mb = MBX_0; + mcp->in_mb = MBX_0_THRU_6; + mcp->timeout = MAILBOX_TOV; + rval = ql_mailbox_command(ha, mcp); + + /* Return config data. */ + if (mr != NULL) { + mr->mb[1] = mcp->mb[1]; + mr->mb[2] = mcp->mb[2]; + mr->mb[3] = mcp->mb[3]; + mr->mb[4] = mcp->mb[4]; + mr->mb[5] = mcp->mb[5]; + mr->mb[6] = mcp->mb[6]; + } + + if (rval != QL_SUCCESS) { + EL(ha, "failed=%xh\n", rval); + } else { + /*EMPTY*/ + QL_PRINT_3(ha, "done\n"); + } + + return (rval); + } + + /* + * ql_led_config + * Set/Get Fibre Channel LED Configuration command. + * + * Input: + * ha: adapter state pointer. + * opt: Options. + * led0: LED 0 configuration. + * led1: LED 1 configuration. + * led2: LED 2 configuration. + * mr: pointer for mailbox data. + * + * Returns: + * qlc local function return status code. + * + * Context: + * Kernel context. + */ + int + ql_led_config(ql_adapter_state_t *ha, ql_mbx_data_t *mr) + { + int rval = QL_SUCCESS; + mbx_cmd_t mc = {0}; + mbx_cmd_t *mcp = &mc; + + QL_PRINT_3(ha, "started\n"); + + mcp->mb[0] = MBC_FC_LED_CONFIG; + mcp->mb[1] = mr->mb[1]; + mcp->mb[2] = mr->mb[2]; + mcp->mb[3] = mr->mb[3]; + mcp->mb[4] = mr->mb[4]; + mcp->out_mb = MBX_0_THRU_4; + mcp->in_mb = MBX_0_THRU_4; + mcp->timeout = MAILBOX_TOV; + rval = ql_mailbox_command(ha, mcp); + + /* Return mailbox data. */ + mr->mb[0] = mcp->mb[0]; + mr->mb[1] = mcp->mb[1]; + mr->mb[2] = mcp->mb[2]; + mr->mb[3] = mcp->mb[3]; + mr->mb[4] = mcp->mb[4]; + + if (rval != QL_SUCCESS) { + EL(ha, "failed, rval=%xh, mbx1=%xh\n", rval, mcp->mb[1]); + } else { + /*EMPTY*/ + QL_PRINT_3(ha, "done\n"); + } + return (rval); + } + + /* + * ql_write_remote_reg + * Writes a register within another function. + * + * Input: + * ha: adapter state pointer. + * addr: address. + * data: data. + * + * Returns: + * ql local function return status code. + * + * Context: + * Kernel context. + */ + int + ql_write_remote_reg(ql_adapter_state_t *ha, uint32_t addr, uint32_t data) + { + int rval; + mbx_cmd_t mc = {0}; + mbx_cmd_t *mcp = &mc; + + QL_PRINT_10(ha, "started, addr=%xh, data=%xh\n", addr, data); + + mcp->mb[0] = MBC_WRITE_REMOTE_REG; + mcp->mb[1] = LSW(addr); + mcp->mb[2] = MSW(addr); + mcp->mb[3] = LSW(data); + mcp->mb[4] = MSW(data); + mcp->out_mb = MBX_4|MBX_3|MBX_2|MBX_1|MBX_0; + mcp->in_mb = MBX_1|MBX_0; + mcp->timeout = MAILBOX_TOV; + rval = ql_mailbox_command(ha, mcp); + + if (rval != QL_SUCCESS) { + EL(ha, "failed=%xh, mbx1=%xh, addr=%xh, data=%xh\n", rval, + mcp->mb[1], addr, data); + } else { + /*EMPTY*/ + QL_PRINT_10(ha, "done\n"); + } + return (rval); + } + + /* + * ql_read_remote_reg + * Read a register within another function. + * + * Input: + * ha: adapter state pointer. + * addr: address. + * data: data pointer. + * + * Returns: + * qlc local function return status code. + * + * Context: + * Kernel context. + */ + int + ql_read_remote_reg(ql_adapter_state_t *ha, uint32_t addr, uint32_t *dp) + { + int rval; + mbx_cmd_t mc = {0}; + mbx_cmd_t *mcp = &mc; + + QL_PRINT_10(ha, "started, addr=%xh\n", addr); + + mcp->mb[0] = MBC_READ_REMOTE_REG; + mcp->mb[1] = LSW(addr); + mcp->mb[2] = MSW(addr); + mcp->out_mb = MBX_2|MBX_1|MBX_0; + mcp->in_mb = MBX_4|MBX_3|MBX_1|MBX_0; + mcp->timeout = MAILBOX_TOV; + rval = ql_mailbox_command(ha, mcp); + + if (rval != QL_SUCCESS) { + EL(ha, "failed=%xh, mbx1=%xh, addr=%xh\n", rval, mcp->mb[1], + addr); + } else { + *dp = SHORT_TO_LONG(mcp->mb[3], mcp->mb[4]); + QL_PRINT_10(ha, "done, addr=%xh, data=%xh\n", addr, *dp); + } + return (rval); + } + + /* + * ql_get_temp + * Issue get temperature mailbox command. + * + * Input: + * ha: adapter state pointer. + * mr: pointer for mailbox data. + * + * Returns: + * ql local function return status code. + * + * Context: + * Kernel context. + */ + int + ql_get_temp(ql_adapter_state_t *ha, ql_mbx_data_t *mr) + { + int rval; + mbx_cmd_t mc = {0}; + mbx_cmd_t *mcp = &mc; + + QL_PRINT_3(ha, "started\n"); + + mcp->mb[0] = MBC_GET_PARAMETERS; + mcp->mb[1] = READ_ASIC_TEMP << 8; + mcp->out_mb = MBX_0_THRU_1; + mcp->in_mb = MBX_0_THRU_1; + mcp->timeout = MAILBOX_TOV; + rval = ql_mailbox_command(ha, mcp); + + /* Return config data. */ + if (mr != NULL) { + mr->mb[1] = mcp->mb[1]; + } + + if (rval != QL_SUCCESS) { + EL(ha, "failed, rval=%xh, mbx1=%xh\n", rval, mcp->mb[1]); + } else { + /*EMPTY*/ + QL_PRINT_3(ha, "done\n"); + } + return (rval); + } + + /* + * ql_write_serdes + * Issue write FC serdes register mailbox command. + * + * Input: + * ha: adapter state pointer. + * mr: pointer for mailbox data. + * + * Returns: + * ql local function return status code. + * + * Context: + * Kernel context. + */ + int + ql_write_serdes(ql_adapter_state_t *ha, ql_mbx_data_t *mr) + { + int rval; + mbx_cmd_t mc = {0}; + mbx_cmd_t *mcp = &mc; + + QL_PRINT_3(ha, "started\n"); + + mcp->mb[0] = MBC_WRITE_SERDES_REG; + mcp->mb[1] = mr->mb[1]; + mcp->mb[2] = mr->mb[2]; + mcp->mb[3] = mr->mb[3]; + mcp->mb[4] = mr->mb[4]; + mcp->mb[5] = mr->mb[5]; + mcp->mb[6] = mr->mb[6]; + mcp->out_mb = MBX_0_THRU_6; + mcp->in_mb = MBX_0; + mcp->timeout = MAILBOX_TOV; + rval = ql_mailbox_command(ha, mcp); + + if (rval != QL_SUCCESS) { + EL(ha, "failed, rval=%xh\n", rval); + } else { + /*EMPTY*/ + QL_PRINT_3(ha, "done\n"); + } + + return (rval); + } + + /* + * ql_read_serdes + * Issue read FC serdes register mailbox command. + * + * Input: + * ha: adapter state pointer. + * mr: pointer for mailbox data. + * + * Returns: + * ql local function return status code. + * + * Context: + * Kernel context. + */ + int + ql_read_serdes(ql_adapter_state_t *ha, ql_mbx_data_t *mr) + { + int rval; + mbx_cmd_t mc = {0}; + mbx_cmd_t *mcp = &mc; + + QL_PRINT_3(ha, "started\n"); + + mcp->mb[0] = MBC_READ_SERDES_REG; + mcp->mb[1] = mr->mb[1]; + mcp->mb[2] = mr->mb[2]; + mcp->mb[3] = mr->mb[3]; + mcp->mb[4] = mr->mb[4]; + mcp->mb[5] = mr->mb[5]; + mcp->mb[6] = mr->mb[6]; + mcp->out_mb = MBX_0_THRU_6; + mcp->in_mb = MBX_0_THRU_6; + mcp->timeout = MAILBOX_TOV; + rval = ql_mailbox_command(ha, mcp); + + /* Return mailbox data. */ + mr->mb[0] = mcp->mb[0]; + mr->mb[1] = mcp->mb[1]; + mr->mb[2] = mcp->mb[2]; + mr->mb[3] = mcp->mb[3]; + mr->mb[4] = mcp->mb[4]; + mr->mb[4] = mcp->mb[5]; + mr->mb[4] = mcp->mb[6]; + + if (rval != QL_SUCCESS) { + EL(ha, "failed, rval=%xh", rval); + } else { + /*EMPTY*/ + QL_PRINT_3(ha, "done\n"); + } + return (rval); }