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);
}