diff options
| -rw-r--r-- | drivers/infiniband/Kconfig | 1 | ||||
| -rw-r--r-- | drivers/infiniband/Makefile | 1 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ocrdma/Kconfig | 8 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ocrdma/Makefile | 5 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma.h | 392 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_abi.h | 134 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_ah.c | 172 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_ah.h | 42 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_hw.c | 2640 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_hw.h | 132 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_main.c | 558 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_sli.h | 1672 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_verbs.c | 2542 | ||||
| -rw-r--r-- | drivers/infiniband/hw/ocrdma/ocrdma_verbs.h | 94 |
14 files changed, 8393 insertions, 0 deletions
diff --git a/drivers/infiniband/Kconfig b/drivers/infiniband/Kconfig index eb0add311dc8..a0f29c1d03bc 100644 --- a/drivers/infiniband/Kconfig +++ b/drivers/infiniband/Kconfig | |||
| @@ -51,6 +51,7 @@ source "drivers/infiniband/hw/cxgb3/Kconfig" | |||
| 51 | source "drivers/infiniband/hw/cxgb4/Kconfig" | 51 | source "drivers/infiniband/hw/cxgb4/Kconfig" |
| 52 | source "drivers/infiniband/hw/mlx4/Kconfig" | 52 | source "drivers/infiniband/hw/mlx4/Kconfig" |
| 53 | source "drivers/infiniband/hw/nes/Kconfig" | 53 | source "drivers/infiniband/hw/nes/Kconfig" |
| 54 | source "drivers/infiniband/hw/ocrdma/Kconfig" | ||
| 54 | 55 | ||
| 55 | source "drivers/infiniband/ulp/ipoib/Kconfig" | 56 | source "drivers/infiniband/ulp/ipoib/Kconfig" |
| 56 | 57 | ||
diff --git a/drivers/infiniband/Makefile b/drivers/infiniband/Makefile index a3b2d8eac86e..bf846a14b9d3 100644 --- a/drivers/infiniband/Makefile +++ b/drivers/infiniband/Makefile | |||
| @@ -8,6 +8,7 @@ obj-$(CONFIG_INFINIBAND_CXGB3) += hw/cxgb3/ | |||
| 8 | obj-$(CONFIG_INFINIBAND_CXGB4) += hw/cxgb4/ | 8 | obj-$(CONFIG_INFINIBAND_CXGB4) += hw/cxgb4/ |
| 9 | obj-$(CONFIG_MLX4_INFINIBAND) += hw/mlx4/ | 9 | obj-$(CONFIG_MLX4_INFINIBAND) += hw/mlx4/ |
| 10 | obj-$(CONFIG_INFINIBAND_NES) += hw/nes/ | 10 | obj-$(CONFIG_INFINIBAND_NES) += hw/nes/ |
| 11 | obj-$(CONFIG_INFINIBAND_OCRDMA) += hw/ocrdma/ | ||
| 11 | obj-$(CONFIG_INFINIBAND_IPOIB) += ulp/ipoib/ | 12 | obj-$(CONFIG_INFINIBAND_IPOIB) += ulp/ipoib/ |
| 12 | obj-$(CONFIG_INFINIBAND_SRP) += ulp/srp/ | 13 | obj-$(CONFIG_INFINIBAND_SRP) += ulp/srp/ |
| 13 | obj-$(CONFIG_INFINIBAND_SRPT) += ulp/srpt/ | 14 | obj-$(CONFIG_INFINIBAND_SRPT) += ulp/srpt/ |
diff --git a/drivers/infiniband/hw/ocrdma/Kconfig b/drivers/infiniband/hw/ocrdma/Kconfig new file mode 100644 index 000000000000..cf993424e2fb --- /dev/null +++ b/drivers/infiniband/hw/ocrdma/Kconfig | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | config INFINIBAND_OCRDMA | ||
| 2 | tristate "Emulex One Connect HCA support" | ||
| 3 | depends on ETHERNET && NETDEVICES && PCI | ||
| 4 | select NET_VENDOR_EMULEX | ||
| 5 | select BE2NET | ||
| 6 | ---help--- | ||
| 7 | This driver provides low-level InfiniBand over Ethernet | ||
| 8 | support for Emulex One Connect host channel adapters (HCAs). | ||
diff --git a/drivers/infiniband/hw/ocrdma/Makefile b/drivers/infiniband/hw/ocrdma/Makefile new file mode 100644 index 000000000000..06a5bed12e43 --- /dev/null +++ b/drivers/infiniband/hw/ocrdma/Makefile | |||
| @@ -0,0 +1,5 @@ | |||
| 1 | ccflags-y := -Idrivers/net/ethernet/emulex/benet | ||
| 2 | |||
| 3 | obj-$(CONFIG_INFINIBAND_OCRDMA) += ocrdma.o | ||
| 4 | |||
| 5 | ocrdma-y := ocrdma_main.o ocrdma_verbs.o ocrdma_hw.o ocrdma_ah.o | ||
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma.h b/drivers/infiniband/hw/ocrdma/ocrdma.h new file mode 100644 index 000000000000..d7a44b812dfc --- /dev/null +++ b/drivers/infiniband/hw/ocrdma/ocrdma.h | |||
| @@ -0,0 +1,392 @@ | |||
| 1 | /******************************************************************* | ||
| 2 | * This file is part of the Emulex RoCE Device Driver for * | ||
| 3 | * RoCE (RDMA over Converged Ethernet) adapters. * | ||
| 4 | * Copyright (C) 2008-2012 Emulex. All rights reserved. * | ||
| 5 | * EMULEX and SLI are trademarks of Emulex. * | ||
| 6 | * www.emulex.com * | ||
| 7 | * * | ||
| 8 | * This program is free software; you can redistribute it and/or * | ||
| 9 | * modify it under the terms of version 2 of the GNU General * | ||
| 10 | * Public License as published by the Free Software Foundation. * | ||
| 11 | * This program is distributed in the hope that it will be useful. * | ||
| 12 | * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND * | ||
| 13 | * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, * | ||
| 14 | * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE * | ||
| 15 | * DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD * | ||
| 16 | * TO BE LEGALLY INVALID. See the GNU General Public License for * | ||
| 17 | * more details, a copy of which can be found in the file COPYING * | ||
| 18 | * included with this package. * | ||
| 19 | * | ||
| 20 | * Contact Information: | ||
| 21 | * linux-drivers@emulex.com | ||
| 22 | * | ||
| 23 | * Emulex | ||
| 24 | * 3333 Susan Street | ||
| 25 | * Costa Mesa, CA 92626 | ||
| 26 | *******************************************************************/ | ||
| 27 | |||
| 28 | #ifndef __OCRDMA_H__ | ||
| 29 | #define __OCRDMA_H__ | ||
| 30 | |||
| 31 | #include <linux/mutex.h> | ||
| 32 | #include <linux/list.h> | ||
| 33 | #include <linux/spinlock.h> | ||
| 34 | #include <linux/pci.h> | ||
| 35 | |||
| 36 | #include <rdma/ib_verbs.h> | ||
| 37 | #include <rdma/ib_user_verbs.h> | ||
| 38 | |||
| 39 | #include <be_roce.h> | ||
| 40 | #include "ocrdma_sli.h" | ||
| 41 | |||
| 42 | #define OCRDMA_ROCE_DEV_VERSION "1.0.0" | ||
| 43 | #define OCRDMA_NODE_DESC "Emulex OneConnect RoCE HCA" | ||
| 44 | |||
| 45 | #define ocrdma_err(format, arg...) printk(KERN_ERR format, ##arg) | ||
| 46 | |||
| 47 | #define OCRDMA_MAX_AH 512 | ||
| 48 | |||
| 49 | #define OCRDMA_UVERBS(CMD_NAME) (1ull << IB_USER_VERBS_CMD_##CMD_NAME) | ||
| 50 | |||
| 51 | struct ocrdma_dev_attr { | ||
| 52 | u8 fw_ver[32]; | ||
| 53 | u32 vendor_id; | ||
| 54 | u32 device_id; | ||
| 55 | u16 max_pd; | ||
| 56 | u16 max_cq; | ||
| 57 | u16 max_cqe; | ||
| 58 | u16 max_qp; | ||
| 59 | u16 max_wqe; | ||
| 60 | u16 max_rqe; | ||
| 61 | u32 max_inline_data; | ||
| 62 | int max_send_sge; | ||
| 63 | int max_recv_sge; | ||
| 64 | int max_mr; | ||
| 65 | u64 max_mr_size; | ||
| 66 | u32 max_num_mr_pbl; | ||
| 67 | int max_fmr; | ||
| 68 | int max_map_per_fmr; | ||
| 69 | int max_pages_per_frmr; | ||
| 70 | u16 max_ord_per_qp; | ||
| 71 | u16 max_ird_per_qp; | ||
| 72 | |||
| 73 | int device_cap_flags; | ||
| 74 | u8 cq_overflow_detect; | ||
| 75 | u8 srq_supported; | ||
| 76 | |||
| 77 | u32 wqe_size; | ||
| 78 | u32 rqe_size; | ||
| 79 | u32 ird_page_size; | ||
| 80 | u8 local_ca_ack_delay; | ||
| 81 | u8 ird; | ||
| 82 | u8 num_ird_pages; | ||
| 83 | }; | ||
| 84 | |||
| 85 | struct ocrdma_pbl { | ||
| 86 | void *va; | ||
| 87 | dma_addr_t pa; | ||
| 88 | }; | ||
| 89 | |||
| 90 | struct ocrdma_queue_info { | ||
| 91 | void *va; | ||
| 92 | dma_addr_t dma; | ||
| 93 | u32 size; | ||
| 94 | u16 len; | ||
| 95 | u16 entry_size; /* Size of an element in the queue */ | ||
| 96 | u16 id; /* qid, where to ring the doorbell. */ | ||
| 97 | u16 head, tail; | ||
| 98 | bool created; | ||
| 99 | atomic_t used; /* Number of valid elements in the queue */ | ||
| 100 | }; | ||
| 101 | |||
| 102 | struct ocrdma_eq { | ||
| 103 | struct ocrdma_queue_info q; | ||
| 104 | u32 vector; | ||
| 105 | int cq_cnt; | ||
| 106 | struct ocrdma_dev *dev; | ||
| 107 | char irq_name[32]; | ||
| 108 | }; | ||
| 109 | |||
| 110 | struct ocrdma_mq { | ||
| 111 | struct ocrdma_queue_info sq; | ||
| 112 | struct ocrdma_queue_info cq; | ||
| 113 | bool rearm_cq; | ||
| 114 | }; | ||
| 115 | |||
| 116 | struct mqe_ctx { | ||
| 117 | struct mutex lock; /* for serializing mailbox commands on MQ */ | ||
| 118 | wait_queue_head_t cmd_wait; | ||
| 119 | u32 tag; | ||
| 120 | u16 cqe_status; | ||
| 121 | u16 ext_status; | ||
| 122 | bool cmd_done; | ||
| 123 | }; | ||
| 124 | |||
| 125 | struct ocrdma_dev { | ||
| 126 | struct ib_device ibdev; | ||
| 127 | struct ocrdma_dev_attr attr; | ||
| 128 | |||
| 129 | struct mutex dev_lock; /* provides syncronise access to device data */ | ||
| 130 | spinlock_t flush_q_lock ____cacheline_aligned; | ||
| 131 | |||
| 132 | struct ocrdma_cq **cq_tbl; | ||
| 133 | struct ocrdma_qp **qp_tbl; | ||
