diff options
| author | Eli Cohen <eli@mellanox.com> | 2013-07-07 10:25:49 -0400 |
|---|---|---|
| committer | Roland Dreier <roland@purestorage.com> | 2013-07-08 13:32:24 -0400 |
| commit | e126ba97dba9edeb6fafa3665b5f8497fc9cdf8c (patch) | |
| tree | c886014a89a8a96b8fb171ad6683dc80ce2ff018 | |
| parent | 0134f16bc91cc15a38c867b81568b791c9b626aa (diff) | |
mlx5: Add driver for Mellanox Connect-IB adapters
The driver is comprised of two kernel modules: mlx5_ib and mlx5_core.
This partitioning resembles what we have for mlx4, except that mlx5_ib
is the pci device driver and not mlx5_core.
mlx5_core is essentially a library that provides general functionality
that is intended to be used by other Mellanox devices that will be
introduced in the future. mlx5_ib has a similar role as any hardware
device under drivers/infiniband/hw.
Signed-off-by: Eli Cohen <eli@mellanox.com>
Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com>
[ Merge in coccinelle fixes from Fengguang Wu <fengguang.wu@intel.com>.
- Roland ]
Signed-off-by: Roland Dreier <roland@purestorage.com>
45 files changed, 15779 insertions, 0 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 60d6a3393500..b4265364ed27 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -5365,6 +5365,28 @@ W: http://linuxtv.org | |||
| 5365 | S: Odd Fixes | 5365 | S: Odd Fixes |
| 5366 | F: drivers/media/radio/radio-miropcm20* | 5366 | F: drivers/media/radio/radio-miropcm20* |
| 5367 | 5367 | ||
| 5368 | Mellanox MLX5 core VPI driver | ||
| 5369 | M: Eli Cohen <eli@mellanox.com> | ||
| 5370 | L: netdev@vger.kernel.org | ||
| 5371 | L: linux-rdma@vger.kernel.org | ||
| 5372 | W: http://www.mellanox.com | ||
| 5373 | Q: http://patchwork.ozlabs.org/project/netdev/list/ | ||
| 5374 | Q: http://patchwork.kernel.org/project/linux-rdma/list/ | ||
| 5375 | T: git://openfabrics.org/~eli/connect-ib.git | ||
| 5376 | S: Supported | ||
| 5377 | F: drivers/net/ethernet/mellanox/mlx5/core/ | ||
| 5378 | F: include/linux/mlx5/ | ||
| 5379 | |||
| 5380 | Mellanox MLX5 IB driver | ||
| 5381 | M: Eli Cohen <eli@mellanox.com> | ||
| 5382 | L: linux-rdma@vger.kernel.org | ||
| 5383 | W: http://www.mellanox.com | ||
| 5384 | Q: http://patchwork.kernel.org/project/linux-rdma/list/ | ||
| 5385 | T: git://openfabrics.org/~eli/connect-ib.git | ||
| 5386 | S: Supported | ||
| 5387 | F: include/linux/mlx5/ | ||
| 5388 | F: drivers/infiniband/hw/mlx5/ | ||
| 5389 | |||
| 5368 | MODULE SUPPORT | 5390 | MODULE SUPPORT |
| 5369 | M: Rusty Russell <rusty@rustcorp.com.au> | 5391 | M: Rusty Russell <rusty@rustcorp.com.au> |
| 5370 | S: Maintained | 5392 | S: Maintained |
diff --git a/drivers/infiniband/Kconfig b/drivers/infiniband/Kconfig index c85b56c28099..5ceda710f516 100644 --- a/drivers/infiniband/Kconfig +++ b/drivers/infiniband/Kconfig | |||
| @@ -50,6 +50,7 @@ source "drivers/infiniband/hw/amso1100/Kconfig" | |||
| 50 | source "drivers/infiniband/hw/cxgb3/Kconfig" | 50 | 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/mlx5/Kconfig" | ||
| 53 | source "drivers/infiniband/hw/nes/Kconfig" | 54 | source "drivers/infiniband/hw/nes/Kconfig" |
| 54 | source "drivers/infiniband/hw/ocrdma/Kconfig" | 55 | source "drivers/infiniband/hw/ocrdma/Kconfig" |
| 55 | 56 | ||
diff --git a/drivers/infiniband/Makefile b/drivers/infiniband/Makefile index b126fefe0b1c..1fe69888515f 100644 --- a/drivers/infiniband/Makefile +++ b/drivers/infiniband/Makefile | |||
| @@ -7,6 +7,7 @@ obj-$(CONFIG_INFINIBAND_AMSO1100) += hw/amso1100/ | |||
| 7 | obj-$(CONFIG_INFINIBAND_CXGB3) += hw/cxgb3/ | 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_MLX5_INFINIBAND) += hw/mlx5/ | ||
| 10 | obj-$(CONFIG_INFINIBAND_NES) += hw/nes/ | 11 | obj-$(CONFIG_INFINIBAND_NES) += hw/nes/ |
| 11 | obj-$(CONFIG_INFINIBAND_OCRDMA) += hw/ocrdma/ | 12 | obj-$(CONFIG_INFINIBAND_OCRDMA) += hw/ocrdma/ |
| 12 | obj-$(CONFIG_INFINIBAND_IPOIB) += ulp/ipoib/ | 13 | obj-$(CONFIG_INFINIBAND_IPOIB) += ulp/ipoib/ |
diff --git a/drivers/infiniband/hw/mlx5/Kconfig b/drivers/infiniband/hw/mlx5/Kconfig new file mode 100644 index 000000000000..8e6aebfaf8a4 --- /dev/null +++ b/drivers/infiniband/hw/mlx5/Kconfig | |||
| @@ -0,0 +1,10 @@ | |||
| 1 | config MLX5_INFINIBAND | ||
| 2 | tristate "Mellanox Connect-IB HCA support" | ||
| 3 | depends on NETDEVICES && ETHERNET && PCI && X86 | ||
| 4 | select NET_VENDOR_MELLANOX | ||
| 5 | select MLX5_CORE | ||
| 6 | ---help--- | ||
| 7 | This driver provides low-level InfiniBand support for | ||
| 8 | Mellanox Connect-IB PCI Express host channel adapters (HCAs). | ||
| 9 | This is required to use InfiniBand protocols such as | ||
| 10 | IP-over-IB or SRP with these devices. | ||
diff --git a/drivers/infiniband/hw/mlx5/Makefile b/drivers/infiniband/hw/mlx5/Makefile new file mode 100644 index 000000000000..4ea0135af484 --- /dev/null +++ b/drivers/infiniband/hw/mlx5/Makefile | |||
| @@ -0,0 +1,3 @@ | |||
| 1 | obj-$(CONFIG_MLX5_INFINIBAND) += mlx5_ib.o | ||
| 2 | |||
| 3 | mlx5_ib-y := main.o cq.o doorbell.o qp.o mem.o srq.o mr.o ah.o mad.o | ||
diff --git a/drivers/infiniband/hw/mlx5/ah.c b/drivers/infiniband/hw/mlx5/ah.c new file mode 100644 index 000000000000..39ab0caefdf9 --- /dev/null +++ b/drivers/infiniband/hw/mlx5/ah.c | |||
| @@ -0,0 +1,92 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2013, Mellanox Technologies inc. All rights reserved. | ||
| 3 | * | ||
| 4 | * This software is available to you under a choice of one of two | ||
| 5 | * licenses. You may choose to be licensed under the terms of the GNU | ||
| 6 | * General Public License (GPL) Version 2, available from the file | ||
| 7 | * COPYING in the main directory of this source tree, or the | ||
| 8 | * OpenIB.org BSD license below: | ||
| 9 | * | ||
| 10 | * Redistribution and use in source and binary forms, with or | ||
| 11 | * without modification, are permitted provided that the following | ||
| 12 | * conditions are met: | ||
| 13 | * | ||
| 14 | * - Redistributions of source code must retain the above | ||
| 15 | * copyright notice, this list of conditions and the following | ||
| 16 | * disclaimer. | ||
| 17 | * | ||
| 18 | * - Redistributions in binary form must reproduce the above | ||
| 19 | * copyright notice, this list of conditions and the following | ||
| 20 | * disclaimer in the documentation and/or other materials | ||
| 21 | * provided with the distribution. | ||
| 22 | * | ||
| 23 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | ||
| 24 | * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | ||
| 25 | * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | ||
| 26 | * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS | ||
| 27 | * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN | ||
| 28 | * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN | ||
| 29 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
| 30 | * SOFTWARE. | ||
| 31 | */ | ||
| 32 | |||
| 33 | #include "mlx5_ib.h" | ||
| 34 | |||
| 35 | struct ib_ah *create_ib_ah(struct ib_ah_attr *ah_attr, | ||
| 36 | struct mlx5_ib_ah *ah) | ||
| 37 | { | ||
| 38 | if (ah_attr->ah_flags & IB_AH_GRH) { | ||
| 39 | memcpy(ah->av.rgid, &ah_attr->grh.dgid, 16); | ||
| 40 | ah->av.grh_gid_fl = cpu_to_be32(ah_attr->grh.flow_label | | ||
| 41 | (1 << 30) | | ||
