aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw/mthca/mthca_main.c
diff options
context:
space:
mode:
authorRoland Dreier <roland@topspin.com>2005-06-27 17:36:45 -0400
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-06-27 18:11:46 -0400
commit80fd8238734c852a8ed1ea39f8444a2df33bd161 (patch)
treed29f8f1a13c879ba991bf39096df8c009b406268 /drivers/infiniband/hw/mthca/mthca_main.c
parent761f9eb8c31f72692aad118e51e2a59a80467088 (diff)
[PATCH] IB/mthca: Encapsulate command interface init
Encapsulate mthca command interface initialization/cleanup. Signed-off-by: Roland Dreier <roland@topspin.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/infiniband/hw/mthca/mthca_main.c')
-rw-r--r--drivers/infiniband/hw/mthca/mthca_main.c23
1 files changed, 7 insertions, 16 deletions
diff --git a/drivers/infiniband/hw/mthca/mthca_main.c b/drivers/infiniband/hw/mthca/mthca_main.c
index 7f8106a0f2b..09519b604c0 100644
--- a/drivers/infiniband/hw/mthca/mthca_main.c
+++ b/drivers/infiniband/hw/mthca/mthca_main.c
@@ -1005,25 +1005,18 @@ static int __devinit mthca_init_one(struct pci_dev *pdev,
1005 !pci_enable_msi(pdev)) 1005 !pci_enable_msi(pdev))
1006 mdev->mthca_flags |= MTHCA_FLAG_MSI; 1006 mdev->mthca_flags |= MTHCA_FLAG_MSI;
1007 1007
1008 sema_init(&mdev->cmd.hcr_sem, 1); 1008 if (mthca_cmd_init(mdev)) {
1009 sema_init(&mdev->cmd.poll_sem, 1); 1009 mthca_err(mdev, "Failed to init command interface, aborting.\n");
1010 mdev->cmd.use_events = 0;
1011
1012 mdev->hcr = ioremap(pci_resource_start(pdev, 0) + MTHCA_HCR_BASE, MTHCA_HCR_SIZE);
1013 if (!mdev->hcr) {
1014 mthca_err(mdev, "Couldn't map command register, "
1015 "aborting.\n");
1016 err = -ENOMEM;
1017 goto err_free_dev; 1010 goto err_free_dev;
1018 } 1011 }
1019 1012
1020 err = mthca_tune_pci(mdev); 1013 err = mthca_tune_pci(mdev);
1021 if (err) 1014 if (err)
1022 goto err_iounmap; 1015 goto err_cmd;
1023 1016
1024 err = mthca_init_hca(mdev); 1017 err = mthca_init_hca(mdev);
1025 if (err) 1018 if (err)
1026 goto err_iounmap; 1019 goto err_cmd;
1027 1020
1028 if (mdev->fw_ver < mthca_hca_table[id->driver_data].latest_fw) { 1021 if (mdev->fw_ver < mthca_hca_table[id->driver_data].latest_fw) {
1029 mthca_warn(mdev, "HCA FW version %x.%x.%x is old (%x.%x.%x is current).\n", 1022 mthca_warn(mdev, "HCA FW version %x.%x.%x is old (%x.%x.%x is current).\n",
@@ -1071,8 +1064,8 @@ err_cleanup:
1071err_close: 1064err_close:
1072 mthca_close_hca(mdev); 1065 mthca_close_hca(mdev);
1073 1066
1074err_iounmap: 1067err_cmd:
1075 iounmap(mdev->hcr); 1068 mthca_cmd_cleanup(mdev);
1076 1069
1077err_free_dev: 1070err_free_dev:
1078 if (mdev->mthca_flags & MTHCA_FLAG_MSI_X) 1071 if (mdev->mthca_flags & MTHCA_FLAG_MSI_X)
@@ -1119,10 +1112,8 @@ static void __devexit mthca_remove_one(struct pci_dev *pdev)
1119 iounmap(mdev->kar); 1112 iounmap(mdev->kar);
1120 mthca_uar_free(mdev, &mdev->driver_uar); 1113 mthca_uar_free(mdev, &mdev->driver_uar);
1121 mthca_cleanup_uar_table(mdev); 1114 mthca_cleanup_uar_table(mdev);
1122
1123 mthca_close_hca(mdev); 1115 mthca_close_hca(mdev);
1124 1116 mthca_cmd_cleanup(mdev);
1125 iounmap(mdev->hcr);
1126 1117
1127 if (mdev->mthca_flags & MTHCA_FLAG_MSI_X) 1118 if (mdev->mthca_flags & MTHCA_FLAG_MSI_X)
1128 pci_disable_msix(pdev); 1119 pci_disable_msix(pdev);