xref: /linux/include/linux/net/intel/iidc_rdma.h (revision 21508c8c972ca0ff06b07af37adb4021ab527de2)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Copyright (C) 2021-2025, Intel Corporation. */
3 
4 #ifndef _IIDC_RDMA_H_
5 #define _IIDC_RDMA_H_
6 
7 #include <linux/auxiliary_bus.h>
8 #include <linux/device.h>
9 #include <linux/if_ether.h>
10 #include <linux/kernel.h>
11 #include <linux/netdevice.h>
12 #include <net/dscp.h>
13 
14 enum iidc_rdma_event_type {
15 	IIDC_RDMA_EVENT_BEFORE_MTU_CHANGE,
16 	IIDC_RDMA_EVENT_AFTER_MTU_CHANGE,
17 	IIDC_RDMA_EVENT_BEFORE_TC_CHANGE,
18 	IIDC_RDMA_EVENT_AFTER_TC_CHANGE,
19 	IIDC_RDMA_EVENT_WARN_RESET,
20 	IIDC_RDMA_EVENT_CRIT_ERR,
21 	IIDC_RDMA_EVENT_NBITS		/* must be last */
22 };
23 
24 struct iidc_rdma_event {
25 	DECLARE_BITMAP(type, IIDC_RDMA_EVENT_NBITS);
26 	u32 reg;
27 };
28 
29 enum iidc_rdma_reset_type {
30 	IIDC_FUNC_RESET,
31 	IIDC_DEV_RESET,
32 };
33 
34 enum iidc_rdma_protocol {
35 	IIDC_RDMA_PROTOCOL_IWARP = BIT(0),
36 	IIDC_RDMA_PROTOCOL_ROCEV2 = BIT(1),
37 };
38 
39 /* Structure to be populated by core LAN PCI driver */
40 struct iidc_rdma_core_dev_info {
41 	struct pci_dev *pdev; /* PCI device of corresponding to main function */
42 	struct auxiliary_device *adev;
43 	/* Current active RDMA protocol */
44 	enum iidc_rdma_protocol rdma_protocol;
45 	void *iidc_priv; /* elements unique to each driver */
46 };
47 
48 /* Structure representing auxiliary driver tailored information about the core
49  * PCI dev, each auxiliary driver using the IIDC interface will have an
50  * instance of this struct dedicated to it.
51  */
52 struct iidc_rdma_core_auxiliary_dev {
53 	struct auxiliary_device adev;
54 	struct iidc_rdma_core_dev_info *cdev_info;
55 };
56 
57 /* structure representing the auxiliary driver. This struct is to be
58  * allocated and populated by the auxiliary driver's owner. The core PCI
59  * driver will access these ops by performing a container_of on the
60  * auxiliary_device->dev.driver.
61  */
62 struct iidc_rdma_core_auxiliary_drv {
63 	struct auxiliary_driver adrv;
64 	void (*event_handler)(struct iidc_rdma_core_dev_info *cdev,
65 			      struct iidc_rdma_event *event);
66 };
67 
68 #endif /* _IIDC_RDMA_H_*/
69