Lines Matching refs:dev

192 static inline int go_bit(struct mthca_dev *dev)  in go_bit()  argument
194 return readl(dev->hcr + HCR_STATUS_OFFSET) & in go_bit()
198 static void mthca_cmd_post_dbell(struct mthca_dev *dev, in mthca_cmd_post_dbell() argument
206 void __iomem *ptr = dev->cmd.dbell_map; in mthca_cmd_post_dbell()
207 u16 *offs = dev->cmd.dbell_offsets; in mthca_cmd_post_dbell()
230 static int mthca_cmd_post_hcr(struct mthca_dev *dev, in mthca_cmd_post_hcr() argument
242 while (go_bit(dev) && time_before(jiffies, end)) { in mthca_cmd_post_hcr()
248 if (go_bit(dev)) in mthca_cmd_post_hcr()
257 __raw_writel((__force u32) cpu_to_be32(in_param >> 32), dev->hcr + 0 * 4); in mthca_cmd_post_hcr()
258 __raw_writel((__force u32) cpu_to_be32(in_param & 0xfffffffful), dev->hcr + 1 * 4); in mthca_cmd_post_hcr()
259 __raw_writel((__force u32) cpu_to_be32(in_modifier), dev->hcr + 2 * 4); in mthca_cmd_post_hcr()
260 __raw_writel((__force u32) cpu_to_be32(out_param >> 32), dev->hcr + 3 * 4); in mthca_cmd_post_hcr()
261 __raw_writel((__force u32) cpu_to_be32(out_param & 0xfffffffful), dev->hcr + 4 * 4); in mthca_cmd_post_hcr()
262 __raw_writel((__force u32) cpu_to_be32(token << 16), dev->hcr + 5 * 4); in mthca_cmd_post_hcr()
270 op), dev->hcr + 6 * 4); in mthca_cmd_post_hcr()
275 static int mthca_cmd_post(struct mthca_dev *dev, in mthca_cmd_post() argument
286 mutex_lock(&dev->cmd.hcr_mutex); in mthca_cmd_post()
288 if (event && dev->cmd.flags & MTHCA_CMD_POST_DOORBELLS && fw_cmd_doorbell) in mthca_cmd_post()
289 mthca_cmd_post_dbell(dev, in_param, out_param, in_modifier, in mthca_cmd_post()
292 err = mthca_cmd_post_hcr(dev, in_param, out_param, in_modifier, in mthca_cmd_post()
295 mutex_unlock(&dev->cmd.hcr_mutex); in mthca_cmd_post()
331 static int mthca_cmd_poll(struct mthca_dev *dev, in mthca_cmd_poll() argument
344 down(&dev->cmd.poll_sem); in mthca_cmd_poll()
346 err = mthca_cmd_post(dev, in_param, in mthca_cmd_poll()
354 while (go_bit(dev) && time_before(jiffies, end)) { in mthca_cmd_poll()
359 if (go_bit(dev)) { in mthca_cmd_poll()
367 __raw_readl(dev->hcr + HCR_OUT_PARAM_OFFSET)) << 32 | in mthca_cmd_poll()
369 __raw_readl(dev->hcr + HCR_OUT_PARAM_OFFSET + 4)); in mthca_cmd_poll()
375 status = be32_to_cpu((__force __be32) __raw_readl(dev->hcr + HCR_STATUS_OFFSET)) >> 24; in mthca_cmd_poll()
377 mthca_dbg(dev, "Command %02x completed with status %02x\n", in mthca_cmd_poll()
383 up(&dev->cmd.poll_sem); in mthca_cmd_poll()
387 void mthca_cmd_event(struct mthca_dev *dev, in mthca_cmd_event() argument
393 &dev->cmd.context[token & dev->cmd.token_mask]; in mthca_cmd_event()
406 static int mthca_cmd_wait(struct mthca_dev *dev, in mthca_cmd_wait() argument
418 down(&dev->cmd.event_sem); in mthca_cmd_wait()
420 spin_lock(&dev->cmd.context_lock); in mthca_cmd_wait()
421 BUG_ON(dev->cmd.free_head < 0); in mthca_cmd_wait()
422 context = &dev->cmd.context[dev->cmd.free_head]; in mthca_cmd_wait()
423 context->token += dev->cmd.token_mask + 1; in mthca_cmd_wait()
424 dev->cmd.free_head = context->next; in mthca_cmd_wait()
425 spin_unlock(&dev->cmd.context_lock); in mthca_cmd_wait()
429 err = mthca_cmd_post(dev, in_param, in mthca_cmd_wait()
446 mthca_dbg(dev, "Command %02x completed with status %02x\n", in mthca_cmd_wait()
459 spin_lock(&dev->cmd.context_lock); in mthca_cmd_wait()
460 context->next = dev->cmd.free_head; in mthca_cmd_wait()
461 dev->cmd.free_head = context - dev->cmd.context; in mthca_cmd_wait()
462 spin_unlock(&dev->cmd.context_lock); in mthca_cmd_wait()
464 up(&dev->cmd.event_sem); in mthca_cmd_wait()
469 static int mthca_cmd_box(struct mthca_dev *dev, in mthca_cmd_box() argument
477 if (dev->cmd.flags & MTHCA_CMD_USE_EVENTS) in mthca_cmd_box()
478 return mthca_cmd_wait(dev, in_param, &out_param, 0, in mthca_cmd_box()
482 return mthca_cmd_poll(dev, in_param, &out_param, 0, in mthca_cmd_box()
488 static int mthca_cmd(struct mthca_dev *dev, in mthca_cmd() argument
495 return mthca_cmd_box(dev, in_param, 0, in_modifier, in mthca_cmd()
504 static int mthca_cmd_imm(struct mthca_dev *dev, in mthca_cmd_imm() argument
512 if (dev->cmd.flags & MTHCA_CMD_USE_EVENTS) in mthca_cmd_imm()
513 return mthca_cmd_wait(dev, in_param, out_param, 1, in mthca_cmd_imm()
517 return mthca_cmd_poll(dev, in_param, out_param, 1, in mthca_cmd_imm()
522 int mthca_cmd_init(struct mthca_dev *dev) in mthca_cmd_init() argument
524 mutex_init(&dev->cmd.hcr_mutex); in mthca_cmd_init()
525 sema_init(&dev->cmd.poll_sem, 1); in mthca_cmd_init()
526 dev->cmd.flags = 0; in mthca_cmd_init()
528 dev->hcr = ioremap(pci_resource_start(dev->pdev, 0) + MTHCA_HCR_BASE, in mthca_cmd_init()
530 if (!dev->hcr) { in mthca_cmd_init()
531 mthca_err(dev, "Couldn't map command register."); in mthca_cmd_init()
535 dev->cmd.pool = dma_pool_create("mthca_cmd", &dev->pdev->dev, in mthca_cmd_init()
538 if (!dev->cmd.pool) { in mthca_cmd_init()
539 iounmap(dev->hcr); in mthca_cmd_init()
546 void mthca_cmd_cleanup(struct mthca_dev *dev) in mthca_cmd_cleanup() argument
548 dma_pool_destroy(dev->cmd.pool); in mthca_cmd_cleanup()
549 iounmap(dev->hcr); in mthca_cmd_cleanup()
550 if (dev->cmd.flags & MTHCA_CMD_POST_DOORBELLS) in mthca_cmd_cleanup()
551 iounmap(dev->cmd.dbell_map); in mthca_cmd_cleanup()
558 int mthca_cmd_use_events(struct mthca_dev *dev) in mthca_cmd_use_events() argument
562 dev->cmd.context = kmalloc_array(dev->cmd.max_cmds, in mthca_cmd_use_events()
565 if (!dev->cmd.context) in mthca_cmd_use_events()
568 for (i = 0; i < dev->cmd.max_cmds; ++i) { in mthca_cmd_use_events()
569 dev->cmd.context[i].token = i; in mthca_cmd_use_events()
570 dev->cmd.context[i].next = i + 1; in mthca_cmd_use_events()
573 dev->cmd.context[dev->cmd.max_cmds - 1].next = -1; in mthca_cmd_use_events()
574 dev->cmd.free_head = 0; in mthca_cmd_use_events()
576 sema_init(&dev->cmd.event_sem, dev->cmd.max_cmds); in mthca_cmd_use_events()
577 spin_lock_init(&dev->cmd.context_lock); in mthca_cmd_use_events()
579 for (dev->cmd.token_mask = 1; in mthca_cmd_use_events()
580 dev->cmd.token_mask < dev->cmd.max_cmds; in mthca_cmd_use_events()
581 dev->cmd.token_mask <<= 1) in mthca_cmd_use_events()
583 --dev->cmd.token_mask; in mthca_cmd_use_events()
585 dev->cmd.flags |= MTHCA_CMD_USE_EVENTS; in mthca_cmd_use_events()
587 down(&dev->cmd.poll_sem); in mthca_cmd_use_events()
595 void mthca_cmd_use_polling(struct mthca_dev *dev) in mthca_cmd_use_polling() argument
599 dev->cmd.flags &= ~MTHCA_CMD_USE_EVENTS; in mthca_cmd_use_polling()
601 for (i = 0; i < dev->cmd.max_cmds; ++i) in mthca_cmd_use_polling()
602 down(&dev->cmd.event_sem); in mthca_cmd_use_polling()
604 kfree(dev->cmd.context); in mthca_cmd_use_polling()
606 up(&dev->cmd.poll_sem); in mthca_cmd_use_polling()
609 struct mthca_mailbox *mthca_alloc_mailbox(struct mthca_dev *dev, in mthca_alloc_mailbox() argument
618 mailbox->buf = dma_pool_alloc(dev->cmd.pool, gfp_mask, &mailbox->dma); in mthca_alloc_mailbox()
627 void mthca_free_mailbox(struct mthca_dev *dev, struct mthca_mailbox *mailbox) in mthca_free_mailbox() argument
632 dma_pool_free(dev->cmd.pool, mailbox->buf, mailbox->dma); in mthca_free_mailbox()
636 int mthca_SYS_EN(struct mthca_dev *dev) in mthca_SYS_EN() argument
641 ret = mthca_cmd_imm(dev, 0, &out, 0, 0, CMD_SYS_EN, CMD_TIME_CLASS_D); in mthca_SYS_EN()
644 mthca_warn(dev, "SYS_EN DDR error: syn=%x, sock=%d, " in mthca_SYS_EN()
652 int mthca_SYS_DIS(struct mthca_dev *dev) in mthca_SYS_DIS() argument
654 return mthca_cmd(dev, 0, 0, 0, CMD_SYS_DIS, CMD_TIME_CLASS_C); in mthca_SYS_DIS()
657 static int mthca_map_cmd(struct mthca_dev *dev, u16 op, struct mthca_icm *icm, in mthca_map_cmd() argument
669 mailbox = mthca_alloc_mailbox(dev, GFP_KERNEL); in mthca_map_cmd()
685 mthca_warn(dev, "Got FW area not aligned to %d (%llx/%lx).\n", in mthca_map_cmd()
705 err = mthca_cmd(dev, mailbox->dma, nent, 0, op, in mthca_map_cmd()
715 err = mthca_cmd(dev, mailbox->dma, nent, 0, op, in mthca_map_cmd()
720 mthca_dbg(dev, "Mapped %d chunks/%d KB for FW.\n", tc, ts); in mthca_map_cmd()
723 mthca_dbg(dev, "Mapped %d chunks/%d KB for ICM aux.\n", tc, ts); in mthca_map_cmd()
726 mthca_dbg(dev, "Mapped %d chunks/%d KB at %llx for ICM.\n", in mthca_map_cmd()
732 mthca_free_mailbox(dev, mailbox); in mthca_map_cmd()
736 int mthca_MAP_FA(struct mthca_dev *dev, struct mthca_icm *icm) in mthca_MAP_FA() argument
738 return mthca_map_cmd(dev, CMD_MAP_FA, icm, -1); in mthca_MAP_FA()
741 int mthca_UNMAP_FA(struct mthca_dev *dev) in mthca_UNMAP_FA() argument
743 return mthca_cmd(dev, 0, 0, 0, CMD_UNMAP_FA, CMD_TIME_CLASS_B); in mthca_UNMAP_FA()
746 int mthca_RUN_FW(struct mthca_dev *dev) in mthca_RUN_FW() argument
748 return mthca_cmd(dev, 0, 0, 0, CMD_RUN_FW, CMD_TIME_CLASS_A); in mthca_RUN_FW()
751 static void mthca_setup_cmd_doorbells(struct mthca_dev *dev, u64 base) in mthca_setup_cmd_doorbells() argument
758 max_off = max(max_off, dev->cmd.dbell_offsets[i]); in mthca_setup_cmd_doorbells()
761 mthca_warn(dev, "Firmware doorbell region at 0x%016llx, " in mthca_setup_cmd_doorbells()
767 addr = pci_resource_start(dev->pdev, 2) + in mthca_setup_cmd_doorbells()
768 ((pci_resource_len(dev->pdev, 2) - 1) & base); in mthca_setup_cmd_doorbells()
769 dev->cmd.dbell_map = ioremap(addr, max_off + sizeof(u32)); in mthca_setup_cmd_doorbells()
770 if (!dev->cmd.dbell_map) in mthca_setup_cmd_doorbells()
773 dev->cmd.flags |= MTHCA_CMD_POST_DOORBELLS; in mthca_setup_cmd_doorbells()
774 mthca_dbg(dev, "Mapped doorbell page for posting FW commands\n"); in mthca_setup_cmd_doorbells()
777 int mthca_QUERY_FW(struct mthca_dev *dev) in mthca_QUERY_FW() argument
805 mailbox = mthca_alloc_mailbox(dev, GFP_KERNEL); in mthca_QUERY_FW()
810 err = mthca_cmd_box(dev, 0, mailbox->dma, 0, 0, CMD_QUERY_FW, in mthca_QUERY_FW()
816 MTHCA_GET(dev->fw_ver, outbox, QUERY_FW_VER_OFFSET); in mthca_QUERY_FW()
821 dev->fw_ver = (dev->fw_ver & 0xffff00000000ull) | in mthca_QUERY_FW()
822 ((dev->fw_ver & 0xffff0000ull) >> 16) | in mthca_QUERY_FW()
823 ((dev->fw_ver & 0x0000ffffull) << 16); in mthca_QUERY_FW()
826 dev->cmd.max_cmds = 1 << lg; in mthca_QUERY_FW()
828 mthca_dbg(dev, "FW version %012llx, max commands %d\n", in mthca_QUERY_FW()
829 (unsigned long long) dev->fw_ver, dev->cmd.max_cmds); in mthca_QUERY_FW()
831 MTHCA_GET(dev->catas_err.addr, outbox, QUERY_FW_ERR_START_OFFSET); in mthca_QUERY_FW()
832 MTHCA_GET(dev->catas_err.size, outbox, QUERY_FW_ERR_SIZE_OFFSET); in mthca_QUERY_FW()
834 mthca_dbg(dev, "Catastrophic error buffer at 0x%llx, size 0x%x\n", in mthca_QUERY_FW()
835 (unsigned long long) dev->catas_err.addr, dev->catas_err.size); in mthca_QUERY_FW()
839 mthca_dbg(dev, "FW supports commands through doorbells\n"); in mthca_QUERY_FW()
843 MTHCA_GET(dev->cmd.dbell_offsets[i], outbox, in mthca_QUERY_FW()
846 mthca_setup_cmd_doorbells(dev, base); in mthca_QUERY_FW()
849 if (mthca_is_memfree(dev)) { in mthca_QUERY_FW()
850 MTHCA_GET(dev->fw.arbel.fw_pages, outbox, QUERY_FW_SIZE_OFFSET); in mthca_QUERY_FW()
851 MTHCA_GET(dev->fw.arbel.clr_int_base, outbox, QUERY_FW_CLR_INT_BASE_OFFSET); in mthca_QUERY_FW()
852 MTHCA_GET(dev->fw.arbel.eq_arm_base, outbox, QUERY_FW_EQ_ARM_BASE_OFFSET); in mthca_QUERY_FW()
853 MTHCA_GET(dev->fw.arbel.eq_set_ci_base, outbox, QUERY_FW_EQ_SET_CI_BASE_OFFSET); in mthca_QUERY_FW()
854 mthca_dbg(dev, "FW size %d KB\n", dev->fw.arbel.fw_pages << 2); in mthca_QUERY_FW()
860 dev->fw.arbel.fw_pages = in mthca_QUERY_FW()
861 ALIGN(dev->fw.arbel.fw_pages, PAGE_SIZE / MTHCA_ICM_PAGE_SIZE) >> in mthca_QUERY_FW()
864 mthca_dbg(dev, "Clear int @ %llx, EQ arm @ %llx, EQ set CI @ %llx\n", in mthca_QUERY_FW()
865 (unsigned long long) dev->fw.arbel.clr_int_base, in mthca_QUERY_FW()
866 (unsigned long long) dev->fw.arbel.eq_arm_base, in mthca_QUERY_FW()
867 (unsigned long long) dev->fw.arbel.eq_set_ci_base); in mthca_QUERY_FW()
869 MTHCA_GET(dev->fw.tavor.fw_start, outbox, QUERY_FW_START_OFFSET); in mthca_QUERY_FW()
870 MTHCA_GET(dev->fw.tavor.fw_end, outbox, QUERY_FW_END_OFFSET); in mthca_QUERY_FW()
872 mthca_dbg(dev, "FW size %d KB (start %llx, end %llx)\n", in mthca_QUERY_FW()
873 (int) ((dev->fw.tavor.fw_end - dev->fw.tavor.fw_start) >> 10), in mthca_QUERY_FW()
874 (unsigned long long) dev->fw.tavor.fw_start, in mthca_QUERY_FW()
875 (unsigned long long) dev->fw.tavor.fw_end); in mthca_QUERY_FW()
879 mthca_free_mailbox(dev, mailbox); in mthca_QUERY_FW()
883 int mthca_ENABLE_LAM(struct mthca_dev *dev) in mthca_ENABLE_LAM() argument
898 mailbox = mthca_alloc_mailbox(dev, GFP_KERNEL); in mthca_ENABLE_LAM()
903 err = mthca_cmd_box(dev, 0, mailbox->dma, 0, 0, CMD_ENABLE_LAM, in mthca_ENABLE_LAM()
909 MTHCA_GET(dev->ddr_start, outbox, ENABLE_LAM_START_OFFSET); in mthca_ENABLE_LAM()
910 MTHCA_GET(dev->ddr_end, outbox, ENABLE_LAM_END_OFFSET); in mthca_ENABLE_LAM()
914 !!(dev->mthca_flags & MTHCA_FLAG_DDR_HIDDEN)) { in mthca_ENABLE_LAM()
915 mthca_info(dev, "FW reports that HCA-attached memory " in mthca_ENABLE_LAM()
921 mthca_dbg(dev, "HCA-attached memory is hidden.\n"); in mthca_ENABLE_LAM()
923 mthca_dbg(dev, "HCA memory size %d KB (start %llx, end %llx)\n", in mthca_ENABLE_LAM()
924 (int) ((dev->ddr_end - dev->ddr_start) >> 10), in mthca_ENABLE_LAM()
925 (unsigned long long) dev->ddr_start, in mthca_ENABLE_LAM()
926 (unsigned long long) dev->ddr_end); in mthca_ENABLE_LAM()
929 mthca_free_mailbox(dev, mailbox); in mthca_ENABLE_LAM()
933 int mthca_DISABLE_LAM(struct mthca_dev *dev) in mthca_DISABLE_LAM() argument
935 return mthca_cmd(dev, 0, 0, 0, CMD_SYS_DIS, CMD_TIME_CLASS_C); in mthca_DISABLE_LAM()
938 int mthca_QUERY_DDR(struct mthca_dev *dev) in mthca_QUERY_DDR() argument
953 mailbox = mthca_alloc_mailbox(dev, GFP_KERNEL); in mthca_QUERY_DDR()
958 err = mthca_cmd_box(dev, 0, mailbox->dma, 0, 0, CMD_QUERY_DDR, in mthca_QUERY_DDR()
964 MTHCA_GET(dev->ddr_start, outbox, QUERY_DDR_START_OFFSET); in mthca_QUERY_DDR()
965 MTHCA_GET(dev->ddr_end, outbox, QUERY_DDR_END_OFFSET); in mthca_QUERY_DDR()
969 !!(dev->mthca_flags & MTHCA_FLAG_DDR_HIDDEN)) { in mthca_QUERY_DDR()
970 mthca_info(dev, "FW reports that HCA-attached memory " in mthca_QUERY_DDR()
976 mthca_dbg(dev, "HCA-attached memory is hidden.\n"); in mthca_QUERY_DDR()
978 mthca_dbg(dev, "HCA memory size %d KB (start %llx, end %llx)\n", in mthca_QUERY_DDR()
979 (int) ((dev->ddr_end - dev->ddr_start) >> 10), in mthca_QUERY_DDR()
980 (unsigned long long) dev->ddr_start, in mthca_QUERY_DDR()
981 (unsigned long long) dev->ddr_end); in mthca_QUERY_DDR()
984 mthca_free_mailbox(dev, mailbox); in mthca_QUERY_DDR()
988 int mthca_QUERY_DEV_LIM(struct mthca_dev *dev, in mthca_QUERY_DEV_LIM() argument
1059 mailbox = mthca_alloc_mailbox(dev, GFP_KERNEL); in mthca_QUERY_DEV_LIM()
1064 err = mthca_cmd_box(dev, 0, mailbox->dma, 0, 0, CMD_QUERY_DEV_LIM, in mthca_QUERY_DEV_LIM()
1095 if (mthca_is_memfree(dev)) in mthca_QUERY_DEV_LIM()
1097 dev->limits.mtt_seg_size) / dev->limits.mtt_seg_size; in mthca_QUERY_DEV_LIM()
1171 if (mthca_is_memfree(dev)) { in mthca_QUERY_DEV_LIM()
1196 mthca_dbg(dev, "Base MM extensions: yes " in mthca_QUERY_DEV_LIM()
1202 mthca_dbg(dev, "Base MM extensions: no\n"); in mthca_QUERY_DEV_LIM()
1204 mthca_dbg(dev, "Max ICM size %lld MB\n", in mthca_QUERY_DEV_LIM()
1216 mthca_dbg(dev, "Max QPs: %d, reserved QPs: %d, entry size: %d\n", in mthca_QUERY_DEV_LIM()
1218 mthca_dbg(dev, "Max SRQs: %d, reserved SRQs: %d, entry size: %d\n", in mthca_QUERY_DEV_LIM()
1220 mthca_dbg(dev, "Max CQs: %d, reserved CQs: %d, entry size: %d\n", in mthca_QUERY_DEV_LIM()
1222 mthca_dbg(dev, "Max EQs: %d, reserved EQs: %d, entry size: %d\n", in mthca_QUERY_DEV_LIM()
1224 mthca_dbg(dev, "reserved MPTs: %d, reserved MTTs: %d\n", in mthca_QUERY_DEV_LIM()
1226 mthca_dbg(dev, "Max PDs: %d, reserved PDs: %d, reserved UARs: %d\n", in mthca_QUERY_DEV_LIM()
1228 mthca_dbg(dev, "Max QP/MCG: %d, reserved MGMs: %d\n", in mthca_QUERY_DEV_LIM()
1230 mthca_dbg(dev, "Max CQEs: %d, max WQEs: %d, max SRQ WQEs: %d\n", in mthca_QUERY_DEV_LIM()
1233 mthca_dbg(dev, "Flags: %08x\n", dev_lim->flags); in mthca_QUERY_DEV_LIM()
1236 mthca_free_mailbox(dev, mailbox); in mthca_QUERY_DEV_LIM()
1268 int mthca_QUERY_ADAPTER(struct mthca_dev *dev, in mthca_QUERY_ADAPTER() argument
1282 mailbox = mthca_alloc_mailbox(dev, GFP_KERNEL); in mthca_QUERY_ADAPTER()
1287 err = mthca_cmd_box(dev, 0, mailbox->dma, 0, 0, CMD_QUERY_ADAPTER, in mthca_QUERY_ADAPTER()
1293 if (!mthca_is_memfree(dev)) { in mthca_QUERY_ADAPTER()
1307 mthca_free_mailbox(dev, mailbox); in mthca_QUERY_ADAPTER()
1311 int mthca_INIT_HCA(struct mthca_dev *dev, in mthca_INIT_HCA() argument
1356 mailbox = mthca_alloc_mailbox(dev, GFP_KERNEL); in mthca_INIT_HCA()
1363 if (dev->mthca_flags & MTHCA_FLAG_SINAI_OPT) in mthca_INIT_HCA()
1377 if (dev->device_cap_flags & IB_DEVICE_UD_IP_CSUM) in mthca_INIT_HCA()
1410 if (!mthca_is_memfree(dev)) in mthca_INIT_HCA()
1423 if (mthca_is_memfree(dev)) { in mthca_INIT_HCA()
1429 err = mthca_cmd(dev, mailbox->dma, 0, 0, in mthca_INIT_HCA()
1432 mthca_free_mailbox(dev, mailbox); in mthca_INIT_HCA()
1436 int mthca_INIT_IB(struct mthca_dev *dev, in mthca_INIT_IB() argument
1459 mailbox = mthca_alloc_mailbox(dev, GFP_KERNEL); in mthca_INIT_IB()
1481 err = mthca_cmd(dev, mailbox->dma, port, 0, CMD_INIT_IB, in mthca_INIT_IB()
1484 mthca_free_mailbox(dev, mailbox); in mthca_INIT_IB()
1488 int mthca_CLOSE_IB(struct mthca_dev *dev, int port) in mthca_CLOSE_IB() argument
1490 return mthca_cmd(dev, 0, port, 0, CMD_CLOSE_IB, CMD_TIME_CLASS_A); in mthca_CLOSE_IB()
1493 int mthca_CLOSE_HCA(struct mthca_dev *dev, int panic) in mthca_CLOSE_HCA() argument
1495 return mthca_cmd(dev, 0, 0, panic, CMD_CLOSE_HCA, CMD_TIME_CLASS_C); in mthca_CLOSE_HCA()
1498 int mthca_SET_IB(struct mthca_dev *dev, struct mthca_set_ib_param *param, in mthca_SET_IB() argument
1513 mailbox = mthca_alloc_mailbox(dev, GFP_KERNEL); in mthca_SET_IB()
1527 err = mthca_cmd(dev, mailbox->dma, port, 0, CMD_SET_IB, in mthca_SET_IB()
1530 mthca_free_mailbox(dev, mailbox); in mthca_SET_IB()
1534 int mthca_MAP_ICM(struct mthca_dev *dev, struct mthca_icm *icm, u64 virt) in mthca_MAP_ICM() argument
1536 return mthca_map_cmd(dev, CMD_MAP_ICM, icm, virt); in mthca_MAP_ICM()
1539 int mthca_MAP_ICM_page(struct mthca_dev *dev, u64 dma_addr, u64 virt) in mthca_MAP_ICM_page() argument
1545 mailbox = mthca_alloc_mailbox(dev, GFP_KERNEL); in mthca_MAP_ICM_page()
1553 err = mthca_cmd(dev, mailbox->dma, 1, 0, CMD_MAP_ICM, in mthca_MAP_ICM_page()
1556 mthca_free_mailbox(dev, mailbox); in mthca_MAP_ICM_page()
1559 mthca_dbg(dev, "Mapped page at %llx to %llx for ICM.\n", in mthca_MAP_ICM_page()
1565 int mthca_UNMAP_ICM(struct mthca_dev *dev, u64 virt, u32 page_count) in mthca_UNMAP_ICM() argument
1567 mthca_dbg(dev, "Unmapping %d pages at %llx from ICM.\n", in mthca_UNMAP_ICM()
1570 return mthca_cmd(dev, virt, page_count, 0, in mthca_UNMAP_ICM()
1574 int mthca_MAP_ICM_AUX(struct mthca_dev *dev, struct mthca_icm *icm) in mthca_MAP_ICM_AUX() argument
1576 return mthca_map_cmd(dev, CMD_MAP_ICM_AUX, icm, -1); in mthca_MAP_ICM_AUX()
1579 int mthca_UNMAP_ICM_AUX(struct mthca_dev *dev) in mthca_UNMAP_ICM_AUX() argument
1581 return mthca_cmd(dev, 0, 0, 0, CMD_UNMAP_ICM_AUX, CMD_TIME_CLASS_B); in mthca_UNMAP_ICM_AUX()
1584 int mthca_SET_ICM_SIZE(struct mthca_dev *dev, u64 icm_size, u64 *aux_pages) in mthca_SET_ICM_SIZE() argument
1586 int ret = mthca_cmd_imm(dev, icm_size, aux_pages, 0, in mthca_SET_ICM_SIZE()
1602 int mthca_SW2HW_MPT(struct mthca_dev *dev, struct mthca_mailbox *mailbox, in mthca_SW2HW_MPT() argument
1605 return mthca_cmd(dev, mailbox->dma, mpt_index, 0, CMD_SW2HW_MPT, in mthca_SW2HW_MPT()
1609 int mthca_HW2SW_MPT(struct mthca_dev *dev, struct mthca_mailbox *mailbox, in mthca_HW2SW_MPT() argument
1612 return mthca_cmd_box(dev, 0, mailbox ? mailbox->dma : 0, mpt_index, in mthca_HW2SW_MPT()
1617 int mthca_WRITE_MTT(struct mthca_dev *dev, struct mthca_mailbox *mailbox, in mthca_WRITE_MTT() argument
1620 return mthca_cmd(dev, mailbox->dma, num_mtt, 0, CMD_WRITE_MTT, in mthca_WRITE_MTT()
1624 int mthca_SYNC_TPT(struct mthca_dev *dev) in mthca_SYNC_TPT() argument
1626 return mthca_cmd(dev, 0, 0, 0, CMD_SYNC_TPT, CMD_TIME_CLASS_B); in mthca_SYNC_TPT()
1629 int mthca_MAP_EQ(struct mthca_dev *dev, u64 event_mask, int unmap, in mthca_MAP_EQ() argument
1632 mthca_dbg(dev, "%s mask %016llx for eqn %d\n", in mthca_MAP_EQ()
1635 return mthca_cmd(dev, event_mask, (unmap << 31) | eq_num, in mthca_MAP_EQ()
1639 int mthca_SW2HW_EQ(struct mthca_dev *dev, struct mthca_mailbox *mailbox, in mthca_SW2HW_EQ() argument
1642 return mthca_cmd(dev, mailbox->dma, eq_num, 0, CMD_SW2HW_EQ, in mthca_SW2HW_EQ()
1646 int mthca_HW2SW_EQ(struct mthca_dev *dev, struct mthca_mailbox *mailbox, in mthca_HW2SW_EQ() argument
1649 return mthca_cmd_box(dev, 0, mailbox->dma, eq_num, 0, in mthca_HW2SW_EQ()
1654 int mthca_SW2HW_CQ(struct mthca_dev *dev, struct mthca_mailbox *mailbox, in mthca_SW2HW_CQ() argument
1657 return mthca_cmd(dev, mailbox->dma, cq_num, 0, CMD_SW2HW_CQ, in mthca_SW2HW_CQ()
1661 int mthca_HW2SW_CQ(struct mthca_dev *dev, struct mthca_mailbox *mailbox, in mthca_HW2SW_CQ() argument
1664 return mthca_cmd_box(dev, 0, mailbox->dma, cq_num, 0, in mthca_HW2SW_CQ()
1669 int mthca_RESIZE_CQ(struct mthca_dev *dev, int cq_num, u32 lkey, u8 log_size) in mthca_RESIZE_CQ() argument
1679 mailbox = mthca_alloc_mailbox(dev, GFP_KERNEL); in mthca_RESIZE_CQ()
1692 err = mthca_cmd(dev, mailbox->dma, cq_num, 1, CMD_RESIZE_CQ, in mthca_RESIZE_CQ()
1695 mthca_free_mailbox(dev, mailbox); in mthca_RESIZE_CQ()
1699 int mthca_SW2HW_SRQ(struct mthca_dev *dev, struct mthca_mailbox *mailbox, in mthca_SW2HW_SRQ() argument
1702 return mthca_cmd(dev, mailbox->dma, srq_num, 0, CMD_SW2HW_SRQ, in mthca_SW2HW_SRQ()
1706 int mthca_HW2SW_SRQ(struct mthca_dev *dev, struct mthca_mailbox *mailbox, in mthca_HW2SW_SRQ() argument
1709 return mthca_cmd_box(dev, 0, mailbox->dma, srq_num, 0, in mthca_HW2SW_SRQ()
1714 int mthca_QUERY_SRQ(struct mthca_dev *dev, u32 num, in mthca_QUERY_SRQ() argument
1717 return mthca_cmd_box(dev, 0, mailbox->dma, num, 0, in mthca_QUERY_SRQ()
1721 int mthca_ARM_SRQ(struct mthca_dev *dev, int srq_num, int limit) in mthca_ARM_SRQ() argument
1723 return mthca_cmd(dev, limit, srq_num, 0, CMD_ARM_SRQ, in mthca_ARM_SRQ()
1727 int mthca_MODIFY_QP(struct mthca_dev *dev, enum ib_qp_state cur, in mthca_MODIFY_QP() argument
1780 mailbox = mthca_alloc_mailbox(dev, GFP_KERNEL); in mthca_MODIFY_QP()
1788 err = mthca_cmd_box(dev, 0, mailbox ? mailbox->dma : 0, in mthca_MODIFY_QP()
1794 mthca_dbg(dev, "Dumping QP context:\n"); in mthca_MODIFY_QP()
1807 mthca_free_mailbox(dev, mailbox); in mthca_MODIFY_QP()
1811 mthca_dbg(dev, "Dumping QP context:\n"); in mthca_MODIFY_QP()
1823 err = mthca_cmd(dev, mailbox->dma, optmask | (!!is_ee << 24) | num, in mthca_MODIFY_QP()
1830 int mthca_QUERY_QP(struct mthca_dev *dev, u32 num, int is_ee, in mthca_QUERY_QP() argument
1833 return mthca_cmd_box(dev, 0, mailbox->dma, (!!is_ee << 24) | num, 0, in mthca_QUERY_QP()
1837 int mthca_CONF_SPECIAL_QP(struct mthca_dev *dev, int type, u32 qpn) in mthca_CONF_SPECIAL_QP() argument
1858 return mthca_cmd(dev, 0, qpn, op_mod, CMD_CONF_SPECIAL_QP, in mthca_CONF_SPECIAL_QP()
1862 int mthca_MAD_IFC(struct mthca_dev *dev, int ignore_mkey, int ignore_bkey, in mthca_MAD_IFC() argument
1881 inmailbox = mthca_alloc_mailbox(dev, GFP_KERNEL); in mthca_MAD_IFC()
1886 outmailbox = mthca_alloc_mailbox(dev, GFP_KERNEL); in mthca_MAD_IFC()
1888 mthca_free_mailbox(dev, inmailbox); in mthca_MAD_IFC()
1929 err = mthca_cmd_box(dev, inmailbox->dma, outmailbox->dma, in mthca_MAD_IFC()
1936 mthca_free_mailbox(dev, inmailbox); in mthca_MAD_IFC()
1937 mthca_free_mailbox(dev, outmailbox); in mthca_MAD_IFC()
1941 int mthca_READ_MGM(struct mthca_dev *dev, int index, in mthca_READ_MGM() argument
1944 return mthca_cmd_box(dev, 0, mailbox->dma, index, 0, in mthca_READ_MGM()
1948 int mthca_WRITE_MGM(struct mthca_dev *dev, int index, in mthca_WRITE_MGM() argument
1951 return mthca_cmd(dev, mailbox->dma, index, 0, CMD_WRITE_MGM, in mthca_WRITE_MGM()
1955 int mthca_MGID_HASH(struct mthca_dev *dev, struct mthca_mailbox *mailbox, in mthca_MGID_HASH() argument
1961 err = mthca_cmd_imm(dev, mailbox->dma, &imm, 0, 0, CMD_MGID_HASH, in mthca_MGID_HASH()
1968 int mthca_NOP(struct mthca_dev *dev) in mthca_NOP() argument
1970 return mthca_cmd(dev, 0, 0x1f, 0, CMD_NOP, msecs_to_jiffies(100)); in mthca_NOP()