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