diff options
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_attr.c')
-rw-r--r-- | drivers/scsi/lpfc/lpfc_attr.c | 312 |
1 files changed, 308 insertions, 4 deletions
diff --git a/drivers/scsi/lpfc/lpfc_attr.c b/drivers/scsi/lpfc/lpfc_attr.c index 8dcbf8fff673..135a53baa735 100644 --- a/drivers/scsi/lpfc/lpfc_attr.c +++ b/drivers/scsi/lpfc/lpfc_attr.c | |||
@@ -755,6 +755,73 @@ lpfc_issue_reset(struct device *dev, struct device_attribute *attr, | |||
755 | } | 755 | } |
756 | 756 | ||
757 | /** | 757 | /** |
758 | * lpfc_sli4_pdev_reg_request - Request physical dev to perform a register acc | ||
759 | * @phba: lpfc_hba pointer. | ||
760 | * | ||
761 | * Description: | ||
762 | * Request SLI4 interface type-2 device to perform a physical register set | ||
763 | * access. | ||
764 | * | ||
765 | * Returns: | ||
766 | * zero for success | ||
767 | **/ | ||
768 | static ssize_t | ||
769 | lpfc_sli4_pdev_reg_request(struct lpfc_hba *phba, uint32_t opcode) | ||
770 | { | ||
771 | struct completion online_compl; | ||
772 | uint32_t reg_val; | ||
773 | int status = 0; | ||
774 | int rc; | ||
775 | |||
776 | if (!phba->cfg_enable_hba_reset) | ||
777 | return -EIO; | ||
778 | |||
779 | if ((phba->sli_rev < LPFC_SLI_REV4) || | ||
780 | (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) != | ||
781 | LPFC_SLI_INTF_IF_TYPE_2)) | ||
782 | return -EPERM; | ||
783 | |||
784 | status = lpfc_do_offline(phba, LPFC_EVT_OFFLINE); | ||
785 | |||
786 | if (status != 0) | ||
787 | return status; | ||
788 | |||
789 | /* wait for the device to be quiesced before firmware reset */ | ||
790 | msleep(100); | ||
791 | |||
792 | reg_val = readl(phba->sli4_hba.conf_regs_memmap_p + | ||
793 | LPFC_CTL_PDEV_CTL_OFFSET); | ||
794 | |||
795 | if (opcode == LPFC_FW_DUMP) | ||
796 | reg_val |= LPFC_FW_DUMP_REQUEST; | ||
797 | else if (opcode == LPFC_FW_RESET) | ||
798 | reg_val |= LPFC_CTL_PDEV_CTL_FRST; | ||
799 | else if (opcode == LPFC_DV_RESET) | ||
800 | reg_val |= LPFC_CTL_PDEV_CTL_DRST; | ||
801 | |||
802 | writel(reg_val, phba->sli4_hba.conf_regs_memmap_p + | ||
803 | LPFC_CTL_PDEV_CTL_OFFSET); | ||
804 | /* flush */ | ||
805 | readl(phba->sli4_hba.conf_regs_memmap_p + LPFC_CTL_PDEV_CTL_OFFSET); | ||
806 | |||
807 | /* delay driver action following IF_TYPE_2 reset */ | ||
808 | msleep(100); | ||
809 | |||
810 | init_completion(&online_compl); | ||
811 | rc = lpfc_workq_post_event(phba, &status, &online_compl, | ||
812 | LPFC_EVT_ONLINE); | ||
813 | if (rc == 0) | ||
814 | return -ENOMEM; | ||
815 | |||
816 | wait_for_completion(&online_compl); | ||
817 | |||
818 | if (status != 0) | ||
819 | return -EIO; | ||
820 | |||
821 | return 0; | ||
822 | } | ||
823 | |||
824 | /** | ||
758 | * lpfc_nport_evt_cnt_show - Return the number of nport events | 825 | * lpfc_nport_evt_cnt_show - Return the number of nport events |
759 | * @dev: class device that is converted into a Scsi_host. | 826 | * @dev: class device that is converted into a Scsi_host. |
760 | * @attr: device attribute, not used. | 827 | * @attr: device attribute, not used. |
@@ -848,6 +915,12 @@ lpfc_board_mode_store(struct device *dev, struct device_attribute *attr, | |||
848 | return -EINVAL; | 915 | return -EINVAL; |
849 | else | 916 | else |
850 | status = lpfc_do_offline(phba, LPFC_EVT_KILL); | 917 | status = lpfc_do_offline(phba, LPFC_EVT_KILL); |
918 | else if (strncmp(buf, "dump", sizeof("dump") - 1) == 0) | ||
919 | status = lpfc_sli4_pdev_reg_request(phba, LPFC_FW_DUMP); | ||
920 | else if (strncmp(buf, "fw_reset", sizeof("fw_reset") - 1) == 0) | ||
921 | status = lpfc_sli4_pdev_reg_request(phba, LPFC_FW_RESET); | ||
922 | else if (strncmp(buf, "dv_reset", sizeof("dv_reset") - 1) == 0) | ||
923 | status = lpfc_sli4_pdev_reg_request(phba, LPFC_DV_RESET); | ||
851 | else | 924 | else |
852 | return -EINVAL; | 925 | return -EINVAL; |
853 | 926 | ||
@@ -1322,6 +1395,102 @@ lpfc_dss_show(struct device *dev, struct device_attribute *attr, | |||
1322 | } | 1395 | } |
1323 | 1396 | ||
1324 | /** | 1397 | /** |
1398 | * lpfc_sriov_hw_max_virtfn_show - Return maximum number of virtual functions | ||
1399 | * @dev: class converted to a Scsi_host structure. | ||
1400 | * @attr: device attribute, not used. | ||
1401 | * @buf: on return contains the formatted support level. | ||
1402 | * | ||
1403 | * Description: | ||
1404 | * Returns the maximum number of virtual functions a physical function can | ||
1405 | * support, 0 will be returned if called on virtual function. | ||
1406 | * | ||
1407 | * Returns: size of formatted string. | ||
1408 | **/ | ||
1409 | static ssize_t | ||
1410 | lpfc_sriov_hw_max_virtfn_show(struct device *dev, | ||
1411 | struct device_attribute *attr, | ||
1412 | char *buf) | ||
1413 | { | ||
1414 | struct Scsi_Host *shost = class_to_shost(dev); | ||
1415 | struct lpfc_vport *vport = (struct lpfc_vport *) shost->hostdata; | ||
1416 | struct lpfc_hba *phba = vport->phba; | ||
1417 | struct pci_dev *pdev = phba->pcidev; | ||
1418 | union lpfc_sli4_cfg_shdr *shdr; | ||
1419 | uint32_t shdr_status, shdr_add_status; | ||
1420 | LPFC_MBOXQ_t *mboxq; | ||
1421 | struct lpfc_mbx_get_prof_cfg *get_prof_cfg; | ||
1422 | struct lpfc_rsrc_desc_pcie *desc; | ||
1423 | uint32_t max_nr_virtfn; | ||
1424 | uint32_t desc_count; | ||
1425 | int length, rc, i; | ||
1426 | |||
1427 | if ((phba->sli_rev < LPFC_SLI_REV4) || | ||
1428 | (bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf) != | ||
1429 | LPFC_SLI_INTF_IF_TYPE_2)) | ||
1430 | return -EPERM; | ||
1431 | |||
1432 | if (!pdev->is_physfn) | ||
1433 | return snprintf(buf, PAGE_SIZE, "%d\n", 0); | ||
1434 | |||
1435 | mboxq = (LPFC_MBOXQ_t *)mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL); | ||
1436 | if (!mboxq) | ||
1437 | return -ENOMEM; | ||
1438 | |||
1439 | /* get the maximum number of virtfn support by physfn */ | ||
1440 | length = (sizeof(struct lpfc_mbx_get_prof_cfg) - | ||
1441 | sizeof(struct lpfc_sli4_cfg_mhdr)); | ||
1442 | lpfc_sli4_config(phba, mboxq, LPFC_MBOX_SUBSYSTEM_COMMON, | ||
1443 | LPFC_MBOX_OPCODE_GET_PROFILE_CONFIG, | ||
1444 | length, LPFC_SLI4_MBX_EMBED); | ||
1445 | shdr = (union lpfc_sli4_cfg_shdr *) | ||
1446 | &mboxq->u.mqe.un.sli4_config.header.cfg_shdr; | ||
1447 | bf_set(lpfc_mbox_hdr_pf_num, &shdr->request, | ||
1448 | phba->sli4_hba.iov.pf_number + 1); | ||
1449 | |||
1450 | get_prof_cfg = &mboxq->u.mqe.un.get_prof_cfg; | ||
1451 | bf_set(lpfc_mbx_get_prof_cfg_prof_tp, &get_prof_cfg->u.request, | ||
1452 | LPFC_CFG_TYPE_CURRENT_ACTIVE); | ||
1453 | |||
1454 | rc = lpfc_sli_issue_mbox_wait(phba, mboxq, | ||
1455 | lpfc_mbox_tmo_val(phba, MBX_SLI4_CONFIG)); | ||
1456 | |||
1457 | if (rc != MBX_TIMEOUT) { | ||
1458 | /* check return status */ | ||
1459 | shdr_status = bf_get(lpfc_mbox_hdr_status, &shdr->response); | ||
1460 | shdr_add_status = bf_get(lpfc_mbox_hdr_add_status, | ||
1461 | &shdr->response); | ||
1462 | if (shdr_status || shdr_add_status || rc) | ||
1463 | goto error_out; | ||
1464 | |||
1465 | } else | ||
1466 | goto error_out; | ||
1467 | |||
1468 | desc_count = get_prof_cfg->u.response.prof_cfg.rsrc_desc_count; | ||
1469 | |||
1470 | for (i = 0; i < LPFC_RSRC_DESC_MAX_NUM; i++) { | ||
1471 | desc = (struct lpfc_rsrc_desc_pcie *) | ||
1472 | &get_prof_cfg->u.response.prof_cfg.desc[i]; | ||
1473 | if (LPFC_RSRC_DESC_TYPE_PCIE == | ||
1474 | bf_get(lpfc_rsrc_desc_pcie_type, desc)) { | ||
1475 | max_nr_virtfn = bf_get(lpfc_rsrc_desc_pcie_nr_virtfn, | ||
1476 | desc); | ||
1477 | break; | ||
1478 | } | ||
1479 | } | ||
1480 | |||
1481 | if (i < LPFC_RSRC_DESC_MAX_NUM) { | ||
1482 | if (rc != MBX_TIMEOUT) | ||
1483 | mempool_free(mboxq, phba->mbox_mem_pool); | ||
1484 | return snprintf(buf, PAGE_SIZE, "%d\n", max_nr_virtfn); | ||
1485 | } | ||
1486 | |||
1487 | error_out: | ||
1488 | if (rc != MBX_TIMEOUT) | ||
1489 | mempool_free(mboxq, phba->mbox_mem_pool); | ||
1490 | return -EIO; | ||
1491 | } | ||
1492 | |||
1493 | /** | ||
1325 | * lpfc_param_show - Return a cfg attribute value in decimal | 1494 | * lpfc_param_show - Return a cfg attribute value in decimal |
1326 | * | 1495 | * |
1327 | * Description: | 1496 | * Description: |
@@ -1762,6 +1931,8 @@ static DEVICE_ATTR(lpfc_temp_sensor, S_IRUGO, lpfc_temp_sensor_show, NULL); | |||
1762 | static DEVICE_ATTR(lpfc_fips_level, S_IRUGO, lpfc_fips_level_show, NULL); | 1931 | static DEVICE_ATTR(lpfc_fips_level, S_IRUGO, lpfc_fips_level_show, NULL); |
1763 | static DEVICE_ATTR(lpfc_fips_rev, S_IRUGO, lpfc_fips_rev_show, NULL); | 1932 | static DEVICE_ATTR(lpfc_fips_rev, S_IRUGO, lpfc_fips_rev_show, NULL); |
1764 | static DEVICE_ATTR(lpfc_dss, S_IRUGO, lpfc_dss_show, NULL); | 1933 | static DEVICE_ATTR(lpfc_dss, S_IRUGO, lpfc_dss_show, NULL); |
1934 | static DEVICE_ATTR(lpfc_sriov_hw_max_virtfn, S_IRUGO, | ||
1935 | lpfc_sriov_hw_max_virtfn_show, NULL); | ||
1765 | 1936 | ||
1766 | static char *lpfc_soft_wwn_key = "C99G71SL8032A"; | 1937 | static char *lpfc_soft_wwn_key = "C99G71SL8032A"; |
1767 | 1938 | ||
@@ -3014,7 +3185,7 @@ static DEVICE_ATTR(lpfc_link_speed, S_IRUGO | S_IWUSR, | |||
3014 | * | 3185 | * |
3015 | * @dev: class device that is converted into a Scsi_host. | 3186 | * @dev: class device that is converted into a Scsi_host. |
3016 | * @attr: device attribute, not used. | 3187 | * @attr: device attribute, not used. |
3017 | * @buf: containing the string "selective". | 3188 | * @buf: containing enable or disable aer flag. |
3018 | * @count: unused variable. | 3189 | * @count: unused variable. |
3019 | * | 3190 | * |
3020 | * Description: | 3191 | * Description: |
@@ -3098,7 +3269,7 @@ lpfc_param_show(aer_support) | |||
3098 | /** | 3269 | /** |
3099 | * lpfc_aer_support_init - Set the initial adapters aer support flag | 3270 | * lpfc_aer_support_init - Set the initial adapters aer support flag |
3100 | * @phba: lpfc_hba pointer. | 3271 | * @phba: lpfc_hba pointer. |
3101 | * @val: link speed value. | 3272 | * @val: enable aer or disable aer flag. |
3102 | * | 3273 | * |
3103 | * Description: | 3274 | * Description: |
3104 | * If val is in a valid range [0,1], then set the adapter's initial | 3275 | * If val is in a valid range [0,1], then set the adapter's initial |
@@ -3137,7 +3308,7 @@ static DEVICE_ATTR(lpfc_aer_support, S_IRUGO | S_IWUSR, | |||
3137 | * lpfc_aer_cleanup_state - Clean up aer state to the aer enabled device | 3308 | * lpfc_aer_cleanup_state - Clean up aer state to the aer enabled device |
3138 | * @dev: class device that is converted into a Scsi_host. | 3309 | * @dev: class device that is converted into a Scsi_host. |
3139 | * @attr: device attribute, not used. | 3310 | * @attr: device attribute, not used. |
3140 | * @buf: containing the string "selective". | 3311 | * @buf: containing flag 1 for aer cleanup state. |
3141 | * @count: unused variable. | 3312 | * @count: unused variable. |
3142 | * | 3313 | * |
3143 | * Description: | 3314 | * Description: |
@@ -3180,6 +3351,136 @@ lpfc_aer_cleanup_state(struct device *dev, struct device_attribute *attr, | |||
3180 | static DEVICE_ATTR(lpfc_aer_state_cleanup, S_IWUSR, NULL, | 3351 | static DEVICE_ATTR(lpfc_aer_state_cleanup, S_IWUSR, NULL, |
3181 | lpfc_aer_cleanup_state); | 3352 | lpfc_aer_cleanup_state); |
3182 | 3353 | ||
3354 | /** | ||
3355 | * lpfc_sriov_nr_virtfn_store - Enable the adapter for sr-iov virtual functions | ||
3356 | * | ||
3357 | * @dev: class device that is converted into a Scsi_host. | ||
3358 | * @attr: device attribute, not used. | ||
3359 | * @buf: containing the string the number of vfs to be enabled. | ||
3360 | * @count: unused variable. | ||
3361 | * | ||
3362 | * Description: | ||
3363 | * When this api is called either through user sysfs, the driver shall | ||
3364 | * try to enable or disable SR-IOV virtual functions according to the | ||
3365 | * following: | ||
3366 | * | ||
3367 | * If zero virtual function has been enabled to the physical function, | ||
3368 | * the driver shall invoke the pci enable virtual function api trying | ||
3369 | * to enable the virtual functions. If the nr_vfn provided is greater | ||
3370 | * than the maximum supported, the maximum virtual function number will | ||
3371 | * be used for invoking the api; otherwise, the nr_vfn provided shall | ||
3372 | * be used for invoking the api. If the api call returned success, the | ||
3373 | * actual number of virtual functions enabled will be set to the driver | ||
3374 | * cfg_sriov_nr_virtfn; otherwise, -EINVAL shall be returned and driver | ||
3375 | * cfg_sriov_nr_virtfn remains zero. | ||
3376 | * | ||
3377 | * If none-zero virtual functions have already been enabled to the | ||
3378 | * physical function, as reflected by the driver's cfg_sriov_nr_virtfn, | ||
3379 | * -EINVAL will be returned and the driver does nothing; | ||
3380 | * | ||
3381 | * If the nr_vfn provided is zero and none-zero virtual functions have | ||
3382 | * been enabled, as indicated by the driver's cfg_sriov_nr_virtfn, the | ||
3383 | * disabling virtual function api shall be invoded to disable all the | ||
3384 | * virtual functions and driver's cfg_sriov_nr_virtfn shall be set to | ||
3385 | * zero. Otherwise, if zero virtual function has been enabled, do | ||
3386 | * nothing. | ||
3387 | * | ||
3388 | * Returns: | ||
3389 | * length of the buf on success if val is in range the intended mode | ||
3390 | * is supported. | ||
3391 | * -EINVAL if val out of range or intended mode is not supported. | ||
3392 | **/ | ||
3393 | static ssize_t | ||
3394 | lpfc_sriov_nr_virtfn_store(struct device *dev, struct device_attribute *attr, | ||
3395 | const char *buf, size_t count) | ||
3396 | { | ||
3397 | struct Scsi_Host *shost = class_to_shost(dev); | ||
3398 | struct lpfc_vport *vport = (struct lpfc_vport *)shost->hostdata; | ||
3399 | struct lpfc_hba *phba = vport->phba; | ||
3400 | struct pci_dev *pdev = phba->pcidev; | ||
3401 | int val = 0, rc = -EINVAL; | ||
3402 | |||
3403 | /* Sanity check on user data */ | ||
3404 | if (!isdigit(buf[0])) | ||
3405 | return -EINVAL; | ||
3406 | if (sscanf(buf, "%i", &val) != 1) | ||
3407 | return -EINVAL; | ||
3408 | if (val < 0) | ||
3409 | return -EINVAL; | ||
3410 | |||
3411 | /* Request disabling virtual functions */ | ||
3412 | if (val == 0) { | ||
3413 | if (phba->cfg_sriov_nr_virtfn > 0) { | ||
3414 | pci_disable_sriov(pdev); | ||
3415 | phba->cfg_sriov_nr_virtfn = 0; | ||
3416 | } | ||
3417 | return strlen(buf); | ||
3418 | } | ||
3419 | |||
3420 | /* Request enabling virtual functions */ | ||
3421 | if (phba->cfg_sriov_nr_virtfn > 0) { | ||
3422 | lpfc_printf_log(phba, KERN_ERR, LOG_INIT, | ||
3423 | "3018 There are %d virtual functions " | ||
3424 | "enabled on physical function.\n", | ||
3425 | phba->cfg_sriov_nr_virtfn); | ||
3426 | return -EEXIST; | ||
3427 | } | ||
3428 | |||
3429 | if (val <= LPFC_MAX_VFN_PER_PFN) | ||
3430 | phba->cfg_sriov_nr_virtfn = val; | ||
3431 | else { | ||
3432 | lpfc_printf_log(phba, KERN_ERR, LOG_INIT, | ||
3433 | "3019 Enabling %d virtual functions is not " | ||
3434 | "allowed.\n", val); | ||
3435 | return -EINVAL; | ||
3436 | } | ||
3437 | |||
3438 | rc = lpfc_sli_probe_sriov_nr_virtfn(phba, phba->cfg_sriov_nr_virtfn); | ||
3439 | if (rc) { | ||
3440 | phba->cfg_sriov_nr_virtfn = 0; | ||
3441 | rc = -EPERM; | ||
3442 | } else | ||
3443 | rc = strlen(buf); | ||
3444 | |||
3445 | return rc; | ||
3446 | } | ||
3447 | |||
3448 | static int lpfc_sriov_nr_virtfn = LPFC_DEF_VFN_PER_PFN; | ||
3449 | module_param(lpfc_sriov_nr_virtfn, int, S_IRUGO|S_IWUSR); | ||
3450 | MODULE_PARM_DESC(lpfc_sriov_nr_virtfn, "Enable PCIe device SR-IOV virtual fn"); | ||
3451 | lpfc_param_show(sriov_nr_virtfn) | ||
3452 | |||
3453 | /** | ||
3454 | * lpfc_sriov_nr_virtfn_init - Set the initial sr-iov virtual function enable | ||
3455 | * @phba: lpfc_hba pointer. | ||
3456 | * @val: link speed value. | ||
3457 | * | ||
3458 | * Description: | ||
3459 | * If val is in a valid range [0,255], then set the adapter's initial | ||
3460 | * cfg_sriov_nr_virtfn field. If it's greater than the maximum, the maximum | ||
3461 | * number shall be used instead. It will be up to the driver's probe_one | ||
3462 | * routine to determine whether the device's SR-IOV is supported or not. | ||
3463 | * | ||
3464 | * Returns: | ||
3465 | * zero if val saved. | ||
3466 | * -EINVAL val out of range | ||
3467 | **/ | ||
3468 | static int | ||
3469 | lpfc_sriov_nr_virtfn_init(struct lpfc_hba *phba, int val) | ||
3470 | { | ||
3471 | if (val >= 0 && val <= LPFC_MAX_VFN_PER_PFN) { | ||
3472 | phba->cfg_sriov_nr_virtfn = val; | ||
3473 | return 0; | ||
3474 | } | ||
3475 | |||
3476 | lpfc_printf_log(phba, KERN_ERR, LOG_INIT, | ||
3477 | "3017 Enabling %d virtual functions is not " | ||
3478 | "allowed.\n", val); | ||
3479 | return -EINVAL; | ||
3480 | } | ||
3481 | static DEVICE_ATTR(lpfc_sriov_nr_virtfn, S_IRUGO | S_IWUSR, | ||
3482 | lpfc_sriov_nr_virtfn_show, lpfc_sriov_nr_virtfn_store); | ||
3483 | |||
3183 | /* | 3484 | /* |
3184 | # lpfc_fcp_class: Determines FC class to use for the FCP protocol. | 3485 | # lpfc_fcp_class: Determines FC class to use for the FCP protocol. |
3185 | # Value range is [2,3]. Default value is 3. | 3486 | # Value range is [2,3]. Default value is 3. |
@@ -3497,6 +3798,7 @@ struct device_attribute *lpfc_hba_attrs[] = { | |||
3497 | &dev_attr_lpfc_prot_sg_seg_cnt, | 3798 | &dev_attr_lpfc_prot_sg_seg_cnt, |
3498 | &dev_attr_lpfc_aer_support, | 3799 | &dev_attr_lpfc_aer_support, |
3499 | &dev_attr_lpfc_aer_state_cleanup, | 3800 | &dev_attr_lpfc_aer_state_cleanup, |
3801 | &dev_attr_lpfc_sriov_nr_virtfn, | ||
3500 | &dev_attr_lpfc_suppress_link_up, | 3802 | &dev_attr_lpfc_suppress_link_up, |
3501 | &dev_attr_lpfc_iocb_cnt, | 3803 | &dev_attr_lpfc_iocb_cnt, |
3502 | &dev_attr_iocb_hw, | 3804 | &dev_attr_iocb_hw, |
@@ -3505,6 +3807,7 @@ struct device_attribute *lpfc_hba_attrs[] = { | |||
3505 | &dev_attr_lpfc_fips_level, | 3807 | &dev_attr_lpfc_fips_level, |
3506 | &dev_attr_lpfc_fips_rev, | 3808 | &dev_attr_lpfc_fips_rev, |
3507 | &dev_attr_lpfc_dss, | 3809 | &dev_attr_lpfc_dss, |
3810 | &dev_attr_lpfc_sriov_hw_max_virtfn, | ||
3508 | NULL, | 3811 | NULL, |
3509 | }; | 3812 | }; |
3510 | 3813 | ||
@@ -3961,7 +4264,7 @@ static struct bin_attribute sysfs_mbox_attr = { | |||
3961 | .name = "mbox", | 4264 | .name = "mbox", |
3962 | .mode = S_IRUSR | S_IWUSR, | 4265 | .mode = S_IRUSR | S_IWUSR, |
3963 | }, | 4266 | }, |
3964 | .size = MAILBOX_CMD_SIZE, | 4267 | .size = MAILBOX_SYSFS_MAX, |
3965 | .read = sysfs_mbox_read, | 4268 | .read = sysfs_mbox_read, |
3966 | .write = sysfs_mbox_write, | 4269 | .write = sysfs_mbox_write, |
3967 | }; | 4270 | }; |
@@ -4705,6 +5008,7 @@ lpfc_get_cfgparam(struct lpfc_hba *phba) | |||
4705 | lpfc_hba_queue_depth_init(phba, lpfc_hba_queue_depth); | 5008 | lpfc_hba_queue_depth_init(phba, lpfc_hba_queue_depth); |
4706 | lpfc_hba_log_verbose_init(phba, lpfc_log_verbose); | 5009 | lpfc_hba_log_verbose_init(phba, lpfc_log_verbose); |
4707 | lpfc_aer_support_init(phba, lpfc_aer_support); | 5010 | lpfc_aer_support_init(phba, lpfc_aer_support); |
5011 | lpfc_sriov_nr_virtfn_init(phba, lpfc_sriov_nr_virtfn); | ||
4708 | lpfc_suppress_link_up_init(phba, lpfc_suppress_link_up); | 5012 | lpfc_suppress_link_up_init(phba, lpfc_suppress_link_up); |
4709 | lpfc_iocb_cnt_init(phba, lpfc_iocb_cnt); | 5013 | lpfc_iocb_cnt_init(phba, lpfc_iocb_cnt); |
4710 | phba->cfg_enable_dss = 1; | 5014 | phba->cfg_enable_dss = 1; |