From 1cb0e5e716ca0e9dc085718713aef6a3cb2e5f8b Mon Sep 17 00:00:00 2001 From: Sucheta Chakraborty Date: Thu, 13 May 2010 03:07:48 +0000 Subject: [PATCH] --- yaml --- r: 195094 b: refs/heads/master c: b3a2464941e32ca58059cba68012105e35ce84af h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/net/qlcnic/qlcnic.h | 2 +- trunk/drivers/net/qlcnic/qlcnic_init.c | 16 +++++++++++++++- trunk/drivers/net/qlcnic/qlcnic_main.c | 8 ++------ 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index 7bf4db2e426c..3d83b495d5bd 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 96f8118c25ea812335986d96a68441c2bcb01fe0 +refs/heads/master: b3a2464941e32ca58059cba68012105e35ce84af diff --git a/trunk/drivers/net/qlcnic/qlcnic.h b/trunk/drivers/net/qlcnic/qlcnic.h index 8a9412fd2ff5..5c89f4e4635b 100644 --- a/trunk/drivers/net/qlcnic/qlcnic.h +++ b/trunk/drivers/net/qlcnic/qlcnic.h @@ -1037,7 +1037,7 @@ int qlcnic_need_fw_reset(struct qlcnic_adapter *adapter); void qlcnic_request_firmware(struct qlcnic_adapter *adapter); void qlcnic_release_firmware(struct qlcnic_adapter *adapter); int qlcnic_pinit_from_rom(struct qlcnic_adapter *adapter); -void qlcnic_setup_idc_param(struct qlcnic_adapter *adapter); +int qlcnic_setup_idc_param(struct qlcnic_adapter *adapter); int qlcnic_rom_fast_read(struct qlcnic_adapter *adapter, int addr, int *valp); int qlcnic_rom_fast_read_words(struct qlcnic_adapter *adapter, int addr, diff --git a/trunk/drivers/net/qlcnic/qlcnic_init.c b/trunk/drivers/net/qlcnic/qlcnic_init.c index c4bef57b9cd0..77bfdaba83e8 100644 --- a/trunk/drivers/net/qlcnic/qlcnic_init.c +++ b/trunk/drivers/net/qlcnic/qlcnic_init.c @@ -514,10 +514,22 @@ int qlcnic_pinit_from_rom(struct qlcnic_adapter *adapter) return 0; } -void +int qlcnic_setup_idc_param(struct qlcnic_adapter *adapter) { int timeo; + u32 val; + + val = QLCRD32(adapter, QLCNIC_CRB_DEV_PARTITION_INFO); + val = (val >> (adapter->portnum * 4)) & 0xf; + + if ((val & 0x3) != 1) { + dev_err(&adapter->pdev->dev, "Not an Ethernet NIC func=%u\n", + val); + return -EIO; + } + + adapter->physical_port = (val >> 2); if (qlcnic_rom_fast_read(adapter, QLCNIC_ROM_DEV_INIT_TIMEOUT, &timeo)) timeo = 30; @@ -528,6 +540,8 @@ qlcnic_setup_idc_param(struct qlcnic_adapter *adapter) { timeo = 10; adapter->reset_ack_timeo = timeo; + + return 0; } static int diff --git a/trunk/drivers/net/qlcnic/qlcnic_main.c b/trunk/drivers/net/qlcnic/qlcnic_main.c index 54a6bb20ec07..79c6e0517bad 100644 --- a/trunk/drivers/net/qlcnic/qlcnic_main.c +++ b/trunk/drivers/net/qlcnic/qlcnic_main.c @@ -1080,17 +1080,13 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) goto err_out_iounmap; } - qlcnic_setup_idc_param(adapter); + if (qlcnic_setup_idc_param(adapter)) + goto err_out_iounmap; err = qlcnic_start_firmware(adapter); if (err) goto err_out_decr_ref; - /* - * See if the firmware gave us a virtual-physical port mapping. - */ - adapter->physical_port = adapter->portnum; - qlcnic_clear_stats(adapter); qlcnic_setup_intr(adapter);