Lines Matching refs:mcp

92  *	mcp = driver internal mbx struct pointer.
106 qla2x00_mailbox_command(scsi_qla_host_t *vha, mbx_cmd_t *mcp)
161 mcp->mb[0] = MBS_LINK_DOWN_ERROR;
172 !is_rom_cmd(mcp->mb[0])) {
175 mcp->mb[0]);
185 if (!wait_for_completion_timeout(&ha->mbx_cmd_comp, mcp->tov * HZ)) {
189 mcp->mb[0]);
201 ha->mcp = mcp;
204 "Prepare to issue mbox cmd=0x%x.\n", mcp->mb[0]);
224 iptr = mcp->mb;
225 command = mcp->mb[0];
226 mboxes = mcp->out_mb;
273 mcp->tov * HZ)) {
325 wait_time = jiffies + mcp->tov * HZ; /* wait at most tov secs */
351 (uint)((jiffies - (wait_time - (mcp->tov * HZ)))/HZ));
372 mcp->mb[0] = MBS_LINK_DOWN_ERROR;
373 ha->mcp = NULL;
388 iptr2 = mcp->mb;
390 mboxes = mcp->in_mb;
460 if (mcp->mb[0] != MBC_GEN_SYSTEM_ERROR)
470 ha->mcp = NULL;
481 mcp->mb[0] != MBC_GEN_SYSTEM_ERROR) {
482 if (!io_lock_on || (mcp->flags & IOCTL_CMD) ||
503 "abort.\n", command, mcp->mb[0],
528 command, mcp->mb[0]);
554 mcp->mb[0]);
560 mboxes = mcp->in_mb;
564 printk(" mb[%u]=%x", i, mcp->mb[i]);
596 mbx_cmd_t *mcp = &mc;
602 mcp->mb[0] = MBC_LOAD_RISC_RAM_EXTENDED;
603 mcp->mb[8] = MSW(risc_addr);
604 mcp->out_mb = MBX_8|MBX_0;
606 mcp->mb[0] = MBC_LOAD_RISC_RAM;
607 mcp->out_mb = MBX_0;
609 mcp->mb[1] = LSW(risc_addr);
610 mcp->mb[2] = MSW(req_dma);
611 mcp->mb[3] = LSW(req_dma);
612 mcp->mb[6] = MSW(MSD(req_dma));
613 mcp->mb[7] = LSW(MSD(req_dma));
614 mcp->out_mb |= MBX_7|MBX_6|MBX_3|MBX_2|MBX_1;
616 mcp->mb[4] = MSW(risc_code_size);
617 mcp->mb[5] = LSW(risc_code_size);
618 mcp->out_mb |= MBX_5|MBX_4;
620 mcp->mb[4] = LSW(risc_code_size);
621 mcp->out_mb |= MBX_4;
624 mcp->in_mb = MBX_1|MBX_0;
625 mcp->tov = MBX_TOV_SECONDS;
626 mcp->flags = 0;
627 rval = qla2x00_mailbox_command(vha, mcp);
632 rval, mcp->mb[0], mcp->mb[1]);
664 mbx_cmd_t *mcp = &mc;
673 mcp->mb[0] = MBC_EXECUTE_FIRMWARE;
674 mcp->out_mb = MBX_0;
675 mcp->in_mb = MBX_0;
677 mcp->mb[1] = MSW(risc_addr);
678 mcp->mb[2] = LSW(risc_addr);
679 mcp->mb[3] = 0;
680 mcp->mb[4] = 0;
681 mcp->mb[11] = 0;
685 mcp->mb[4] = BIT_0;
687 mcp->mb[4] |=
692 mcp->mb[4] |= NVME_ENABLE_FLAG;
699 mcp->mb[4] |= BIT_4;
700 mcp->mb[11] |= nv->min_supported_speed & 0xF;
701 mcp->out_mb |= MBX_11;
702 mcp->in_mb |= BIT_5;
708 mcp->mb[11] |= BIT_4;
712 mcp->mb[4] |= ENABLE_EXTENDED_LOGIN;
715 mcp->mb[4] |= ENABLE_EXCHANGE_OFFLD;
718 mcp->mb[11] |= EXE_FW_FORCE_SEMAPHORE;
720 mcp->out_mb |= MBX_4 | MBX_3 | MBX_2 | MBX_1 | MBX_11;
721 mcp->in_mb |= MBX_3 | MBX_2 | MBX_1;
723 mcp->mb[1] = LSW(risc_addr);
724 mcp->out_mb |= MBX_1;
726 mcp->mb[2] = 0;
727 mcp->out_mb |= MBX_2;
731 mcp->tov = MBX_TOV_SECONDS;
732 mcp->flags = 0;
733 rval = qla2x00_mailbox_command(vha, mcp);
737 mcp->mb[1] == 0x27 && retry) {
746 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
753 ha->fw_ability_mask = mcp->mb[3] << 16 | mcp->mb[2];
756 ql_dbg(ql_dbg_mbx, vha, 0x1027, "exchanges=%x.\n", mcp->mb[1]);
758 ha->max_supported_speed = mcp->mb[2] & (BIT_0|BIT_1);
764 ha->min_supported_speed = mcp->mb[5] &
805 mbx_cmd_t *mcp = &mc;
810 memset(mcp->mb, 0 , sizeof(mcp->mb));
811 mcp->mb[0] = MBC_GET_MEM_OFFLOAD_CNTRL_STAT;
812 mcp->mb[1] = FETCH_XLOGINS_STAT;
813 mcp->out_mb = MBX_1|MBX_0;
814 mcp->in_mb = MBX_10|MBX_4|MBX_0;
815 mcp->tov = MBX_TOV_SECONDS;
816 mcp->flags = 0;
818 rval = qla2x00_mailbox_command(vha, mcp);
822 *buf_sz = mcp->mb[4];
823 *ex_logins_cnt = mcp->mb[10];
827 mcp->mb[4], mcp->mb[10]);
861 mbx_cmd_t *mcp = &mc;
867 memset(mcp->mb, 0 , sizeof(mcp->mb));
868 mcp->mb[0] = MBC_GET_MEM_OFFLOAD_CNTRL_STAT;
869 mcp->mb[1] = CONFIG_XLOGINS_MEM;
870 mcp->mb[2] = MSW(phys_addr);
871 mcp->mb[3] = LSW(phys_addr);
872 mcp->mb[6] = MSW(MSD(phys_addr));
873 mcp->mb[7] = LSW(MSD(phys_addr));
874 mcp->mb[8] = MSW(ha->exlogin_size);
875 mcp->mb[9] = LSW(ha->exlogin_size);
876 mcp->out_mb = MBX_9|MBX_8|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
877 mcp->in_mb = MBX_11|MBX_0;
878 mcp->tov = MBX_TOV_SECONDS;
879 mcp->flags = 0;
880 rval = qla2x00_mailbox_command(vha, mcp);
884 rval, mcp->mb[0], mcp->mb[11]);
915 mbx_cmd_t *mcp = &mc;
920 memset(mcp->mb, 0 , sizeof(mcp->mb));
921 mcp->mb[0] = MBC_GET_MEM_OFFLOAD_CNTRL_STAT;
922 mcp->mb[1] = FETCH_XCHOFFLD_STAT;
923 mcp->out_mb = MBX_1|MBX_0;
924 mcp->in_mb = MBX_10|MBX_4|MBX_0;
925 mcp->tov = MBX_TOV_SECONDS;
926 mcp->flags = 0;
928 rval = qla2x00_mailbox_command(vha, mcp);
932 *buf_sz = mcp->mb[4];
933 *ex_logins_cnt = mcp->mb[10];
937 mcp->mb[4], mcp->mb[10]);
971 mbx_cmd_t *mcp = &mc;
977 memset(mcp->mb, 0 , sizeof(mcp->mb));
978 mcp->mb[0] = MBC_GET_MEM_OFFLOAD_CNTRL_STAT;
979 mcp->mb[1] = CONFIG_XCHOFFLD_MEM;
980 mcp->mb[2] = MSW(ha->exchoffld_buf_dma);
981 mcp->mb[3] = LSW(ha->exchoffld_buf_dma);
982 mcp->mb[6] = MSW(MSD(ha->exchoffld_buf_dma));
983 mcp->mb[7] = LSW(MSD(ha->exchoffld_buf_dma));
984 mcp->mb[8] = MSW(ha->exchoffld_size);
985 mcp->mb[9] = LSW(ha->exchoffld_size);
986 mcp->out_mb = MBX_9|MBX_8|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
987 mcp->in_mb = MBX_11|MBX_0;
988 mcp->tov = MBX_TOV_SECONDS;
989 mcp->flags = 0;
990 rval = qla2x00_mailbox_command(vha, mcp);
1023 mbx_cmd_t *mcp = &mc;
1029 mcp->mb[0] = MBC_GET_FIRMWARE_VERSION;
1030 mcp->out_mb = MBX_0;
1031 mcp->in_mb = MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
1033 mcp->in_mb |= MBX_13|MBX_12|MBX_11|MBX_10|MBX_9|MBX_8;
1035 mcp->in_mb |= MBX_17|MBX_16|MBX_15;
1037 mcp->in_mb |=
1041 mcp->flags = 0;
1042 mcp->tov = MBX_TOV_SECONDS;
1043 rval = qla2x00_mailbox_command(vha, mcp);
1048 ha->fw_major_version = mcp->mb[1];
1049 ha->fw_minor_version = mcp->mb[2];
1050 ha->fw_subminor_version = mcp->mb[3];
1051 ha->fw_attributes = mcp->mb[6];
1055 ha->fw_memory_size = (mcp->mb[5] << 16) | mcp->mb[4];
1058 ha->mpi_version[0] = mcp->mb[10] & 0xff;
1059 ha->mpi_version[1] = mcp->mb[11] >> 8;
1060 ha->mpi_version[2] = mcp->mb[11] & 0xff;
1061 ha->mpi_capabilities = (mcp->mb[12] << 16) | mcp->mb[13];
1062 ha->phy_version[0] = mcp->mb[8] & 0xff;
1063 ha->phy_version[1] = mcp->mb[9] >> 8;
1064 ha->phy_version[2] = mcp->mb[9] & 0xff;
1068 ha->fw_attributes_h = mcp->mb[15];
1069 ha->fw_attributes_ext[0] = mcp->mb[16];
1070 ha->fw_attributes_ext[1] = mcp->mb[17];
1073 __func__, mcp->mb[15], mcp->mb[6]);
1076 __func__, mcp->mb[17], mcp->mb[16]);
1114 ha->serdes_version[0] = mcp->mb[7] & 0xff;
1115 ha->serdes_version[1] = mcp->mb[8] >> 8;
1116 ha->serdes_version[2] = mcp->mb[8] & 0xff;
1117 ha->mpi_version[0] = mcp->mb[10] & 0xff;
1118 ha->mpi_version[1] = mcp->mb[11] >> 8;
1119 ha->mpi_version[2] = mcp->mb[11] & 0xff;
1120 ha->pep_version[0] = mcp->mb[13] & 0xff;
1121 ha->pep_version[1] = mcp->mb[14] >> 8;
1122 ha->pep_version[2] = mcp->mb[14] & 0xff;
1123 ha->fw_shared_ram_start = (mcp->mb[19] << 16) | mcp->mb[18];
1124 ha->fw_shared_ram_end = (mcp->mb[21] << 16) | mcp->mb[20];
1125 ha->fw_ddr_ram_start = (mcp->mb[23] << 16) | mcp->mb[22];
1126 ha->fw_ddr_ram_end = (mcp->mb[25] << 16) | mcp->mb[24];
1128 if (mcp->mb[16] & BIT_10)
1185 mbx_cmd_t *mcp = &mc;
1190 mcp->mb[0] = MBC_GET_FIRMWARE_OPTION;
1191 mcp->out_mb = MBX_0;
1192 mcp->in_mb = MBX_3|MBX_2|MBX_1|MBX_0;
1193 mcp->tov = MBX_TOV_SECONDS;
1194 mcp->flags = 0;
1195 rval = qla2x00_mailbox_command(vha, mcp);
1201 fwopts[0] = mcp->mb[0];
1202 fwopts[1] = mcp->mb[1];
1203 fwopts[2] = mcp->mb[2];
1204 fwopts[3] = mcp->mb[3];
1233 mbx_cmd_t *mcp = &mc;
1238 mcp->mb[0] = MBC_SET_FIRMWARE_OPTION;
1239 mcp->mb[1] = fwopts[1];
1240 mcp->mb[2] = fwopts[2];
1241 mcp->mb[3] = fwopts[3];
1242 mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
1243 mcp->in_mb = MBX_0;
1245 mcp->in_mb |= MBX_1;
1246 mcp->mb[10] = fwopts[10];
1247 mcp->out_mb |= MBX_10;
1249 mcp->mb[10] = fwopts[10];
1250 mcp->mb[11] = fwopts[11];
1251 mcp->mb[12] = 0; /* Undocumented, but used */
1252 mcp->out_mb |= MBX_12|MBX_11|MBX_10;
1254 mcp->tov = MBX_TOV_SECONDS;
1255 mcp->flags = 0;
1256 rval = qla2x00_mailbox_command(vha, mcp);
1258 fwopts[0] = mcp->mb[0];
1263 "Failed=%x (%x/%x).\n", rval, mcp->mb[0], mcp->mb[1]);
1293 mbx_cmd_t *mcp = &mc;
1298 mcp->mb[0] = MBC_MAILBOX_REGISTER_TEST;
1299 mcp->mb[1] = 0xAAAA;
1300 mcp->mb[2] = 0x5555;
1301 mcp->mb[3] = 0xAA55;
1302 mcp->mb[4] = 0x55AA;
1303 mcp->mb[5] = 0xA5A5;
1304 mcp->mb[6] = 0x5A5A;
1305 mcp->mb[7] = 0x2525;
1306 mcp->out_mb = MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
1307 mcp->in_mb = MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
1308 mcp->tov = MBX_TOV_SECONDS;
1309 mcp->flags = 0;
1310 rval = qla2x00_mailbox_command(vha, mcp);
1313 if (mcp->mb[1] != 0xAAAA || mcp->mb[2] != 0x5555 ||
1314 mcp->mb[3] != 0xAA55 || mcp->mb[4] != 0x55AA)
1316 if (mcp->mb[5] != 0xA5A5 || mcp->mb[6] != 0x5A5A ||
1317 mcp->mb[7] != 0x2525)
1353 mbx_cmd_t *mcp = &mc;
1358 mcp->mb[0] = MBC_VERIFY_CHECKSUM;
1359 mcp->out_mb = MBX_0;
1360 mcp->in_mb = MBX_0;
1362 mcp->mb[1] = MSW(risc_addr);
1363 mcp->mb[2] = LSW(risc_addr);
1364 mcp->out_mb |= MBX_2|MBX_1;
1365 mcp->in_mb |= MBX_2|MBX_1;
1367 mcp->mb[1] = LSW(risc_addr);
1368 mcp->out_mb |= MBX_1;
1369 mcp->in_mb |= MBX_1;
1372 mcp->tov = MBX_TOV_SECONDS;
1373 mcp->flags = 0;
1374 rval = qla2x00_mailbox_command(vha, mcp);
1379 (mcp->mb[2] << 16) | mcp->mb[1] : mcp->mb[1]);
1412 mbx_cmd_t *mcp = &mc;
1420 mcp->mb[0] = MBC_IOCB_COMMAND_A64;
1421 mcp->mb[1] = 0;
1422 mcp->mb[2] = MSW(LSD(phys_addr));
1423 mcp->mb[3] = LSW(LSD(phys_addr));
1424 mcp->mb[6] = MSW(MSD(phys_addr));
1425 mcp->mb[7] = LSW(MSD(phys_addr));
1426 mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
1427 mcp->in_mb = MBX_1|MBX_0;
1428 mcp->tov = tov;
1429 mcp->flags = 0;
1430 rval = qla2x00_mailbox_command(vha, mcp);
1478 mbx_cmd_t *mcp = &mc;
1505 mcp->mb[0] = MBC_ABORT_COMMAND;
1507 mcp->mb[1] = fcport->loop_id;
1509 mcp->mb[1] = fcport->loop_id << 8;
1510 mcp->mb[2] = (uint16_t)handle;
1511 mcp->mb[3] = (uint16_t)(handle >> 16);
1512 mcp->mb[6] = (uint16_t)cmd->device->lun;
1513 mcp->out_mb = MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
1514 mcp->in_mb = MBX_0;
1515 mcp->tov = MBX_TOV_SECONDS;
1516 mcp->flags = 0;
1517 rval = qla2x00_mailbox_command(vha, mcp);
1534 mbx_cmd_t *mcp = &mc;
1542 mcp->mb[0] = MBC_ABORT_TARGET;
1543 mcp->out_mb = MBX_9|MBX_2|MBX_1|MBX_0;
1545 mcp->mb[1] = fcport->loop_id;
1546 mcp->mb[10] = 0;
1547 mcp->out_mb |= MBX_10;
1549 mcp->mb[1] = fcport->loop_id << 8;
1551 mcp->mb[2] = vha->hw->loop_reset_delay;
1552 mcp->mb[9] = vha->vp_idx;
1554 mcp->in_mb = MBX_0;
1555 mcp->tov = MBX_TOV_SECONDS;
1556 mcp->flags = 0;
1557 rval = qla2x00_mailbox_command(vha, mcp);
1582 mbx_cmd_t *mcp = &mc;
1590 mcp->mb[0] = MBC_LUN_RESET;
1591 mcp->out_mb = MBX_9|MBX_3|MBX_2|MBX_1|MBX_0;
1593 mcp->mb[1] = fcport->loop_id;
1595 mcp->mb[1] = fcport->loop_id << 8;
1596 mcp->mb[2] = (u32)l;
1597 mcp->mb[3] = 0;
1598 mcp->mb[9] = vha->vp_idx;
1600 mcp->in_mb = MBX_0;
1601 mcp->tov = MBX_TOV_SECONDS;
1602 mcp->flags = 0;
1603 rval = qla2x00_mailbox_command(vha, mcp);
1648 mbx_cmd_t *mcp = &mc;
1653 mcp->mb[0] = MBC_GET_ADAPTER_LOOP_ID;
1654 mcp->mb[9] = vha->vp_idx;
1655 mcp->out_mb = MBX_9|MBX_0;
1656 mcp->in_mb = MBX_9|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
1658 mcp->in_mb |= MBX_13|MBX_12|MBX_11|MBX_10;
1660 mcp->in_mb |= MBX_19|MBX_18|MBX_17|MBX_16;
1662 mcp->in_mb |= MBX_15|MBX_21|MBX_22|MBX_23;
1664 mcp->tov = MBX_TOV_SECONDS;
1665 mcp->flags = 0;
1666 rval = qla2x00_mailbox_command(vha, mcp);
1667 if (mcp->mb[0] == MBS_COMMAND_ERROR)
1669 else if (mcp->mb[0] == MBS_INVALID_COMMAND)
1673 *id = mcp->mb[1];
1674 *al_pa = LSB(mcp->mb[2]);
1675 *area = MSB(mcp->mb[2]);
1676 *domain = LSB(mcp->mb[3]);
1677 *top = mcp->mb[6];
1678 *sw_cap = mcp->mb[7];
1688 vha->fcoe_vlan_id = mcp->mb[9] & 0xfff;
1689 vha->fcoe_fcf_idx = mcp->mb[10];
1690 vha->fcoe_vn_port_mac[5] = mcp->mb[11] >> 8;
1691 vha->fcoe_vn_port_mac[4] = mcp->mb[11] & 0xff;
1692 vha->fcoe_vn_port_mac[3] = mcp->mb[12] >> 8;
1693 vha->fcoe_vn_port_mac[2] = mcp->mb[12] & 0xff;
1694 vha->fcoe_vn_port_mac[1] = mcp->mb[13] >> 8;
1695 vha->fcoe_vn_port_mac[0] = mcp->mb[13] & 0xff;
1699 if (mcp->mb[7] & BIT_14) {
1700 vha->port_name[0] = MSB(mcp->mb[16]);
1701 vha->port_name[1] = LSB(mcp->mb[16]);
1702 vha->port_name[2] = MSB(mcp->mb[17]);
1703 vha->port_name[3] = LSB(mcp->mb[17]);
1704 vha->port_name[4] = MSB(mcp->mb[18]);
1705 vha->port_name[5] = LSB(mcp->mb[18]);
1706 vha->port_name[6] = MSB(mcp->mb[19]);
1707 vha->port_name[7] = LSB(mcp->mb[19]);
1717 vha->bbcr = mcp->mb[15];
1718 if (mcp->mb[7] & SCM_EDC_ACC_RECEIVED) {
1721 mcp->mb[21]);
1723 if (mcp->mb[7] & SCM_RDF_ACC_RECEIVED) {
1729 mcp->mb[23]);
1759 mbx_cmd_t *mcp = &mc;
1764 mcp->mb[0] = MBC_GET_RETRY_COUNT;
1765 mcp->out_mb = MBX_0;
1766 mcp->in_mb = MBX_3|MBX_2|MBX_1|MBX_0;
1767 mcp->tov = MBX_TOV_SECONDS;
1768 mcp->flags = 0;
1769 rval = qla2x00_mailbox_command(vha, mcp);
1774 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
1777 *r_a_tov = mcp->mb[3] / 2;
1778 ratov = (mcp->mb[3]/2) / 10; /* mb[3] value is in 100ms */
1779 if (mcp->mb[1] * ratov > (*retry_cnt) * (*tov)) {
1781 *retry_cnt = (uint8_t)mcp->mb[1];
1786 "Done %s mb3=%d ratov=%d.\n", __func__, mcp->mb[3], ratov);
1814 mbx_cmd_t *mcp = &mc;
1825 mcp->mb[0] = MBC_MID_INITIALIZE_FIRMWARE;
1827 mcp->mb[0] = MBC_INITIALIZE_FIRMWARE;
1829 mcp->mb[1] = 0;
1830 mcp->mb[2] = MSW(ha->init_cb_dma);
1831 mcp->mb[3] = LSW(ha->init_cb_dma);
1832 mcp->mb[6] = MSW(MSD(ha->init_cb_dma));
1833 mcp->mb[7] = LSW(MSD(ha->init_cb_dma));
1834 mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
1836 mcp->mb[1] = BIT_0;
1837 mcp->mb[10] = MSW(ha->ex_init_cb_dma);
1838 mcp->mb[11] = LSW(ha->ex_init_cb_dma);
1839 mcp->mb[12] = MSW(MSD(ha->ex_init_cb_dma));
1840 mcp->mb[13] = LSW(MSD(ha->ex_init_cb_dma));
1841 mcp->mb[14] = sizeof(*ha->ex_init_cb);
1842 mcp->out_mb |= MBX_14|MBX_13|MBX_12|MBX_11|MBX_10;
1846 mcp->mb[1] |= BIT_1;
1847 mcp->mb[16] = MSW(ha->sf_init_cb_dma);
1848 mcp->mb[17] = LSW(ha->sf_init_cb_dma);
1849 mcp->mb[18] = MSW(MSD(ha->sf_init_cb_dma));
1850 mcp->mb[19] = LSW(MSD(ha->sf_init_cb_dma));
1851 mcp->mb[15] = sizeof(*ha->sf_init_cb);
1852 mcp->out_mb |= MBX_19|MBX_18|MBX_17|MBX_16|MBX_15;
1856 mcp->in_mb = MBX_2|MBX_1|MBX_0;
1859 mcp->in_mb |= MBX_3;
1860 mcp->buf_size = size;
1861 mcp->flags = MBX_DMA_OUT;
1862 mcp->tov = MBX_TOV_SECONDS;
1863 rval = qla2x00_mailbox_command(vha, mcp);
1869 rval, mcp->mb[0], mcp->mb[1], mcp->mb[2], mcp->mb[3]);
1882 if (mcp->mb[2] == 6 || mcp->mb[3] == 2)
1915 mbx_cmd_t *mcp = &mc;
1933 mcp->mb[0] = MBC_GET_PORT_DATABASE;
1935 mcp->mb[0] = MBC_ENHANCED_GET_PORT_DATABASE;
1936 mcp->mb[2] = MSW(pd_dma);
1937 mcp->mb[3] = LSW(pd_dma);
1938 mcp->mb[6] = MSW(MSD(pd_dma));
1939 mcp->mb[7] = LSW(MSD(pd_dma));
1940 mcp->mb[9] = vha->vp_idx;
1941 mcp->out_mb = MBX_9|MBX_7|MBX_6|MBX_3|MBX_2|MBX_0;
1942 mcp->in_mb = MBX_0;
1944 mcp->mb[1] = fcport->loop_id;
1945 mcp->mb[10] = opt;
1946 mcp->out_mb |= MBX_10|MBX_1;
1947 mcp->in_mb |= MBX_1;
1949 mcp->mb[1] = fcport->loop_id;
1950 mcp->mb[10] = opt;
1951 mcp->out_mb |= MBX_10|MBX_1;
1953 mcp->mb[1] = fcport->loop_id << 8 | opt;
1954 mcp->out_mb |= MBX_1;
1956 mcp->buf_size = IS_FWI2_CAPABLE(ha) ?
1958 mcp->flags = MBX_DMA_IN;
1959 mcp->tov = (ha->login_timeout * 2) + (ha->login_timeout / 2);
1960 rval = qla2x00_mailbox_command(vha, mcp);
2075 mcp->mb[0], mcp->mb[1]);
2089 mbx_cmd_t *mcp = &mc;
2105 mcp->mb[0] = MBC_GET_PORT_DATABASE;
2106 mcp->mb[1] = nport_handle;
2107 mcp->mb[2] = MSW(LSD(pdb_dma));
2108 mcp->mb[3] = LSW(LSD(pdb_dma));
2109 mcp->mb[6] = MSW(MSD(pdb_dma));
2110 mcp->mb[7] = LSW(MSD(pdb_dma));
2111 mcp->mb[9] = 0;
2112 mcp->mb[10] = 0;
2113 mcp->out_mb = MBX_10|MBX_9|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
2114 mcp->in_mb = MBX_1|MBX_0;
2115 mcp->buf_size = sizeof(*pdb);
2116 mcp->flags = MBX_DMA_IN;
2117 mcp->tov = vha->hw->login_timeout * 2;
2118 rval = qla2x00_mailbox_command(vha, mcp);
2123 rval, mcp->mb[0], mcp->mb[1]);
2156 mbx_cmd_t *mcp = &mc;
2162 mcp->mb[0] = MBC_GET_FIRMWARE_STATE;
2163 mcp->out_mb = MBX_0;
2165 mcp->in_mb = MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
2167 mcp->in_mb = MBX_1|MBX_0;
2168 mcp->tov = MBX_TOV_SECONDS;
2169 mcp->flags = 0;
2170 rval = qla2x00_mailbox_command(vha, mcp);
2173 states[0] = mcp->mb[1];
2175 states[1] = mcp->mb[2];
2176 states[2] = mcp->mb[3]; /* SFP info */
2177 states[3] = mcp->mb[4];
2178 states[4] = mcp->mb[5];
2179 states[5] = mcp->mb[6]; /* DPORT status */
2187 if (mcp->mb[2] == 6 || mcp->mb[3] == 2)
2222 mbx_cmd_t *mcp = &mc;
2227 mcp->mb[0] = MBC_GET_PORT_NAME;
2228 mcp->mb[9] = vha->vp_idx;
2229 mcp->out_mb = MBX_9|MBX_1|MBX_0;
2231 mcp->mb[1] = loop_id;
2232 mcp->mb[10] = opt;
2233 mcp->out_mb |= MBX_10;
2235 mcp->mb[1] = loop_id << 8 | opt;
2238 mcp->in_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
2239 mcp->tov = MBX_TOV_SECONDS;
2240 mcp->flags = 0;
2241 rval = qla2x00_mailbox_command(vha, mcp);
2249 name[0] = MSB(mcp->mb[2]);
2250 name[1] = LSB(mcp->mb[2]);
2251 name[2] = MSB(mcp->mb[3]);
2252 name[3] = LSB(mcp->mb[3]);
2253 name[4] = MSB(mcp->mb[6]);
2254 name[5] = LSB(mcp->mb[6]);
2255 name[6] = MSB(mcp->mb[7]);
2256 name[7] = LSB(mcp->mb[7]);
2286 mbx_cmd_t *mcp = &mc;
2294 mcp->mb[0] = MBC_LINK_INITIALIZATION;
2295 mcp->mb[1] = BIT_4;
2297 mcp->mb[1] |= BIT_6;
2299 mcp->mb[1] |= BIT_5;
2300 mcp->mb[2] = 0;
2301 mcp->mb[3] = 0;
2302 mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
2303 mcp->in_mb = MBX_0;
2304 mcp->tov = MBX_TOV_SECONDS;
2305 mcp->flags = 0;
2306 rval = qla2x00_mailbox_command(vha, mcp);
2338 mbx_cmd_t *mcp = &mc;
2345 mcp->mb[0] = MBC_LIP_FULL_LOGIN;
2346 mcp->mb[1] = BIT_1;
2347 mcp->mb[2] = 0;
2348 mcp->out_mb = MBX_2|MBX_1|MBX_0;
2350 mcp->mb[0] = MBC_LIP_FULL_LOGIN;
2351 mcp->mb[1] = BIT_4;
2352 mcp->mb[2] = 0;
2353 mcp->mb[3] = vha->hw->loop_reset_delay;
2354 mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
2356 mcp->mb[0] = MBC_LIP_RESET;
2357 mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
2359 mcp->mb[1] = 0x00ff;
2360 mcp->mb[10] = 0;
2361 mcp->out_mb |= MBX_10;
2363 mcp->mb[1] = 0xff00;
2365 mcp->mb[2] = vha->hw->loop_reset_delay;
2366 mcp->mb[3] = 0;
2368 mcp->in_mb = MBX_0;
2369 mcp->tov = MBX_TOV_SECONDS;
2370 mcp->flags = 0;
2371 rval = qla2x00_mailbox_command(vha, mcp);
2409 mbx_cmd_t *mcp = &mc;
2416 vha->hw->retry_count, vha->hw->login_timeout, mcp->tov);
2418 mcp->mb[0] = MBC_SEND_SNS_COMMAND;
2419 mcp->mb[1] = cmd_size;
2420 mcp->mb[2] = MSW(sns_phys_address);
2421 mcp->mb[3] = LSW(sns_phys_address);
2422 mcp->mb[6] = MSW(MSD(sns_phys_address));
2423 mcp->mb[7] = LSW(MSD(sns_phys_address));
2424 mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
2425 mcp->in_mb = MBX_0|MBX_1;
2426 mcp->buf_size = buf_size;
2427 mcp->flags = MBX_DMA_OUT|MBX_DMA_IN;
2428 mcp->tov = (vha->hw->login_timeout * 2) + (vha->hw->login_timeout / 2);
2429 rval = qla2x00_mailbox_command(vha, mcp);
2435 rval, mcp->mb[0], mcp->mb[1]);
2587 mbx_cmd_t *mcp = &mc;
2593 mcp->mb[0] = MBC_LOGIN_FABRIC_PORT;
2594 mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
2596 mcp->mb[1] = loop_id;
2597 mcp->mb[10] = opt;
2598 mcp->out_mb |= MBX_10;
2600 mcp->mb[1] = (loop_id << 8) | opt;
2602 mcp->mb[2] = domain;
2603 mcp->mb[3] = area << 8 | al_pa;
2605 mcp->in_mb = MBX_7|MBX_6|MBX_2|MBX_1|MBX_0;
2606 mcp->tov = (ha->login_timeout * 2) + (ha->login_timeout / 2);
2607 mcp->flags = 0;
2608 rval = qla2x00_mailbox_command(vha, mcp);
2612 mb[0] = mcp->mb[0];
2613 mb[1] = mcp->mb[1];
2614 mb[2] = mcp->mb[2];
2615 mb[6] = mcp->mb[6];
2616 mb[7] = mcp->mb[7];
2628 if (mcp->mb[0] == 0x4001 || mcp->mb[0] == 0x4002 ||
2629 mcp->mb[0] == 0x4003 || mcp->mb[0] == 0x4005 ||
2630 mcp->mb[0] == 0x4006)
2636 rval, mcp->mb[0], mcp->mb[1], mcp->mb[2]);
2668 mbx_cmd_t *mcp = &mc;
2679 mcp->mb[0] = MBC_LOGIN_LOOP_PORT;
2681 mcp->mb[1] = fcport->loop_id;
2683 mcp->mb[1] = fcport->loop_id << 8;
2684 mcp->mb[2] = opt;
2685 mcp->out_mb = MBX_2|MBX_1|MBX_0;
2686 mcp->in_mb = MBX_7|MBX_6|MBX_1|MBX_0;
2687 mcp->tov = (ha->login_timeout * 2) + (ha->login_timeout / 2);
2688 mcp->flags = 0;
2689 rval = qla2x00_mailbox_command(vha, mcp);
2693 mb_ret[0] = mcp->mb[0];
2694 mb_ret[1] = mcp->mb[1];
2695 mb_ret[6] = mcp->mb[6];
2696 mb_ret[7] = mcp->mb[7];
2706 if (mcp->mb[0] == 0x4005 || mcp->mb[0] == 0x4006)
2711 rval, mcp->mb[0], mcp->mb[1], mcp->mb[6], mcp->mb[7]);
2802 mbx_cmd_t *mcp = &mc;
2807 mcp->mb[0] = MBC_LOGOUT_FABRIC_PORT;
2808 mcp->out_mb = MBX_1|MBX_0;
2810 mcp->mb[1] = loop_id;
2811 mcp->mb[10] = 0;
2812 mcp->out_mb |= MBX_10;
2814 mcp->mb[1] = loop_id << 8;
2817 mcp->in_mb = MBX_1|MBX_0;
2818 mcp->tov = MBX_TOV_SECONDS;
2819 mcp->flags = 0;
2820 rval = qla2x00_mailbox_command(vha, mcp);
2825 "Failed=%x mb[1]=%x.\n", rval, mcp->mb[1]);
2855 mbx_cmd_t *mcp = &mc;
2860 mcp->mb[0] = MBC_LIP_FULL_LOGIN;
2861 mcp->mb[1] = IS_FWI2_CAPABLE(vha->hw) ? BIT_4 : 0;
2862 mcp->mb[2] = 0;
2863 mcp->mb[3] = 0;
2864 mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
2865 mcp->in_mb = MBX_0;
2866 mcp->tov = MBX_TOV_SECONDS;
2867 mcp->flags = 0;
2868 rval = qla2x00_mailbox_command(vha, mcp);
2900 mbx_cmd_t *mcp = &mc;
2908 mcp->mb[0] = MBC_GET_ID_LIST;
2909 mcp->out_mb = MBX_0;
2911 mcp->mb[2] = MSW(id_list_dma);
2912 mcp->mb[3] = LSW(id_list_dma);
2913 mcp->mb[6] = MSW(MSD(id_list_dma));
2914 mcp->mb[7] = LSW(MSD(id_list_dma));
2915 mcp->mb[8] = 0;
2916 mcp->mb[9] = vha->vp_idx;
2917 mcp->out_mb |= MBX_9|MBX_8|MBX_7|MBX_6|MBX_3|MBX_2;
2919 mcp->mb[1] = MSW(id_list_dma);
2920 mcp->mb[2] = LSW(id_list_dma);
2921 mcp->mb[3] = MSW(MSD(id_list_dma));
2922 mcp->mb[6] = LSW(MSD(id_list_dma));
2923 mcp->out_mb |= MBX_6|MBX_3|MBX_2|MBX_1;
2925 mcp->in_mb = MBX_1|MBX_0;
2926 mcp->tov = MBX_TOV_SECONDS;
2927 mcp->flags = 0;
2928 rval = qla2x00_mailbox_command(vha, mcp);
2934 *entries = mcp->mb[1];
2961 mbx_cmd_t *mcp = &mc;
2966 mcp->mb[0] = MBC_GET_RESOURCE_COUNTS;
2967 mcp->out_mb = MBX_0;
2968 mcp->in_mb = MBX_11|MBX_10|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
2971 mcp->in_mb |= MBX_12;
2972 mcp->tov = MBX_TOV_SECONDS;
2973 mcp->flags = 0;
2974 rval = qla2x00_mailbox_command(vha, mcp);
2979 "Failed mb[0]=%x.\n", mcp->mb[0]);
2983 "mb11=%x mb12=%x.\n", __func__, mcp->mb[1], mcp->mb[2],
2984 mcp->mb[3], mcp->mb[6], mcp->mb[7], mcp->mb[10],
2985 mcp->mb[11], mcp->mb[12]);
2987 ha->orig_fw_tgt_xcb_count = mcp->mb[1];
2988 ha->cur_fw_tgt_xcb_count = mcp->mb[2];
2989 ha->cur_fw_xcb_count = mcp->mb[3];
2990 ha->orig_fw_xcb_count = mcp->mb[6];
2991 ha->cur_fw_iocb_count = mcp->mb[7];
2992 ha->orig_fw_iocb_count = mcp->mb[10];
2994 ha->max_npiv_vports = mcp->mb[11];
2996 ha->fw_max_fcf_count = mcp->mb[12];
3022 mbx_cmd_t *mcp = &mc;
3037 mcp->mb[0] = MBC_GET_FC_AL_POSITION_MAP;
3038 mcp->mb[2] = MSW(pmap_dma);
3039 mcp->mb[3] = LSW(pmap_dma);
3040 mcp->mb[6] = MSW(MSD(pmap_dma));
3041 mcp->mb[7] = LSW(MSD(pmap_dma));
3042 mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_0;
3043 mcp->in_mb = MBX_1|MBX_0;
3044 mcp->buf_size = FCAL_MAP_SIZE;
3045 mcp->flags = MBX_DMA_IN;
3046 mcp->tov = (ha->login_timeout * 2) + (ha->login_timeout / 2);
3047 rval = qla2x00_mailbox_command(vha, mcp);
3052 mcp->mb[0], mcp->mb[1], (unsigned)pmap[0]);
3092 mbx_cmd_t *mcp = &mc;
3100 mcp->mb[0] = MBC_GET_LINK_STATUS;
3101 mcp->mb[2] = MSW(LSD(stats_dma));
3102 mcp->mb[3] = LSW(LSD(stats_dma));
3103 mcp->mb[6] = MSW(MSD(stats_dma));
3104 mcp->mb[7] = LSW(MSD(stats_dma));
3105 mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_0;
3106 mcp->in_mb = MBX_0;
3108 mcp->mb[1] = loop_id;
3109 mcp->mb[4] = 0;
3110 mcp->mb[10] = 0;
3111 mcp->out_mb |= MBX_10|MBX_4|MBX_1;
3112 mcp->in_mb |= MBX_1;
3114 mcp->mb[1] = loop_id;
3115 mcp->mb[10] = 0;
3116 mcp->out_mb |= MBX_10|MBX_1;
3118 mcp->mb[1] = loop_id << 8;
3119 mcp->out_mb |= MBX_1;
3121 mcp->tov = MBX_TOV_SECONDS;
3122 mcp->flags = IOCTL_CMD;
3123 rval = qla2x00_mailbox_command(vha, mcp);
3126 if (mcp->mb[0] != MBS_COMMAND_COMPLETE) {
3128 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
3151 mbx_cmd_t *mcp = &mc;
3171 if (mcp->mb[0] != MBS_COMMAND_COMPLETE) {
3173 "Failed mb[0]=%x.\n", mcp->mb[0]);
3402 mbx_cmd_t *mcp = &mc;
3411 mcp->mb[0] = MBC_GEN_SYSTEM_ERROR;
3412 mcp->out_mb = MBX_0;
3413 mcp->in_mb = MBX_0;
3414 mcp->tov = 5;
3415 mcp->flags = 0;
3416 rval = qla2x00_mailbox_command(vha, mcp);
3433 mbx_cmd_t *mcp = &mc;
3442 mcp->mb[0] = MBC_WRITE_SERDES;
3443 mcp->mb[1] = addr;
3445 mcp->mb[2] = data & 0xff;
3447 mcp->mb[2] = data;
3449 mcp->mb[3] = 0;
3450 mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
3451 mcp->in_mb = MBX_0;
3452 mcp->tov = MBX_TOV_SECONDS;
3453 mcp->flags = 0;
3454 rval = qla2x00_mailbox_command(vha, mcp);
3458 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
3472 mbx_cmd_t *mcp = &mc;
3481 mcp->mb[0] = MBC_READ_SERDES;
3482 mcp->mb[1] = addr;
3483 mcp->mb[3] = 0;
3484 mcp->out_mb = MBX_3|MBX_1|MBX_0;
3485 mcp->in_mb = MBX_1|MBX_0;
3486 mcp->tov = MBX_TOV_SECONDS;
3487 mcp->flags = 0;
3488 rval = qla2x00_mailbox_command(vha, mcp);
3491 *data = mcp->mb[1] & 0xff;
3493 *data = mcp->mb[1];
3497 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
3511 mbx_cmd_t *mcp = &mc;
3519 mcp->mb[0] = MBC_SET_GET_ETH_SERDES_REG;
3520 mcp->mb[1] = HCS_WRITE_SERDES;
3521 mcp->mb[3] = LSW(addr);
3522 mcp->mb[4] = MSW(addr);
3523 mcp->mb[5] = LSW(data);
3524 mcp->mb[6] = MSW(data);
3525 mcp->out_mb = MBX_6|MBX_5|MBX_4|MBX_3|MBX_1|MBX_0;
3526 mcp->in_mb = MBX_0;
3527 mcp->tov = MBX_TOV_SECONDS;
3528 mcp->flags = 0;
3529 rval = qla2x00_mailbox_command(vha, mcp);
3533 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
3547 mbx_cmd_t *mcp = &mc;
3555 mcp->mb[0] = MBC_SET_GET_ETH_SERDES_REG;
3556 mcp->mb[1] = HCS_READ_SERDES;
3557 mcp->mb[3] = LSW(addr);
3558 mcp->mb[4] = MSW(addr);
3559 mcp->out_mb = MBX_4|MBX_3|MBX_1|MBX_0;
3560 mcp->in_mb = MBX_2|MBX_1|MBX_0;
3561 mcp->tov = MBX_TOV_SECONDS;
3562 mcp->flags = 0;
3563 rval = qla2x00_mailbox_command(vha, mcp);
3565 *data = mcp->mb[2] << 16 | mcp->mb[1];
3569 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
3593 mbx_cmd_t *mcp = &mc;
3598 mcp->mb[0] = MBC_SERDES_PARAMS;
3599 mcp->mb[1] = BIT_0;
3600 mcp->mb[2] = sw_em_1g | BIT_15;
3601 mcp->mb[3] = sw_em_2g | BIT_15;
3602 mcp->mb[4] = sw_em_4g | BIT_15;
3603 mcp->out_mb = MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
3604 mcp->in_mb = MBX_0;
3605 mcp->tov = MBX_TOV_SECONDS;
3606 mcp->flags = 0;
3607 rval = qla2x00_mailbox_command(vha, mcp);
3612 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
3627 mbx_cmd_t *mcp = &mc;
3635 mcp->mb[0] = MBC_STOP_FIRMWARE;
3636 mcp->mb[1] = 0;
3637 mcp->out_mb = MBX_1|MBX_0;
3638 mcp->in_mb = MBX_0;
3639 mcp->tov = 5;
3640 mcp->flags = 0;
3641 rval = qla2x00_mailbox_command(vha, mcp);
3645 if (mcp->mb[0] == MBS_INVALID_COMMAND)
3661 mbx_cmd_t *mcp = &mc;
3672 mcp->mb[0] = MBC_TRACE_CONTROL;
3673 mcp->mb[1] = TC_EFT_ENABLE;
3674 mcp->mb[2] = LSW(eft_dma);
3675 mcp->mb[3] = MSW(eft_dma);
3676 mcp->mb[4] = LSW(MSD(eft_dma));
3677 mcp->mb[5] = MSW(MSD(eft_dma));
3678 mcp->mb[6] = buffers;
3679 mcp->mb[7] = TC_AEN_DISABLE;
3680 mcp->out_mb = MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
3681 mcp->in_mb = MBX_1|MBX_0;
3682 mcp->tov = MBX_TOV_SECONDS;
3683 mcp->flags = 0;
3684 rval = qla2x00_mailbox_command(vha, mcp);
3688 rval, mcp->mb[0], mcp->mb[1]);
3702 mbx_cmd_t *mcp = &mc;
3713 mcp->mb[0] = MBC_TRACE_CONTROL;
3714 mcp->mb[1] = TC_EFT_DISABLE;
3715 mcp->out_mb = MBX_1|MBX_0;
3716 mcp->in_mb = MBX_1|MBX_0;
3717 mcp->tov = MBX_TOV_SECONDS;
3718 mcp->flags = 0;
3719 rval = qla2x00_mailbox_command(vha, mcp);
3723 rval, mcp->mb[0], mcp->mb[1]);
3738 mbx_cmd_t *mcp = &mc;
3751 mcp->mb[0] = MBC_TRACE_CONTROL;
3752 mcp->mb[1] = TC_FCE_ENABLE;
3753 mcp->mb[2] = LSW(fce_dma);
3754 mcp->mb[3] = MSW(fce_dma);
3755 mcp->mb[4] = LSW(MSD(fce_dma));
3756 mcp->mb[5] = MSW(MSD(fce_dma));
3757 mcp->mb[6] = buffers;
3758 mcp->mb[7] = TC_AEN_DISABLE;
3759 mcp->mb[8] = 0;
3760 mcp->mb[9] = TC_FCE_DEFAULT_RX_SIZE;
3761 mcp->mb[10] = TC_FCE_DEFAULT_TX_SIZE;
3762 mcp->out_mb = MBX_10|MBX_9|MBX_8|MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|
3764 mcp->in_mb = MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
3765 mcp->tov = MBX_TOV_SECONDS;
3766 mcp->flags = 0;
3767 rval = qla2x00_mailbox_command(vha, mcp);
3771 rval, mcp->mb[0], mcp->mb[1]);
3777 memcpy(mb, mcp->mb, 8 * sizeof(*mb));
3790 mbx_cmd_t *mcp = &mc;
3801 mcp->mb[0] = MBC_TRACE_CONTROL;
3802 mcp->mb[1] = TC_FCE_DISABLE;
3803 mcp->mb[2] = TC_FCE_DISABLE_TRACE;
3804 mcp->out_mb = MBX_2|MBX_1|MBX_0;
3805 mcp->in_mb = MBX_9|MBX_8|MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|
3807 mcp->tov = MBX_TOV_SECONDS;
3808 mcp->flags = 0;
3809 rval = qla2x00_mailbox_command(vha, mcp);
3813 rval, mcp->mb[0], mcp->mb[1]);
3819 *wr = (uint64_t) mcp->mb[5] << 48 |
3820 (uint64_t) mcp->mb[4] << 32 |
3821 (uint64_t) mcp->mb[3] << 16 |
3822 (uint64_t) mcp->mb[2];
3824 *rd = (uint64_t) mcp->mb[9] << 48 |
3825 (uint64_t) mcp->mb[8] << 32 |
3826 (uint64_t) mcp->mb[7] << 16 |
3827 (uint64_t) mcp->mb[6];
3839 mbx_cmd_t *mcp = &mc;
3847 mcp->mb[0] = MBC_PORT_PARAMS;
3848 mcp->mb[1] = loop_id;
3849 mcp->mb[2] = mcp->mb[3] = 0;
3850 mcp->mb[9] = vha->vp_idx;
3851 mcp->out_mb = MBX_9|MBX_3|MBX_2|MBX_1|MBX_0;
3852 mcp->in_mb = MBX_3|MBX_1|MBX_0;
3853 mcp->tov = MBX_TOV_SECONDS;
3854 mcp->flags = 0;
3855 rval = qla2x00_mailbox_command(vha, mcp);
3859 mb[0] = mcp->mb[0];
3860 mb[1] = mcp->mb[1];
3861 mb[3] = mcp->mb[3];
3870 *port_speed = mcp->mb[3];
3882 mbx_cmd_t *mcp = &mc;
3890 mcp->mb[0] = MBC_PORT_PARAMS;
3891 mcp->mb[1] = loop_id;
3892 mcp->mb[2] = BIT_0;
3893 mcp->mb[3] = port_speed & 0x3F;
3894 mcp->mb[9] = vha->vp_idx;
3895 mcp->out_mb = MBX_9|MBX_3|MBX_2|MBX_1|MBX_0;
3896 mcp->in_mb = MBX_3|MBX_1|MBX_0;
3897 mcp->tov = MBX_TOV_SECONDS;
3898 mcp->flags = 0;
3899 rval = qla2x00_mailbox_command(vha, mcp);
3903 mb[0] = mcp->mb[0];
3904 mb[1] = mcp->mb[1];
3905 mb[3] = mcp->mb[3];
4250 mbx_cmd_t *mcp = &mc;
4255 mcp->mb[0] = MBC_SEND_CHANGE_REQUEST;
4256 mcp->mb[1] = format;
4257 mcp->mb[9] = vp_idx;
4258 mcp->out_mb = MBX_9|MBX_1|MBX_0;
4259 mcp->in_mb = MBX_0|MBX_1;
4260 mcp->tov = MBX_TOV_SECONDS;
4261 mcp->flags = 0;
4262 rval = qla2x00_mailbox_command(vha, mcp);
4265 if (mcp->mb[0] != MBS_COMMAND_COMPLETE) {
4280 mbx_cmd_t *mcp = &mc;
4286 mcp->mb[0] = MBC_DUMP_RISC_RAM_EXTENDED;
4287 mcp->mb[8] = MSW(addr);
4288 mcp->mb[10] = 0;
4289 mcp->out_mb = MBX_10|MBX_8|MBX_0;
4291 mcp->mb[0] = MBC_DUMP_RISC_RAM;
4292 mcp->out_mb = MBX_0;
4294 mcp->mb[1] = LSW(addr);
4295 mcp->mb[2] = MSW(req_dma);
4296 mcp->mb[3] = LSW(req_dma);
4297 mcp->mb[6] = MSW(MSD(req_dma));
4298 mcp->mb[7] = LSW(MSD(req_dma));
4299 mcp->out_mb |= MBX_7|MBX_6|MBX_3|MBX_2|MBX_1;
4301 mcp->mb[4] = MSW(size);
4302 mcp->mb[5] = LSW(size);
4303 mcp->out_mb |= MBX_5|MBX_4;
4305 mcp->mb[4] = LSW(size);
4306 mcp->out_mb |= MBX_4;
4309 mcp->in_mb = MBX_0;
4310 mcp->tov = MBX_TOV_SECONDS;
4311 mcp->flags = 0;
4312 rval = qla2x00_mailbox_command(vha, mcp);
4316 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
4432 mbx_cmd_t *mcp = &mc;
4444 mcp->mb[0] = MBC_INITIALIZE_MULTIQ;
4445 mcp->mb[1] = req->options;
4446 mcp->mb[2] = MSW(LSD(req->dma));
4447 mcp->mb[3] = LSW(LSD(req->dma));
4448 mcp->mb[6] = MSW(MSD(req->dma));
4449 mcp->mb[7] = LSW(MSD(req->dma));
4450 mcp->mb[5] = req->length;
4452 mcp->mb[10] = req->rsp->id;
4453 mcp->mb[12] = req->qos;
4454 mcp->mb[11] = req->vp_idx;
4455 mcp->mb[13] = req->rid;
4457 mcp->mb[15] = 0;
4459 mcp->mb[4] = req->id;
4461 mcp->mb[8] = 0;
4463 mcp->mb[9] = *req->out_ptr = 0;
4464 mcp->out_mb = MBX_14|MBX_13|MBX_12|MBX_11|MBX_10|MBX_9|MBX_8|MBX_7|
4466 mcp->in_mb = MBX_0;
4467 mcp->flags = MBX_DMA_OUT;
4468 mcp->tov = MBX_TOV_SECONDS * 2;
4472 mcp->in_mb |= MBX_1;
4474 mcp->out_mb |= MBX_15;
4476 mcp->in_mb |= MBX_9 | MBX_8 | MBX_7;
4487 rval = qla2x00_mailbox_command(vha, mcp);
4490 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
4505 mbx_cmd_t *mcp = &mc;
4517 mcp->mb[0] = MBC_INITIALIZE_MULTIQ;
4518 mcp->mb[1] = rsp->options;
4519 mcp->mb[2] = MSW(LSD(rsp->dma));
4520 mcp->mb[3] = LSW(LSD(rsp->dma));
4521 mcp->mb[6] = MSW(MSD(rsp->dma));
4522 mcp->mb[7] = LSW(MSD(rsp->dma));
4523 mcp->mb[5] = rsp->length;
4524 mcp->mb[14] = rsp->msix->entry;
4525 mcp->mb[13] = rsp->rid;
4527 mcp->mb[15] = 0;
4529 mcp->mb[4] = rsp->id;
4531 mcp->mb[8] = *rsp->in_ptr = 0;
4533 mcp->mb[9] = 0;
4534 mcp->out_mb = MBX_14|MBX_13|MBX_9|MBX_8|MBX_7
4536 mcp->in_mb = MBX_0;
4537 mcp->flags = MBX_DMA_OUT;
4538 mcp->tov = MBX_TOV_SECONDS * 2;
4541 mcp->out_mb |= MBX_12|MBX_11|MBX_10;
4542 mcp->in_mb |= MBX_1;
4544 mcp->out_mb |= MBX_15|MBX_12|MBX_11|MBX_10;
4545 mcp->in_mb |= MBX_1;
4547 mcp->in_mb |= MBX_9 | MBX_8 | MBX_7;
4559 rval = qla2x00_mailbox_command(vha, mcp);
4562 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
4576 mbx_cmd_t *mcp = &mc;
4581 mcp->mb[0] = MBC_IDC_ACK;
4582 memcpy(&mcp->mb[1], mb, QLA_IDC_ACK_REGS * sizeof(uint16_t));
4583 mcp->out_mb = MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
4584 mcp->in_mb = MBX_0;
4585 mcp->tov = MBX_TOV_SECONDS;
4586 mcp->flags = 0;
4587 rval = qla2x00_mailbox_command(vha, mcp);
4591 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
4605 mbx_cmd_t *mcp = &mc;
4614 mcp->mb[0] = MBC_FLASH_ACCESS_CTRL;
4615 mcp->mb[1] = FAC_OPT_CMD_GET_SECTOR_SIZE;
4616 mcp->out_mb = MBX_1|MBX_0;
4617 mcp->in_mb = MBX_1|MBX_0;
4618 mcp->tov = MBX_TOV_SECONDS;
4619 mcp->flags = 0;
4620 rval = qla2x00_mailbox_command(vha, mcp);
4625 rval, mcp->mb[0], mcp->mb[1]);
4629 *sector_size = mcp->mb[1];
4640 mbx_cmd_t *mcp = &mc;
4649 mcp->mb[0] = MBC_FLASH_ACCESS_CTRL;
4650 mcp->mb[1] = enable ? FAC_OPT_CMD_WRITE_ENABLE :
4652 mcp->out_mb = MBX_1|MBX_0;
4653 mcp->in_mb = MBX_1|MBX_0;
4654 mcp->tov = MBX_TOV_SECONDS;
4655 mcp->flags = 0;
4656 rval = qla2x00_mailbox_command(vha, mcp);
4661 rval, mcp->mb[0], mcp->mb[1]);
4675 mbx_cmd_t *mcp = &mc;
4684 mcp->mb[0] = MBC_FLASH_ACCESS_CTRL;
4685 mcp->mb[1] = FAC_OPT_CMD_ERASE_SECTOR;
4686 mcp->mb[2] = LSW(start);
4687 mcp->mb[3] = MSW(start);
4688 mcp->mb[4] = LSW(finish);
4689 mcp->mb[5] = MSW(finish);
4690 mcp->out_mb = MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
4691 mcp->in_mb = MBX_2|MBX_1|MBX_0;
4692 mcp->tov = MBX_TOV_SECONDS;
4693 mcp->flags = 0;
4694 rval = qla2x00_mailbox_command(vha, mcp);
4699 rval, mcp->mb[0], mcp->mb[1], mcp->mb[2]);
4713 mbx_cmd_t *mcp = &mc;
4723 mcp->mb[0] = MBC_FLASH_ACCESS_CTRL;
4724 mcp->mb[1] = (lock ? FAC_OPT_CMD_LOCK_SEMAPHORE :
4726 mcp->out_mb = MBX_1|MBX_0;
4727 mcp->in_mb = MBX_1|MBX_0;
4728 mcp->tov = MBX_TOV_SECONDS;
4729 mcp->flags = 0;
4730 rval = qla2x00_mailbox_command(vha, mcp);
4735 rval, mcp->mb[0], mcp->mb[1], mcp->mb[2]);
4749 mbx_cmd_t *mcp = &mc;
4754 mcp->mb[0] = MBC_RESTART_MPI_FW;
4755 mcp->out_mb = MBX_0;
4756 mcp->in_mb = MBX_0|MBX_1;
4757 mcp->tov = MBX_TOV_SECONDS;
4758 mcp->flags = 0;
4759 rval = qla2x00_mailbox_command(vha, mcp);
4764 rval, mcp->mb[0], mcp->mb[1]);
4778 mbx_cmd_t *mcp = &mc;
4793 mcp->mb[0] = MBC_SET_RNID_PARAMS;
4794 mcp->mb[1] = RNID_TYPE_SET_VERSION << 8;
4795 mcp->out_mb = MBX_1|MBX_0;
4797 mcp->mb[i] = le16_to_cpup(str);
4798 mcp->out_mb |= 1<<i;
4801 mcp->mb[i] = 0;
4802 mcp->out_mb |= 1<<i;
4804 mcp->in_mb = MBX_1|MBX_0;
4805 mcp->tov = MBX_TOV_SECONDS;
4806 mcp->flags = 0;
4807 rval = qla2x00_mailbox_command(vha, mcp);
4811 "Failed=%x mb[0]=%x,%x.\n", rval, mcp->mb[0], mcp->mb[1]);
4825 mbx_cmd_t *mcp = &mc;
4854 mcp->mb[0] = MBC_SET_RNID_PARAMS;
4855 mcp->mb[1] = RNID_TYPE_SET_VERSION << 8 | dwlen;
4856 mcp->mb[2] = MSW(LSD(str_dma));
4857 mcp->mb[3] = LSW(LSD(str_dma));
4858 mcp->mb[6] = MSW(MSD(str_dma));
4859 mcp->mb[7] = LSW(MSD(str_dma));
4860 mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
4861 mcp->in_mb = MBX_1|MBX_0;
4862 mcp->tov = MBX_TOV_SECONDS;
4863 mcp->flags = 0;
4864 rval = qla2x00_mailbox_command(vha, mcp);
4868 "Failed=%x mb[0]=%x,%x.\n", rval, mcp->mb[0], mcp->mb[1]);
4885 mbx_cmd_t *mcp = &mc;
4894 mcp->mb[0] = MBC_GET_RNID_PARAMS;
4895 mcp->mb[1] = RNID_TYPE_PORT_LOGIN << 8;
4896 mcp->mb[2] = MSW(buf_dma);
4897 mcp->mb[3] = LSW(buf_dma);
4898 mcp->mb[6] = MSW(MSD(buf_dma));
4899 mcp->mb[7] = LSW(MSD(buf_dma));
4900 mcp->mb[8] = bufsiz/4;
4901 mcp->out_mb = MBX_8|MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
4902 mcp->in_mb = MBX_1|MBX_0;
4903 mcp->tov = MBX_TOV_SECONDS;
4904 mcp->flags = 0;
4905 rval = qla2x00_mailbox_command(vha, mcp);
4909 "Failed=%x mb[0]=%x,%x.\n", rval, mcp->mb[0], mcp->mb[1]);
4927 mbx_cmd_t *mcp = &mc;
4959 mcp->mb[0] = MBC_SET_RNID_PARAMS;
4960 mcp->mb[1] = RNID_TYPE_ELS_CMD << 8;
4961 mcp->mb[2] = MSW(LSD(els_cmd_map_dma));
4962 mcp->mb[3] = LSW(LSD(els_cmd_map_dma));
4963 mcp->mb[6] = MSW(MSD(els_cmd_map_dma));
4964 mcp->mb[7] = LSW(MSD(els_cmd_map_dma));
4965 mcp->out_mb = MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
4966 mcp->in_mb = MBX_1|MBX_0;
4967 mcp->tov = MBX_TOV_SECONDS;
4968 mcp->flags = MBX_DMA_OUT;
4969 mcp->buf_size = ELS_CMD_MAP_SIZE;
4970 rval = qla2x00_mailbox_command(vha, mcp);
4974 "Failed=%x (%x,%x).\n", rval, mcp->mb[0], mcp->mb[1]);
4991 mbx_cmd_t *mcp = &mc;
4999 mcp->mb[0] = MBC_GET_RNID_PARAMS;
5000 mcp->mb[1] = RNID_TYPE_ASIC_TEMP << 8;
5001 mcp->out_mb = MBX_1|MBX_0;
5002 mcp->in_mb = MBX_1|MBX_0;
5003 mcp->tov = MBX_TOV_SECONDS;
5004 mcp->flags = 0;
5005 rval = qla2x00_mailbox_command(vha, mcp);
5006 *temp = mcp->mb[1];
5010 "Failed=%x mb[0]=%x,%x.\n", rval, mcp->mb[0], mcp->mb[1]);
5025 mbx_cmd_t *mcp = &mc;
5037 mcp->mb[0] = MBC_READ_SFP;
5038 mcp->mb[1] = dev;
5039 mcp->mb[2] = MSW(LSD(sfp_dma));
5040 mcp->mb[3] = LSW(LSD(sfp_dma));
5041 mcp->mb[6] = MSW(MSD(sfp_dma));
5042 mcp->mb[7] = LSW(MSD(sfp_dma));
5043 mcp->mb[8] = len;
5044 mcp->mb[9] = off;
5045 mcp->mb[10] = opt;
5046 mcp->out_mb = MBX_10|MBX_9|MBX_8|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
5047 mcp->in_mb = MBX_1|MBX_0;
5048 mcp->tov = MBX_TOV_SECONDS;
5049 mcp->flags = 0;
5050 rval = qla2x00_mailbox_command(vha, mcp);
5053 *sfp = mcp->mb[1];
5057 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
5058 if (mcp->mb[0] == MBS_COMMAND_ERROR && mcp->mb[1] == 0x22) {
5076 mbx_cmd_t *mcp = &mc;
5091 mcp->mb[0] = MBC_WRITE_SFP;
5092 mcp->mb[1] = dev;
5093 mcp->mb[2] = MSW(LSD(sfp_dma));
5094 mcp->mb[3] = LSW(LSD(sfp_dma));
5095 mcp->mb[6] = MSW(MSD(sfp_dma));
5096 mcp->mb[7] = LSW(MSD(sfp_dma));
5097 mcp->mb[8] = len;
5098 mcp->mb[9] = off;
5099 mcp->mb[10] = opt;
5100 mcp->out_mb = MBX_10|MBX_9|MBX_8|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
5101 mcp->in_mb = MBX_1|MBX_0;
5102 mcp->tov = MBX_TOV_SECONDS;
5103 mcp->flags = 0;
5104 rval = qla2x00_mailbox_command(vha, mcp);
5108 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
5123 mbx_cmd_t *mcp = &mc;
5131 mcp->mb[0] = MBC_GET_XGMAC_STATS;
5132 mcp->mb[2] = MSW(stats_dma);
5133 mcp->mb[3] = LSW(stats_dma);
5134 mcp->mb[6] = MSW(MSD(stats_dma));
5135 mcp->mb[7] = LSW(MSD(stats_dma));
5136 mcp->mb[8] = size_in_bytes >> 2;
5137 mcp->out_mb = MBX_8|MBX_7|MBX_6|MBX_3|MBX_2|MBX_0;
5138 mcp->in_mb = MBX_2|MBX_1|MBX_0;
5139 mcp->tov = MBX_TOV_SECONDS;
5140 mcp->flags = 0;
5141 rval = qla2x00_mailbox_command(vha, mcp);
5146 rval, mcp->mb[0], mcp->mb[1], mcp->mb[2]);
5152 *actual_size = mcp->mb[2] << 2;
5164 mbx_cmd_t *mcp = &mc;
5172 mcp->mb[0] = MBC_GET_DCBX_PARAMS;
5173 mcp->mb[1] = 0;
5174 mcp->mb[2] = MSW(tlv_dma);
5175 mcp->mb[3] = LSW(tlv_dma);
5176 mcp->mb[6] = MSW(MSD(tlv_dma));
5177 mcp->mb[7] = LSW(MSD(tlv_dma));
5178 mcp->mb[8] = size;
5179 mcp->out_mb = MBX_8|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
5180 mcp->in_mb = MBX_2|MBX_1|MBX_0;
5181 mcp->tov = MBX_TOV_SECONDS;
5182 mcp->flags = 0;
5183 rval = qla2x00_mailbox_command(vha, mcp);
5188 rval, mcp->mb[0], mcp->mb[1], mcp->mb[2]);
5202 mbx_cmd_t *mcp = &mc;
5210 mcp->mb[0] = MBC_READ_RAM_EXTENDED;
5211 mcp->mb[1] = LSW(risc_addr);
5212 mcp->mb[8] = MSW(risc_addr);
5213 mcp->out_mb = MBX_8|MBX_1|MBX_0;
5214 mcp->in_mb = MBX_3|MBX_2|MBX_0;
5215 mcp->tov = MBX_TOV_SECONDS;
5216 mcp->flags = 0;
5217 rval = qla2x00_mailbox_command(vha, mcp);
5220 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
5224 *data = mcp->mb[3] << 16 | mcp->mb[2];
5236 mbx_cmd_t *mcp = &mc;
5241 memset(mcp->mb, 0 , sizeof(mcp->mb));
5242 mcp->mb[0] = MBC_DIAGNOSTIC_LOOP_BACK;
5243 mcp->mb[1] = mreq->options | BIT_6; // BIT_6 specifies 64 bit addressing
5246 mcp->mb[10] = LSW(mreq->transfer_size);
5247 mcp->mb[11] = MSW(mreq->transfer_size);
5250 mcp->mb[14] = LSW(mreq->send_dma);
5251 mcp->mb[15] = MSW(mreq->send_dma);
5252 mcp->mb[20] = LSW(MSD(mreq->send_dma));
5253 mcp->mb[21] = MSW(MSD(mreq->send_dma));
5256 mcp->mb[16] = LSW(mreq->rcv_dma);
5257 mcp->mb[17] = MSW(mreq->rcv_dma);
5258 mcp->mb[6] = LSW(MSD(mreq->rcv_dma));
5259 mcp->mb[7] = MSW(MSD(mreq->rcv_dma));
5262 mcp->mb[18] = LSW(mreq->iteration_count);
5263 mcp->mb[19] = MSW(mreq->iteration_count);
5265 mcp->out_mb = MBX_21|MBX_20|MBX_19|MBX_18|MBX_17|MBX_16|MBX_15|
5268 mcp->out_mb |= MBX_2;
5269 mcp->in_mb = MBX_19|MBX_18|MBX_3|MBX_2|MBX_1|MBX_0;
5271 mcp->buf_size = mreq->transfer_size;
5272 mcp->tov = MBX_TOV_SECONDS;
5273 mcp->flags = MBX_DMA_OUT|MBX_DMA_IN|IOCTL_CMD;
5275 rval = qla2x00_mailbox_command(vha, mcp);
5280 "mb[19]=%x.\n", rval, mcp->mb[0], mcp->mb[1], mcp->mb[2],
5281 mcp->mb[3], mcp->mb[18], mcp->mb[19]);
5288 memcpy( mresp, mcp->mb, 64);
5298 mbx_cmd_t *mcp = &mc;
5304 memset(mcp->mb, 0 , sizeof(mcp->mb));
5305 mcp->mb[0] = MBC_DIAGNOSTIC_ECHO;
5307 mcp->mb[1] = mreq->options | BIT_15 | BIT_6;
5309 mcp->mb[2] = vha->fcoe_fcf_idx;
5311 mcp->mb[16] = LSW(mreq->rcv_dma);
5312 mcp->mb[17] = MSW(mreq->rcv_dma);
5313 mcp->mb[6] = LSW(MSD(mreq->rcv_dma));
5314 mcp->mb[7] = MSW(MSD(mreq->rcv_dma));
5316 mcp->mb[10] = LSW(mreq->transfer_size);
5318 mcp->mb[14] = LSW(mreq->send_dma);
5319 mcp->mb[15] = MSW(mreq->send_dma);
5320 mcp->mb[20] = LSW(MSD(mreq->send_dma));
5321 mcp->mb[21] = MSW(MSD(mreq->send_dma));
5323 mcp->out_mb = MBX_21|MBX_20|MBX_17|MBX_16|MBX_15|
5326 mcp->out_mb |= MBX_2;
5328 mcp->in_mb = MBX_0;
5331 mcp->in_mb |= MBX_1;
5334 mcp->in_mb |= MBX_3;
5336 mcp->tov = MBX_TOV_SECONDS;
5337 mcp->flags = MBX_DMA_OUT|MBX_DMA_IN|IOCTL_CMD;
5338 mcp->buf_size = mreq->transfer_size;
5340 rval = qla2x00_mailbox_command(vha, mcp);
5345 rval, mcp->mb[0], mcp->mb[1]);
5352 memcpy(mresp, mcp->mb, 64);
5361 mbx_cmd_t *mcp = &mc;
5366 mcp->mb[0] = MBC_ISP84XX_RESET;
5367 mcp->mb[1] = enable_diagnostic;
5368 mcp->out_mb = MBX_1|MBX_0;
5369 mcp->in_mb = MBX_1|MBX_0;
5370 mcp->tov = MBX_TOV_SECONDS;
5371 mcp->flags = MBX_DMA_OUT|MBX_DMA_IN|IOCTL_CMD;
5372 rval = qla2x00_mailbox_command(vha, mcp);
5388 mbx_cmd_t *mcp = &mc;
5396 mcp->mb[0] = MBC_WRITE_RAM_WORD_EXTENDED;
5397 mcp->mb[1] = LSW(risc_addr);
5398 mcp->mb[2] = LSW(data);
5399 mcp->mb[3] = MSW(data);
5400 mcp->mb[8] = MSW(risc_addr);
5401 mcp->out_mb = MBX_8|MBX_3|MBX_2|MBX_1|MBX_0;
5402 mcp->in_mb = MBX_1|MBX_0;
5403 mcp->tov = MBX_TOV_SECONDS;
5404 mcp->flags = 0;
5405 rval = qla2x00_mailbox_command(vha, mcp);
5409 rval, mcp->mb[0], mcp->mb[1]);
5486 mbx_cmd_t *mcp = &mc;
5497 memset(mcp, 0, sizeof(*mcp));
5514 mcp->mb[0] = MBC_DATA_RATE;
5515 mcp->mb[1] = mode;
5516 mcp->mb[2] = val;
5518 mcp->out_mb = MBX_2|MBX_1|MBX_0;
5519 mcp->in_mb = MBX_2|MBX_1|MBX_0;
5521 mcp->in_mb |= MBX_4|MBX_3;
5522 mcp->tov = MBX_TOV_SECONDS;
5523 mcp->flags = 0;
5524 rval = qla2x00_mailbox_command(vha, mcp);
5527 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
5529 if (mcp->mb[1] != 0x7)
5531 "Speed set:0x%x\n", mcp->mb[1]);
5545 mbx_cmd_t *mcp = &mc;
5554 mcp->mb[0] = MBC_DATA_RATE;
5555 mcp->mb[1] = QLA_GET_DATA_RATE;
5556 mcp->out_mb = MBX_1|MBX_0;
5557 mcp->in_mb = MBX_2|MBX_1|MBX_0;
5559 mcp->in_mb |= MBX_4|MBX_3;
5560 mcp->tov = MBX_TOV_SECONDS;
5561 mcp->flags = 0;
5562 rval = qla2x00_mailbox_command(vha, mcp);
5565 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
5567 if (mcp->mb[1] != 0x7)
5568 ha->link_data_rate = mcp->mb[1];
5571 if (mcp->mb[4] & BIT_0)
5578 if (mcp->mb[1] != 0x7)
5579 ha->link_data_rate = mcp->mb[1];
5590 mbx_cmd_t *mcp = &mc;
5599 mcp->mb[0] = MBC_GET_PORT_CONFIG;
5600 mcp->out_mb = MBX_0;
5601 mcp->in_mb = MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
5602 mcp->tov = MBX_TOV_SECONDS;
5603 mcp->flags = 0;
5605 rval = qla2x00_mailbox_command(vha, mcp);
5609 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
5612 memcpy(mb, &mcp->mb[1], sizeof(uint16_t) * 4);
5625 mbx_cmd_t *mcp = &mc;
5630 mcp->mb[0] = MBC_SET_PORT_CONFIG;
5632 memcpy(&mcp->mb[1], mb, sizeof(uint16_t) * 4);
5633 mcp->out_mb = MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
5634 mcp->in_mb = MBX_0;
5635 mcp->tov = MBX_TOV_SECONDS;
5636 mcp->flags = 0;
5637 rval = qla2x00_mailbox_command(vha, mcp);
5641 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
5656 mbx_cmd_t *mcp = &mc;
5665 mcp->mb[0] = MBC_PORT_PARAMS;
5666 mcp->mb[1] = loop_id;
5668 mcp->mb[2] = BIT_1;
5670 mcp->mb[2] = BIT_2;
5671 mcp->mb[4] = priority & 0xf;
5672 mcp->mb[9] = vha->vp_idx;
5673 mcp->out_mb = MBX_9|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
5674 mcp->in_mb = MBX_4|MBX_3|MBX_1|MBX_0;
5675 mcp->tov = MBX_TOV_SECONDS;
5676 mcp->flags = 0;
5677 rval = qla2x00_mailbox_command(vha, mcp);
5679 mb[0] = mcp->mb[0];
5680 mb[1] = mcp->mb[1];
5681 mb[3] = mcp->mb[3];
5682 mb[4] = mcp->mb[4];
5748 mbx_cmd_t *mcp = &mc;
5756 memset(mcp, 0, sizeof(mbx_cmd_t));
5757 mcp->mb[0] = MBC_TOGGLE_INTERRUPT;
5758 mcp->mb[1] = 1;
5760 mcp->out_mb = MBX_1|MBX_0;
5761 mcp->in_mb = MBX_0;
5762 mcp->tov = MBX_TOV_SECONDS;
5763 mcp->flags = 0;
5765 rval = qla2x00_mailbox_command(vha, mcp);
5768 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
5783 mbx_cmd_t *mcp = &mc;
5791 memset(mcp, 0, sizeof(mbx_cmd_t));
5792 mcp->mb[0] = MBC_TOGGLE_INTERRUPT;
5793 mcp->mb[1] = 0;
5795 mcp->out_mb = MBX_1|MBX_0;
5796 mcp->in_mb = MBX_0;
5797 mcp->tov = MBX_TOV_SECONDS;
5798 mcp->flags = 0;
5800 rval = qla2x00_mailbox_command(vha, mcp);
5803 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
5817 mbx_cmd_t *mcp = &mc;
5823 memset(mcp->mb, 0 , sizeof(mcp->mb));
5824 mcp->mb[0] = LSW(MBC_DIAGNOSTIC_MINIDUMP_TEMPLATE);
5825 mcp->mb[1] = MSW(MBC_DIAGNOSTIC_MINIDUMP_TEMPLATE);
5826 mcp->mb[2] = LSW(RQST_TMPLT_SIZE);
5827 mcp->mb[3] = MSW(RQST_TMPLT_SIZE);
5829 mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0;
5830 mcp->in_mb = MBX_14|MBX_13|MBX_12|MBX_11|MBX_10|MBX_9|MBX_8|
5833 mcp->flags = MBX_DMA_OUT|MBX_DMA_IN|IOCTL_CMD;
5834 mcp->tov = MBX_TOV_SECONDS;
5835 rval = qla2x00_mailbox_command(vha, mcp);
5841 (mcp->mb[1] << 16) | mcp->mb[0],
5842 (mcp->mb[3] << 16) | mcp->mb[2]);
5846 ha->md_template_size = ((mcp->mb[3] << 16) | mcp->mb[2]);
5861 mbx_cmd_t *mcp = &mc;
5875 memset(mcp->mb, 0 , sizeof(mcp->mb));
5876 mcp->mb[0] = LSW(MBC_DIAGNOSTIC_MINIDUMP_TEMPLATE);
5877 mcp->mb[1] = MSW(MBC_DIAGNOSTIC_MINIDUMP_TEMPLATE);
5878 mcp->mb[2] = LSW(RQST_TMPLT);
5879 mcp->mb[3] = MSW(RQST_TMPLT);
5880 mcp->mb[4] = LSW(LSD(ha->md_tmplt_hdr_dma));
5881 mcp->mb[5] = MSW(LSD(ha->md_tmplt_hdr_dma));
5882 mcp->mb[6] = LSW(MSD(ha->md_tmplt_hdr_dma));
5883 mcp->mb[7] = MSW(MSD(ha->md_tmplt_hdr_dma));
5884 mcp->mb[8] = LSW(ha->md_template_size);
5885 mcp->mb[9] = MSW(ha->md_template_size);
5887 mcp->flags = MBX_DMA_OUT|MBX_DMA_IN|IOCTL_CMD;
5888 mcp->tov = MBX_TOV_SECONDS;
5889 mcp->out_mb = MBX_11|MBX_10|MBX_9|MBX_8|
5891 mcp->in_mb = MBX_3|MBX_2|MBX_1|MBX_0;
5892 rval = qla2x00_mailbox_command(vha, mcp);
5897 ((mcp->mb[1] << 16) | mcp->mb[0]),
5898 ((mcp->mb[3] << 16) | mcp->mb[2]));
5910 mbx_cmd_t *mcp = &mc;
5925 memset(mcp->mb, 0 , sizeof(mcp->mb));
5927 mcp->mb[0] = LSW(MBC_DIAGNOSTIC_MINIDUMP_TEMPLATE);
5928 mcp->mb[1] = MSW(MBC_DIAGNOSTIC_MINIDUMP_TEMPLATE);
5929 mcp->mb[2] = LSW(RQST_TMPLT);
5930 mcp->mb[3] = MSW(RQST_TMPLT);
5931 mcp->mb[4] = LSW(LSD(ha->md_tmplt_hdr_dma + offset));
5932 mcp->mb[5] = MSW(LSD(ha->md_tmplt_hdr_dma + offset));
5933 mcp->mb[6] = LSW(MSD(ha->md_tmplt_hdr_dma + offset));
5934 mcp->mb[7] = MSW(MSD(ha->md_tmplt_hdr_dma + offset));
5935 mcp->mb[8] = LSW(size);
5936 mcp->mb[9] = MSW(size);
5937 mcp->mb[10] = offset & 0x0000FFFF;
5938 mcp->mb[11] = offset & 0xFFFF0000;
5939 mcp->flags = MBX_DMA_OUT|MBX_DMA_IN|IOCTL_CMD;
5940 mcp->tov = MBX_TOV_SECONDS;
5941 mcp->out_mb = MBX_11|MBX_10|MBX_9|MBX_8|
5943 mcp->in_mb = MBX_3|MBX_2|MBX_1|MBX_0;
5944 rval = qla2x00_mailbox_command(vha, mcp);
5949 ((mcp->mb[1] << 16) | mcp->mb[0]),
5950 ((mcp->mb[3] << 16) | mcp->mb[2]));
5966 mbx_cmd_t *mcp = &mc;
5974 memset(mcp, 0, sizeof(mbx_cmd_t));
5975 mcp->mb[0] = MBC_SET_LED_CONFIG;
5976 mcp->mb[1] = led_cfg[0];
5977 mcp->mb[2] = led_cfg[1];
5979 mcp->mb[3] = led_cfg[2];
5980 mcp->mb[4] = led_cfg[3];
5981 mcp->mb[5] = led_cfg[4];
5982 mcp->mb[6] = led_cfg[5];
5985 mcp->out_mb = MBX_2|MBX_1|MBX_0;
5987 mcp->out_mb |= MBX_6|MBX_5|MBX_4|MBX_3;
5988 mcp->in_mb = MBX_0;
5989 mcp->tov = MBX_TOV_SECONDS;
5990 mcp->flags = 0;
5992 rval = qla2x00_mailbox_command(vha, mcp);
5995 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
6010 mbx_cmd_t *mcp = &mc;
6018 memset(mcp, 0, sizeof(mbx_cmd_t));
6019 mcp->mb[0] = MBC_GET_LED_CONFIG;
6021 mcp->out_mb = MBX_0;
6022 mcp->in_mb = MBX_2|MBX_1|MBX_0;
6024 mcp->in_mb |= MBX_6|MBX_5|MBX_4|MBX_3;
6025 mcp->tov = MBX_TOV_SECONDS;
6026 mcp->flags = 0;
6028 rval = qla2x00_mailbox_command(vha, mcp);
6031 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
6033 led_cfg[0] = mcp->mb[1];
6034 led_cfg[1] = mcp->mb[2];
6036 led_cfg[2] = mcp->mb[3];
6037 led_cfg[3] = mcp->mb[4];
6038 led_cfg[4] = mcp->mb[5];
6039 led_cfg[5] = mcp->mb[6];
6054 mbx_cmd_t *mcp = &mc;
6062 memset(mcp, 0, sizeof(mbx_cmd_t));
6063 mcp->mb[0] = MBC_SET_LED_CONFIG;
6065 mcp->mb[7] = 0xE;
6067 mcp->mb[7] = 0xD;
6069 mcp->out_mb = MBX_7|MBX_0;
6070 mcp->in_mb = MBX_0;
6071 mcp->tov = MBX_TOV_SECONDS;
6072 mcp->flags = 0;
6074 rval = qla2x00_mailbox_command(vha, mcp);
6077 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
6092 mbx_cmd_t *mcp = &mc;
6100 mcp->mb[0] = MBC_WRITE_REMOTE_REG;
6101 mcp->mb[1] = LSW(reg);
6102 mcp->mb[2] = MSW(reg);
6103 mcp->mb[3] = LSW(data);
6104 mcp->mb[4] = MSW(data);
6105 mcp->out_mb = MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
6107 mcp->in_mb = MBX_1|MBX_0;
6108 mcp->tov = MBX_TOV_SECONDS;
6109 mcp->flags = 0;
6110 rval = qla2x00_mailbox_command(vha, mcp);
6114 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
6129 mbx_cmd_t *mcp = &mc;
6142 mcp->mb[0] = MBC_PORT_LOGOUT;
6143 mcp->mb[1] = fcport->loop_id;
6144 mcp->mb[10] = BIT_15;
6145 mcp->out_mb = MBX_10|MBX_1|MBX_0;
6146 mcp->in_mb = MBX_0;
6147 mcp->tov = MBX_TOV_SECONDS;
6148 mcp->flags = 0;
6149 rval = qla2x00_mailbox_command(vha, mcp);
6152 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
6165 mbx_cmd_t *mcp = &mc;
6175 mcp->mb[0] = MBC_READ_REMOTE_REG;
6176 mcp->mb[1] = LSW(reg);
6177 mcp->mb[2] = MSW(reg);
6178 mcp->out_mb = MBX_2|MBX_1|MBX_0;
6179 mcp->in_mb = MBX_4|MBX_3|MBX_1|MBX_0;
6180 mcp->tov = MBX_TOV_SECONDS;
6181 mcp->flags = 0;
6182 rval = qla2x00_mailbox_command(vha, mcp);
6187 rval, mcp->mb[0], mcp->mb[1]);
6189 *data = (mcp->mb[3] | (mcp->mb[4] << 16));
6216 mbx_cmd_t *mcp = &mc;
6224 mcp->mb[0] = MBC_RESTART_NIC_FIRMWARE;
6225 mcp->out_mb = MBX_0;
6226 mcp->in_mb = MBX_1|MBX_0;
6227 mcp->tov = MBX_TOV_SECONDS;
6228 mcp->flags = 0;
6229 rval = qla2x00_mailbox_command(vha, mcp);
6234 rval, mcp->mb[0], mcp->mb[1]);
6249 mbx_cmd_t *mcp = &mc;
6258 mcp->mb[0] = MBC_SET_ACCESS_CONTROL;
6259 mcp->mb[1] = options;
6260 mcp->out_mb = MBX_1|MBX_0;
6262 mcp->mb[2] = LSW(start_addr);
6263 mcp->mb[3] = MSW(start_addr);
6264 mcp->mb[4] = LSW(end_addr);
6265 mcp->mb[5] = MSW(end_addr);
6266 mcp->out_mb |= MBX_5|MBX_4|MBX_3|MBX_2;
6268 mcp->in_mb = MBX_2|MBX_1|MBX_0;
6270 mcp->in_mb |= MBX_4|MBX_3;
6271 mcp->tov = MBX_TOV_SECONDS;
6272 mcp->flags = 0;
6273 rval = qla2x00_mailbox_command(vha, mcp);
6278 rval, mcp->mb[0], mcp->mb[1], mcp->mb[2], mcp->mb[3],
6279 mcp->mb[4]);
6283 *sector_size = mcp->mb[1];
6286 "Driver-lock id=%x%x", mcp->mb[4], mcp->mb[3]);
6289 "Flash-lock id=%x%x", mcp->mb[4], mcp->mb[3]);
6303 mbx_cmd_t *mcp = &mc;
6311 mcp->mb[0] = MBC_DUMP_RISC_RAM_EXTENDED;
6312 mcp->mb[1] = LSW(addr);
6313 mcp->mb[2] = MSW(req_dma);
6314 mcp->mb[3] = LSW(req_dma);
6315 mcp->mb[4] = MSW(size);
6316 mcp->mb[5] = LSW(size);
6317 mcp->mb[6] = MSW(MSD(req_dma));
6318 mcp->mb[7] = LSW(MSD(req_dma));
6319 mcp->mb[8] = MSW(addr);
6322 mcp->mb[10] = BIT_7 | 0x40;
6324 mcp->out_mb |= MBX_10|MBX_8|MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|
6327 mcp->in_mb = MBX_0;
6328 mcp->tov = MBX_TOV_SECONDS;
6329 mcp->flags = 0;
6330 rval = qla2x00_mailbox_command(vha, mcp);
6334 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
6349 mbx_cmd_t *mcp = &mc;
6368 mcp->mb[0] = MBC_DPORT_DIAGNOSTICS;
6369 mcp->mb[1] = options;
6370 mcp->mb[2] = MSW(LSD(dd_dma));
6371 mcp->mb[3] = LSW(LSD(dd_dma));
6372 mcp->mb[6] = MSW(MSD(dd_dma));
6373 mcp->mb[7] = LSW(MSD(dd_dma));
6374 mcp->mb[8] = size;
6375 mcp->out_mb = MBX_8|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
6376 mcp->in_mb = MBX_3|MBX_2|MBX_1|MBX_0;
6377 mcp->buf_size = size;
6378 mcp->flags = MBX_DMA_IN;
6379 mcp->tov = MBX_TOV_SECONDS * 4;
6380 rval = qla2x00_mailbox_command(vha, mcp);
6408 int qla24xx_send_mb_cmd(struct scsi_qla_host *vha, mbx_cmd_t *mcp)
6422 sp->name = mb_to_str(mcp->mb[0]);
6430 memcpy(sp->u.iocb_cmd.u.mbx.out_mb, mcp->mb, SIZEOF_IOCB_MB_REG);
6446 memcpy(mcp->mb, sp->u.iocb_cmd.u.mbx.in_mb, SIZEOF_IOCB_MB_REG);
6630 mbx_cmd_t *mcp = &mc;
6635 memset(mcp->mb, 0 , sizeof(mcp->mb));
6636 mcp->mb[0] = MBC_GET_SET_ZIO_THRESHOLD;
6637 mcp->mb[1] = 1;
6638 mcp->mb[2] = value;
6639 mcp->out_mb = MBX_2 | MBX_1 | MBX_0;
6640 mcp->in_mb = MBX_2 | MBX_0;
6641 mcp->tov = MBX_TOV_SECONDS;
6642 mcp->flags = 0;
6644 rval = qla2x00_mailbox_command(vha, mcp);
6656 mbx_cmd_t *mcp = &mc;
6661 memset(mcp->mb, 0, sizeof(mcp->mb));
6662 mcp->mb[0] = MBC_GET_SET_ZIO_THRESHOLD;
6663 mcp->mb[1] = 0;
6664 mcp->out_mb = MBX_1 | MBX_0;
6665 mcp->in_mb = MBX_2 | MBX_0;
6666 mcp->tov = MBX_TOV_SECONDS;
6667 mcp->flags = 0;
6669 rval = qla2x00_mailbox_command(vha, mcp);
6766 mbx_cmd_t *mcp = &mc;
6768 mcp->mb[0] = MBC_SECURE_FLASH_UPDATE;
6769 mcp->mb[1] = opts;
6770 mcp->mb[2] = region;
6771 mcp->mb[3] = MSW(len);
6772 mcp->mb[4] = LSW(len);
6773 mcp->mb[5] = MSW(sfub_dma_addr);
6774 mcp->mb[6] = LSW(sfub_dma_addr);
6775 mcp->mb[7] = MSW(MSD(sfub_dma_addr));
6776 mcp->mb[8] = LSW(MSD(sfub_dma_addr));
6777 mcp->mb[9] = sfub_len;
6778 mcp->out_mb =
6780 mcp->in_mb = MBX_2|MBX_1|MBX_0;
6781 mcp->tov = MBX_TOV_SECONDS;
6782 mcp->flags = 0;
6783 rval = qla2x00_mailbox_command(vha, mcp);
6787 __func__, vha->host_no, rval, mcp->mb[0], mcp->mb[1],
6788 mcp->mb[2]);
6799 mbx_cmd_t *mcp = &mc;
6804 mcp->mb[0] = MBC_WRITE_REMOTE_REG;
6805 mcp->mb[1] = LSW(addr);
6806 mcp->mb[2] = MSW(addr);
6807 mcp->mb[3] = LSW(data);
6808 mcp->mb[4] = MSW(data);
6809 mcp->out_mb = MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
6810 mcp->in_mb = MBX_1|MBX_0;
6811 mcp->tov = MBX_TOV_SECONDS;
6812 mcp->flags = 0;
6813 rval = qla2x00_mailbox_command(vha, mcp);
6817 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
6831 mbx_cmd_t *mcp = &mc;
6836 mcp->mb[0] = MBC_READ_REMOTE_REG;
6837 mcp->mb[1] = LSW(addr);
6838 mcp->mb[2] = MSW(addr);
6839 mcp->out_mb = MBX_2|MBX_1|MBX_0;
6840 mcp->in_mb = MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
6841 mcp->tov = MBX_TOV_SECONDS;
6842 mcp->flags = 0;
6843 rval = qla2x00_mailbox_command(vha, mcp);
6845 *data = (uint32_t)((((uint32_t)mcp->mb[4]) << 16) | mcp->mb[3]);
6849 "Failed=%x mb[0]=%x.\n", rval, mcp->mb[0]);
6863 mbx_cmd_t *mcp = &mc;
6872 mcp->mb[0] = MBC_SET_GET_FC_LED_CONFIG;
6873 mcp->mb[1] = options;
6874 mcp->out_mb = MBX_1|MBX_0;
6875 mcp->in_mb = MBX_1|MBX_0;
6878 mcp->mb[2] = led[2];
6879 mcp->out_mb |= MBX_2;
6882 mcp->mb[3] = led[0];
6883 mcp->out_mb |= MBX_3;
6886 mcp->mb[4] = led[1];
6887 mcp->out_mb |= MBX_4;
6890 mcp->in_mb |= MBX_4|MBX_3|MBX_2;
6892 mcp->tov = MBX_TOV_SECONDS;
6893 mcp->flags = 0;
6894 rval = qla2x00_mailbox_command(vha, mcp);
6897 __func__, rval, mcp->mb[0], mcp->mb[1]);
6905 led[2] = mcp->mb[2];
6906 led[0] = mcp->mb[3];
6907 led[1] = mcp->mb[4];