1 /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */ 2 /* QLogic qedr NIC Driver 3 * Copyright (c) 2015-2017 QLogic Corporation 4 * Copyright (c) 2019-2020 Marvell International Ltd. 5 */ 6 7 #ifndef QEDE_ROCE_H 8 #define QEDE_ROCE_H 9 10 #include <linux/pci.h> 11 #include <linux/netdevice.h> 12 #include <linux/types.h> 13 #include <linux/workqueue.h> 14 15 struct qedr_dev; 16 struct qed_dev; 17 struct qede_dev; 18 19 enum qede_rdma_event { 20 QEDE_UP, 21 QEDE_DOWN, 22 QEDE_CHANGE_ADDR, 23 QEDE_CLOSE 24 }; 25 26 struct qede_rdma_event_work { 27 struct list_head list; 28 struct work_struct work; 29 void *ptr; 30 enum qede_rdma_event event; 31 }; 32 33 struct qedr_driver { 34 unsigned char name[32]; 35 36 struct qedr_dev* (*add)(struct qed_dev *, struct pci_dev *, 37 struct net_device *); 38 39 void (*remove)(struct qedr_dev *); 40 void (*notify)(struct qedr_dev *, enum qede_rdma_event); 41 }; 42 43 /* APIs for RDMA driver to register callback handlers, 44 * which will be invoked when device is added, removed, ifup, ifdown 45 */ 46 int qede_rdma_register_driver(struct qedr_driver *drv); 47 void qede_rdma_unregister_driver(struct qedr_driver *drv); 48 49 bool qede_rdma_supported(struct qede_dev *dev); 50 51 #if IS_ENABLED(CONFIG_QED_RDMA) 52 int qede_rdma_dev_add(struct qede_dev *dev, bool recovery); 53 void qede_rdma_dev_event_open(struct qede_dev *dev); 54 void qede_rdma_dev_event_close(struct qede_dev *dev); 55 void qede_rdma_dev_remove(struct qede_dev *dev, bool recovery); 56 void qede_rdma_event_changeaddr(struct qede_dev *edr); 57 58 #else 59 static inline int qede_rdma_dev_add(struct qede_dev *dev, 60 bool recovery) 61 { 62 return 0; 63 } 64 65 static inline void qede_rdma_dev_event_open(struct qede_dev *dev) {} 66 static inline void qede_rdma_dev_event_close(struct qede_dev *dev) {} 67 static inline void qede_rdma_dev_remove(struct qede_dev *dev, 68 bool recovery) {} 69 static inline void qede_rdma_event_changeaddr(struct qede_dev *edr) {} 70 #endif 71 #endif 72