[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>

authored by

Roland Dreier and committed by
Linus Torvalds
80fd8238 761f9eb8

+30 -16
+21
drivers/infiniband/hw/mthca/mthca_cmd.c
··· 431 431 timeout, status); 432 432 } 433 433 434 + int mthca_cmd_init(struct mthca_dev *dev) 435 + { 436 + sema_init(&dev->cmd.hcr_sem, 1); 437 + sema_init(&dev->cmd.poll_sem, 1); 438 + dev->cmd.use_events = 0; 439 + 440 + dev->hcr = ioremap(pci_resource_start(dev->pdev, 0) + MTHCA_HCR_BASE, 441 + MTHCA_HCR_SIZE); 442 + if (!dev->hcr) { 443 + mthca_err(dev, "Couldn't map command register."); 444 + return -ENOMEM; 445 + } 446 + 447 + return 0; 448 + } 449 + 450 + void mthca_cmd_cleanup(struct mthca_dev *dev) 451 + { 452 + iounmap(dev->hcr); 453 + } 454 + 434 455 /* 435 456 * Switch to using events to issue FW commands (should be called after 436 457 * event queue to command events has been initialized).
+2
drivers/infiniband/hw/mthca/mthca_cmd.h
··· 235 235 u32 cap_mask; 236 236 }; 237 237 238 + int mthca_cmd_init(struct mthca_dev *dev); 239 + void mthca_cmd_cleanup(struct mthca_dev *dev); 238 240 int mthca_cmd_use_events(struct mthca_dev *dev); 239 241 void mthca_cmd_use_polling(struct mthca_dev *dev); 240 242 void mthca_cmd_event(struct mthca_dev *dev, u16 token,
+7 -16
drivers/infiniband/hw/mthca/mthca_main.c
··· 1005 1005 !pci_enable_msi(pdev)) 1006 1006 mdev->mthca_flags |= MTHCA_FLAG_MSI; 1007 1007 1008 - sema_init(&mdev->cmd.hcr_sem, 1); 1009 - sema_init(&mdev->cmd.poll_sem, 1); 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; 1008 + if (mthca_cmd_init(mdev)) { 1009 + mthca_err(mdev, "Failed to init command interface, aborting.\n"); 1017 1010 goto err_free_dev; 1018 1011 } 1019 1012 1020 1013 err = mthca_tune_pci(mdev); 1021 1014 if (err) 1022 - goto err_iounmap; 1015 + goto err_cmd; 1023 1016 1024 1017 err = mthca_init_hca(mdev); 1025 1018 if (err) 1026 - goto err_iounmap; 1019 + goto err_cmd; 1027 1020 1028 1021 if (mdev->fw_ver < mthca_hca_table[id->driver_data].latest_fw) { 1029 1022 mthca_warn(mdev, "HCA FW version %x.%x.%x is old (%x.%x.%x is current).\n", ··· 1064 1071 err_close: 1065 1072 mthca_close_hca(mdev); 1066 1073 1067 - err_iounmap: 1068 - iounmap(mdev->hcr); 1074 + err_cmd: 1075 + mthca_cmd_cleanup(mdev); 1069 1076 1070 1077 err_free_dev: 1071 1078 if (mdev->mthca_flags & MTHCA_FLAG_MSI_X) ··· 1112 1119 iounmap(mdev->kar); 1113 1120 mthca_uar_free(mdev, &mdev->driver_uar); 1114 1121 mthca_cleanup_uar_table(mdev); 1115 - 1116 1122 mthca_close_hca(mdev); 1117 - 1118 - iounmap(mdev->hcr); 1123 + mthca_cmd_cleanup(mdev); 1119 1124 1120 1125 if (mdev->mthca_flags & MTHCA_FLAG_MSI_X) 1121 1126 pci_disable_msix(pdev);