18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
28c2ecf20Sopenharmony_ci/* QLogic qedr NIC Driver
38c2ecf20Sopenharmony_ci * Copyright (c) 2015-2017  QLogic Corporation
48c2ecf20Sopenharmony_ci * Copyright (c) 2019-2020 Marvell International Ltd.
58c2ecf20Sopenharmony_ci */
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_ci#ifndef QEDE_ROCE_H
88c2ecf20Sopenharmony_ci#define QEDE_ROCE_H
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci#include <linux/pci.h>
118c2ecf20Sopenharmony_ci#include <linux/netdevice.h>
128c2ecf20Sopenharmony_ci#include <linux/types.h>
138c2ecf20Sopenharmony_ci#include <linux/workqueue.h>
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_cistruct qedr_dev;
168c2ecf20Sopenharmony_cistruct qed_dev;
178c2ecf20Sopenharmony_cistruct qede_dev;
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_cienum qede_rdma_event {
208c2ecf20Sopenharmony_ci	QEDE_UP,
218c2ecf20Sopenharmony_ci	QEDE_DOWN,
228c2ecf20Sopenharmony_ci	QEDE_CHANGE_ADDR,
238c2ecf20Sopenharmony_ci	QEDE_CLOSE,
248c2ecf20Sopenharmony_ci	QEDE_CHANGE_MTU,
258c2ecf20Sopenharmony_ci};
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_cistruct qede_rdma_event_work {
288c2ecf20Sopenharmony_ci	struct list_head list;
298c2ecf20Sopenharmony_ci	struct work_struct work;
308c2ecf20Sopenharmony_ci	void *ptr;
318c2ecf20Sopenharmony_ci	enum qede_rdma_event event;
328c2ecf20Sopenharmony_ci};
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_cistruct qedr_driver {
358c2ecf20Sopenharmony_ci	unsigned char name[32];
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_ci	struct qedr_dev* (*add)(struct qed_dev *, struct pci_dev *,
388c2ecf20Sopenharmony_ci				struct net_device *);
398c2ecf20Sopenharmony_ci
408c2ecf20Sopenharmony_ci	void (*remove)(struct qedr_dev *);
418c2ecf20Sopenharmony_ci	void (*notify)(struct qedr_dev *, enum qede_rdma_event);
428c2ecf20Sopenharmony_ci};
438c2ecf20Sopenharmony_ci
448c2ecf20Sopenharmony_ci/* APIs for RDMA driver to register callback handlers,
458c2ecf20Sopenharmony_ci * which will be invoked when device is added, removed, ifup, ifdown
468c2ecf20Sopenharmony_ci */
478c2ecf20Sopenharmony_ciint qede_rdma_register_driver(struct qedr_driver *drv);
488c2ecf20Sopenharmony_civoid qede_rdma_unregister_driver(struct qedr_driver *drv);
498c2ecf20Sopenharmony_ci
508c2ecf20Sopenharmony_cibool qede_rdma_supported(struct qede_dev *dev);
518c2ecf20Sopenharmony_ci
528c2ecf20Sopenharmony_ci#if IS_ENABLED(CONFIG_QED_RDMA)
538c2ecf20Sopenharmony_ciint qede_rdma_dev_add(struct qede_dev *dev, bool recovery);
548c2ecf20Sopenharmony_civoid qede_rdma_dev_event_open(struct qede_dev *dev);
558c2ecf20Sopenharmony_civoid qede_rdma_dev_event_close(struct qede_dev *dev);
568c2ecf20Sopenharmony_civoid qede_rdma_dev_remove(struct qede_dev *dev, bool recovery);
578c2ecf20Sopenharmony_civoid qede_rdma_event_changeaddr(struct qede_dev *edr);
588c2ecf20Sopenharmony_civoid qede_rdma_event_change_mtu(struct qede_dev *edev);
598c2ecf20Sopenharmony_ci
608c2ecf20Sopenharmony_ci#else
618c2ecf20Sopenharmony_cistatic inline int qede_rdma_dev_add(struct qede_dev *dev,
628c2ecf20Sopenharmony_ci				    bool recovery)
638c2ecf20Sopenharmony_ci{
648c2ecf20Sopenharmony_ci	return 0;
658c2ecf20Sopenharmony_ci}
668c2ecf20Sopenharmony_ci
678c2ecf20Sopenharmony_cistatic inline void qede_rdma_dev_event_open(struct qede_dev *dev) {}
688c2ecf20Sopenharmony_cistatic inline void qede_rdma_dev_event_close(struct qede_dev *dev) {}
698c2ecf20Sopenharmony_cistatic inline void qede_rdma_dev_remove(struct qede_dev *dev,
708c2ecf20Sopenharmony_ci					bool recovery) {}
718c2ecf20Sopenharmony_cistatic inline void qede_rdma_event_changeaddr(struct qede_dev *edr) {}
728c2ecf20Sopenharmony_ci#endif
738c2ecf20Sopenharmony_ci#endif
74