diff options
Diffstat (limited to 'drivers/scsi/bnx2fc/bnx2fc_fcoe.c')
-rw-r--r-- | drivers/scsi/bnx2fc/bnx2fc_fcoe.c | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c index f52f668fd24..05fe6620b3f 100644 --- a/drivers/scsi/bnx2fc/bnx2fc_fcoe.c +++ b/drivers/scsi/bnx2fc/bnx2fc_fcoe.c | |||
@@ -1326,6 +1326,7 @@ static void bnx2fc_hba_destroy(struct bnx2fc_hba *hba) | |||
1326 | static struct bnx2fc_hba *bnx2fc_hba_create(struct cnic_dev *cnic) | 1326 | static struct bnx2fc_hba *bnx2fc_hba_create(struct cnic_dev *cnic) |
1327 | { | 1327 | { |
1328 | struct bnx2fc_hba *hba; | 1328 | struct bnx2fc_hba *hba; |
1329 | struct fcoe_capabilities *fcoe_cap; | ||
1329 | int rc; | 1330 | int rc; |
1330 | 1331 | ||
1331 | hba = kzalloc(sizeof(*hba), GFP_KERNEL); | 1332 | hba = kzalloc(sizeof(*hba), GFP_KERNEL); |
@@ -1361,6 +1362,21 @@ static struct bnx2fc_hba *bnx2fc_hba_create(struct cnic_dev *cnic) | |||
1361 | printk(KERN_ERR PFX "em_config:bnx2fc_cmd_mgr_alloc failed\n"); | 1362 | printk(KERN_ERR PFX "em_config:bnx2fc_cmd_mgr_alloc failed\n"); |
1362 | goto cmgr_err; | 1363 | goto cmgr_err; |
1363 | } | 1364 | } |
1365 | fcoe_cap = &hba->fcoe_cap; | ||
1366 | |||
1367 | fcoe_cap->capability1 = BNX2FC_TM_MAX_SQES << | ||
1368 | FCOE_IOS_PER_CONNECTION_SHIFT; | ||
1369 | fcoe_cap->capability1 |= BNX2FC_NUM_MAX_SESS << | ||
1370 | FCOE_LOGINS_PER_PORT_SHIFT; | ||
1371 | fcoe_cap->capability2 = BNX2FC_MAX_OUTSTANDING_CMNDS << | ||
1372 | FCOE_NUMBER_OF_EXCHANGES_SHIFT; | ||
1373 | fcoe_cap->capability2 |= BNX2FC_MAX_NPIV << | ||
1374 | FCOE_NPIV_WWN_PER_PORT_SHIFT; | ||
1375 | fcoe_cap->capability3 = BNX2FC_NUM_MAX_SESS << | ||
1376 | FCOE_TARGETS_SUPPORTED_SHIFT; | ||
1377 | fcoe_cap->capability3 |= BNX2FC_MAX_OUTSTANDING_CMNDS << | ||
1378 | FCOE_OUTSTANDING_COMMANDS_SHIFT; | ||
1379 | fcoe_cap->capability4 = FCOE_CAPABILITY4_STATEFUL; | ||
1364 | 1380 | ||
1365 | init_waitqueue_head(&hba->shutdown_wait); | 1381 | init_waitqueue_head(&hba->shutdown_wait); |
1366 | init_waitqueue_head(&hba->destroy_wait); | 1382 | init_waitqueue_head(&hba->destroy_wait); |
@@ -1691,6 +1707,32 @@ static void bnx2fc_unbind_pcidev(struct bnx2fc_hba *hba) | |||
1691 | hba->pcidev = NULL; | 1707 | hba->pcidev = NULL; |
1692 | } | 1708 | } |
1693 | 1709 | ||
1710 | /** | ||
1711 | * bnx2fc_ulp_get_stats - cnic callback to populate FCoE stats | ||
1712 | * | ||
1713 | * @handle: transport handle pointing to adapter struture | ||
1714 | */ | ||
1715 | static int bnx2fc_ulp_get_stats(void *handle) | ||
1716 | { | ||
1717 | struct bnx2fc_hba *hba = handle; | ||
1718 | struct cnic_dev *cnic; | ||
1719 | struct fcoe_stats_info *stats_addr; | ||
1720 | |||
1721 | if (!hba) | ||
1722 | return -EINVAL; | ||
1723 | |||
1724 | cnic = hba->cnic; | ||
1725 | stats_addr = &cnic->stats_addr->fcoe_stat; | ||
1726 | if (!stats_addr) | ||
1727 | return -EINVAL; | ||
1728 | |||
1729 | strncpy(stats_addr->version, BNX2FC_VERSION, | ||
1730 | sizeof(stats_addr->version)); | ||
1731 | stats_addr->txq_size = BNX2FC_SQ_WQES_MAX; | ||
1732 | stats_addr->rxq_size = BNX2FC_CQ_WQES_MAX; | ||
1733 | |||
1734 | return 0; | ||
1735 | } | ||
1694 | 1736 | ||
1695 | 1737 | ||
1696 | /** | 1738 | /** |
@@ -1944,6 +1986,7 @@ static void bnx2fc_ulp_init(struct cnic_dev *dev) | |||
1944 | adapter_count++; | 1986 | adapter_count++; |
1945 | mutex_unlock(&bnx2fc_dev_lock); | 1987 | mutex_unlock(&bnx2fc_dev_lock); |
1946 | 1988 | ||
1989 | dev->fcoe_cap = &hba->fcoe_cap; | ||
1947 | clear_bit(BNX2FC_CNIC_REGISTERED, &hba->reg_with_cnic); | 1990 | clear_bit(BNX2FC_CNIC_REGISTERED, &hba->reg_with_cnic); |
1948 | rc = dev->register_device(dev, CNIC_ULP_FCOE, | 1991 | rc = dev->register_device(dev, CNIC_ULP_FCOE, |
1949 | (void *) hba); | 1992 | (void *) hba); |
@@ -2643,4 +2686,5 @@ static struct cnic_ulp_ops bnx2fc_cnic_cb = { | |||
2643 | .cnic_stop = bnx2fc_ulp_stop, | 2686 | .cnic_stop = bnx2fc_ulp_stop, |
2644 | .indicate_kcqes = bnx2fc_indicate_kcqe, | 2687 | .indicate_kcqes = bnx2fc_indicate_kcqe, |
2645 | .indicate_netevent = bnx2fc_indicate_netevent, | 2688 | .indicate_netevent = bnx2fc_indicate_netevent, |
2689 | .cnic_get_stats = bnx2fc_ulp_get_stats, | ||
2646 | }; | 2690 | }; |