aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/qed
diff options
context:
space:
mode:
authorRam Amrani <Ram.Amrani@caviumnetworks.com>2016-10-01 14:59:56 -0400
committerDavid S. Miller <davem@davemloft.net>2016-10-03 23:22:46 -0400
commitcee9fbd8e2e9e713cd8bf227c6492fd8854de74b (patch)
tree14b733749d29a4af12a0883b0675af027ca04829 /include/linux/qed
parent0a7fb11c23c0fb8f5ad37f285f40348f1ab9ccbd (diff)
qede: Add qedr framework
Adds a skeletal implementation of the qede RoCE driver - The qedr has some dependencies of the state of the underlying base interface. This adds some logic required with mutual registrations and the ability to pass updates on 'intresting' events. Signed-off-by: Ram Amrani <Ram.Amrani@caviumnetworks.com> Signed-off-by: Yuval Mintz <Yuval.Mintz@caviumnetworks.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/linux/qed')
-rw-r--r--include/linux/qed/qed_if.h3
-rw-r--r--include/linux/qed/qede_roce.h88
2 files changed, 89 insertions, 2 deletions
diff --git a/include/linux/qed/qed_if.h b/include/linux/qed/qed_if.h
index c2d74e8785cf..e313742b571d 100644
--- a/include/linux/qed/qed_if.h
+++ b/include/linux/qed/qed_if.h
@@ -260,11 +260,10 @@ struct qed_dev_info {
260 /* MFW version */ 260 /* MFW version */
261 u32 mfw_rev; 261 u32 mfw_rev;
262 262
263 bool rdma_supported;
264
265 u32 flash_size; 263 u32 flash_size;
266 u8 mf_mode; 264 u8 mf_mode;
267 bool tx_switching; 265 bool tx_switching;
266 bool rdma_supported;
268}; 267};
269 268
270enum qed_sb_type { 269enum qed_sb_type {
diff --git a/include/linux/qed/qede_roce.h b/include/linux/qed/qede_roce.h
new file mode 100644
index 000000000000..99fbe6d55acb
--- /dev/null
+++ b/include/linux/qed/qede_roce.h
@@ -0,0 +1,88 @@
1/* QLogic qedr NIC Driver
2 * Copyright (c) 2015-2016 QLogic Corporation
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#ifndef QEDE_ROCE_H
33#define QEDE_ROCE_H
34
35struct qedr_dev;
36struct qed_dev;
37struct qede_dev;
38
39enum qede_roce_event {
40 QEDE_UP,
41 QEDE_DOWN,
42 QEDE_CHANGE_ADDR,
43 QEDE_CLOSE
44};
45
46struct qede_roce_event_work {
47 struct list_head list;
48 struct work_struct work;
49 void *ptr;
50 enum qede_roce_event event;
51};
52
53struct qedr_driver {
54 unsigned char name[32];
55
56 struct qedr_dev* (*add)(struct qed_dev *, struct pci_dev *,
57 struct net_device *);
58
59 void (*remove)(struct qedr_dev *);
60 void (*notify)(struct qedr_dev *, enum qede_roce_event);
61};
62
63/* APIs for RoCE driver to register callback handlers,
64 * which will be invoked when device is added, removed, ifup, ifdown
65 */
66int qede_roce_register_driver(struct qedr_driver *drv);
67void qede_roce_unregister_driver(struct qedr_driver *drv);
68
69bool qede_roce_supported(struct qede_dev *dev);
70
71#if IS_ENABLED(CONFIG_INFINIBAND_QEDR)
72int qede_roce_dev_add(struct qede_dev *dev);
73void qede_roce_dev_event_open(struct qede_dev *dev);
74void qede_roce_dev_event_close(struct qede_dev *dev);
75void qede_roce_dev_remove(struct qede_dev *dev);
76void qede_roce_event_changeaddr(struct qede_dev *qedr);
77#else
78static inline int qede_roce_dev_add(struct qede_dev *dev)
79{
80 return 0;
81}
82
83static inline void qede_roce_dev_event_open(struct qede_dev *dev) {}
84static inline void qede_roce_dev_event_close(struct qede_dev *dev) {}
85static inline void qede_roce_dev_remove(struct qede_dev *dev) {}
86static inline void qede_roce_event_changeaddr(struct qede_dev *qedr) {}
87#endif
88#endif