23 #include <linux/pci.h>
24 #include <linux/slab.h>
29 #include <scsi/scsi.h>
85 if (!mp || !mp->
virt) {
88 "2605 lpfc_dump_static_vport: memory"
89 " allocation failed\n");
93 INIT_LIST_HEAD(&mp->
list);
297 INIT_LIST_HEAD(&mp->
list);
410 "0475 Not configured for supporting MSI-X "
417 "0476 HBA not supporting SLI-3 or later "
418 "SLI Revision: 0x%x\n", phba->
sli_rev);
432 attentionConditions[1] = 0;
434 mb->
un.
varCfgMSI.attentionConditions[0] = attentionConditions[0];
435 mb->
un.
varCfgMSI.attentionConditions[1] = attentionConditions[1];
440 #ifdef __BIG_ENDIAN_BITFIELD
452 mb->
un.
varCfgMSI.autoClearHA[0] = attentionConditions[0];
453 mb->
un.
varCfgMSI.autoClearHA[1] = attentionConditions[1];
519 if (vpd->
rev.feaLevelHigh >= 0x02){
600 if (!mp || !mp->
virt) {
605 "0301 READ_SPARAM: no buffers\n");
608 INIT_LIST_HEAD(&mp->
list);
648 if ((vpi != 0xffff) &&
753 if (!mp || !mp->
virt) {
758 "0302 REG_LOGIN: no buffers, VPI:%d DID:x%x, "
759 "rpi x%x\n", vpi, did, rpi);
762 INIT_LIST_HEAD(&mp->
list);
938 lpfc_config_pcb_setup(
struct lpfc_hba * phba)
951 pring = &psli->
ring[
i];
961 if ((pring->
sli.
sli3.numCiocb == 0) ||
962 (pring->
sli.
sli3.numRiocb == 0)) {
974 pring->
sli.
sli3.cmdringaddr = (
void *)&phba->
IOCBs[iocbCnt];
979 pdma_addr = phba->
slim2p.phys + offset;
982 iocbCnt += pring->
sli.
sli3.numCiocb;
985 pring->
sli.
sli3.rspringaddr = (
void *) &phba->
IOCBs[iocbCnt];
990 pdma_addr = phba->
slim2p.phys + offset;
993 iocbCnt += pring->
sli.
sli3.numRiocb;
1160 lpfc_build_hbq_profile2(hbqmb, hbq_desc);
1161 else if (hbq_desc->
profile == 3)
1162 lpfc_build_hbq_profile3(hbqmb, hbq_desc);
1163 else if (hbq_desc->
profile == 5)
1164 lpfc_build_hbq_profile5(hbqmb, hbq_desc);
1214 pring = &psli->
ring[ring];
1220 if (pring->
prt[0].profile) {
1226 for (i = 0; i < pring->
num_mask; i++) {
1269 mb->un.varCfgPort.pcbLen =
sizeof(
PCB_t);
1277 mb->un.varCfgPort.hps = 1;
1283 mb->un.varCfgPort.cbg = 1;
1285 mb->un.varCfgPort.cdss = 1;
1286 mb->un.varCfgPort.cerbm = 1;
1287 mb->un.varCfgPort.ccrp = 1;
1292 mb->un.varCfgPort.cmv = 1;
1294 mb->un.varCfgPort.max_vpi = phba->
max_vpi = 0;
1297 mb->un.varCfgPort.sli_mode = phba->
sli_rev;
1301 mb->un.varCfgPort.casabt = 1;
1374 mb->un.varCfgPort.hps = 1;
1377 phba->
host_gp = &mb_slim->us.s3.host[0];
1378 phba->
hbq_put = &mb_slim->us.s3.hbq_put[0];
1380 phba->
host_gp = &mb_slim->us.s2.host[0];
1389 phba->
pcb->hgpAddrHigh = bar_high;
1391 phba->
pcb->hgpAddrHigh = 0;
1395 for (i = 0; i < phba->
sli.num_rings; i++) {
1396 lpfc_memcpy_to_slim(phba->
host_gp + i, &hgp,
1404 mbx.us.s3_pgp.port);
1407 pdma_addr = phba->
slim2p.phys + pgp_offset;
1412 lpfc_config_pcb_setup(phba);
1415 if (lpfc_is_LC_HBA(phba->
pcidev->device)) {
1420 memcpy(&
mb->un.varCfgPort.hbainit, hbainit, 20);
1533 unsigned long iflag;
1538 spin_unlock_irqrestore(&phba->
hbalock, iflag);
1561 if (!mboxq->
vport) {
1563 "1814 Mbox x%x failed, no vport\n",
1676 &mbox->
u.
mqe.un.nembed_cmd;
1679 nembed_sge->
sge[sgentry].length =
length;
1697 &mbox->
u.
mqe.un.nembed_cmd;
1698 sge->
pa_lo = nembed_sge->
sge[sgentry].pa_lo;
1699 sge->
pa_hi = nembed_sge->
sge[sgentry].pa_hi;
1700 sge->
length = nembed_sge->
sge[sgentry].length;
1718 sli4_cfg = &mbox->
u.
mqe.un.sli4_config;
1721 if (
bf_get(lpfc_mbox_hdr_emb, &sli4_cfg->
header.cfg_mhdr)) {
1727 sgecount =
bf_get(lpfc_mbox_hdr_sge_cnt, &sli4_cfg->
header.cfg_mhdr);
1734 for (sgentry = 0; sgentry < sgecount; sgentry++) {
1738 mbox->
sge_array->addr[sgentry], phyaddr);
1773 memset(mbox, 0,
sizeof(*mbox));
1777 sli4_config = &mbox->
u.
mqe.un.sli4_config;
1782 bf_set(lpfc_mbox_hdr_emb, &sli4_config->
header.cfg_mhdr, 1);
1785 bf_set(lpfc_mbox_hdr_opcode,
1786 &sli4_config->
header.cfg_shdr.request, opcode);
1787 bf_set(lpfc_mbox_hdr_subsystem,
1788 &sli4_config->
header.cfg_shdr.request, subsystem);
1789 sli4_config->
header.cfg_shdr.request.request_length =
1803 "2527 Failed to allocate non-embedded SGE "
1807 for (pagen = 0, alloc_len = 0; pagen < pcount; pagen++) {
1823 resid_len = length - alloc_len;
1836 sli4_config->
header.cfg_mhdr.payload_length = alloc_len;
1837 bf_set(lpfc_mbox_hdr_sge_cnt, &sli4_config->
header.cfg_mhdr, pagen);
1842 bf_set(lpfc_mbox_hdr_subsystem, &cfg_shdr->
request, subsystem);
1843 cfg_shdr->
request.request_length =
1874 void *virtaddr =
NULL;
1880 if (virtaddr ==
NULL)
1890 bf_set(lpfc_mbx_alloc_rsrc_extents_type,
1891 &mbox->
u.
mqe.un.alloc_rsrc_extents.u.req,
1895 bf_set(lpfc_mbx_alloc_rsrc_extents_type,
1896 n_rsrc_extnt, rsrc_type);
1898 &n_rsrc_extnt->
word4,
1907 bf_set(lpfc_mbx_alloc_rsrc_extents_cnt,
1908 &mbox->
u.
mqe.un.alloc_rsrc_extents.u.req,
1911 bf_set(lpfc_mbx_alloc_rsrc_extents_cnt,
1912 n_rsrc_extnt, exts_count);
1921 "2929 Resource Extent Opcode x%x is "
1922 "unsupported\n", opcode);
1947 sli4_cfg = &mbox->
u.
mqe.un.sli4_config;
1950 if (
bf_get(lpfc_mbox_hdr_emb, &sli4_cfg->
header.cfg_mhdr)) {
1951 cfg_shdr = &mbox->
u.
mqe.un.sli4_config.header.cfg_shdr;
1980 sli4_cfg = &mbox->
u.
mqe.un.sli4_config;
1983 if (
bf_get(lpfc_mbox_hdr_emb, &sli4_cfg->
header.cfg_mhdr)) {
1984 cfg_shdr = &mbox->
u.
mqe.un.sli4_config.header.cfg_shdr;
2022 sizeof(union lpfc_sli4_cfg_shdr) + 2 *
sizeof(
uint32_t);
2029 if (alloc_len < req_len) {
2031 "0291 Allocated DMA memory size (x%x) is "
2032 "less than the requested DMA memory "
2033 "size (x%x)\n", alloc_len, req_len);
2046 bf_set(lpfc_mbx_read_fcf_tbl_indx, &read_fcf->
u.
request, fcf_index);
2048 bytep = virt_addr +
sizeof(
union lpfc_sli4_cfg_shdr);
2069 bf_set(lpfc_mbx_rq_ftr_rq_fcpi, &mboxq->
u.
mqe.un.req_ftrs, 1);
2070 bf_set(lpfc_mbx_rq_ftr_rq_perfh, &mboxq->
u.
mqe.un.req_ftrs, 1);
2074 bf_set(lpfc_mbx_rq_ftr_rq_dif, &mboxq->
u.
mqe.un.req_ftrs, 1);
2078 bf_set(lpfc_mbx_rq_ftr_rq_npiv, &mboxq->
u.
mqe.un.req_ftrs, 1);
2099 memset(mbox, 0,
sizeof(*mbox));
2100 mbox->
vport = vport;
2101 init_vfi = &mbox->
u.
mqe.un.init_vfi;
2103 bf_set(lpfc_init_vfi_vr, init_vfi, 1);
2104 bf_set(lpfc_init_vfi_vt, init_vfi, 1);
2105 bf_set(lpfc_init_vfi_vp, init_vfi, 1);
2106 bf_set(lpfc_init_vfi_vfi, init_vfi,
2107 vport->
phba->sli4_hba.vfi_ids[vport->
vfi]);
2108 bf_set(lpfc_init_vfi_vpi, init_vfi,
2109 vport->
phba->vpi_ids[vport->
vpi]);
2110 bf_set(lpfc_init_vfi_fcfi, init_vfi,
2111 vport->
phba->fcf.fcfi);
2130 memset(mbox, 0,
sizeof(*mbox));
2131 reg_vfi = &mbox->
u.
mqe.un.reg_vfi;
2133 bf_set(lpfc_reg_vfi_vp, reg_vfi, 1);
2134 bf_set(lpfc_reg_vfi_vfi, reg_vfi,
2135 vport->
phba->sli4_hba.vfi_ids[vport->
vfi]);
2136 bf_set(lpfc_reg_vfi_fcfi, reg_vfi, vport->
phba->fcf.fcfi);
2137 bf_set(lpfc_reg_vfi_vpi, reg_vfi, vport->
phba->vpi_ids[vport->
vpi]);
2149 "3134 Register VFI, mydid:x%x, fcfi:%d, "
2150 " vfi:%d, vpi:%d, fc_pname:%x%x\n",
2152 vport->
phba->fcf.fcfi,
2153 vport->
phba->sli4_hba.vfi_ids[vport->
vfi],
2154 vport->
phba->vpi_ids[vport->
vpi],
2155 reg_vfi->
wwn[0], reg_vfi->
wwn[1]);
2173 memset(mbox, 0,
sizeof(*mbox));
2175 bf_set(lpfc_init_vpi_vpi, &mbox->
u.
mqe.un.init_vpi,
2177 bf_set(lpfc_init_vpi_vfi, &mbox->
u.
mqe.un.init_vpi,
2195 memset(mbox, 0,
sizeof(*mbox));
2197 bf_set(lpfc_unreg_vfi_vfi, &mbox->
u.
mqe.un.unreg_vfi,
2198 vport->
phba->sli4_hba.vfi_ids[vport->
vfi]);
2215 memset(mbox, 0,
sizeof(*mbox));
2222 if (!mp || !mp->
virt) {
2226 "2569 lpfc dump config region 23: memory"
2227 " allocation failed\n");
2232 INIT_LIST_HEAD(&mp->
list);
2264 memset(mbox, 0,
sizeof(*mbox));
2265 reg_fcfi = &mbox->
u.
mqe.un.reg_fcfi;
2267 bf_set(lpfc_reg_fcfi_rq_id0, reg_fcfi, phba->
sli4_hba.hdr_rq->queue_id);
2271 bf_set(lpfc_reg_fcfi_info_index, reg_fcfi,
2272 phba->
fcf.current_rec.fcf_indx);
2274 bf_set(lpfc_reg_fcfi_mam, reg_fcfi, (~phba->
fcf.addr_mode) & 0x3);
2276 bf_set(lpfc_reg_fcfi_vv, reg_fcfi, 1);
2277 bf_set(lpfc_reg_fcfi_vlan_tag, reg_fcfi,
2278 phba->
fcf.current_rec.vlan_id);
2293 memset(mbox, 0,
sizeof(*mbox));
2312 memset(mbox, 0,
sizeof(*mbox));
2313 resume_rpi = &mbox->
u.
mqe.un.resume_rpi;
2315 bf_set(lpfc_resume_rpi_index, resume_rpi,
2334 memset(mbox, 0,
sizeof(*mbox));
2335 supp_pages = &mbox->
u.
mqe.un.supp_pages;
2352 memset(mbox, 0,
sizeof(*mbox));
2353 sli4_params = &mbox->
u.
mqe.un.sli4_params;