| 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
| 2 | /* Copyright (C) 2021-2025, Intel Corporation. */ |
| 3 | |
| 4 | #ifndef _IIDC_RDMA_ICE_H_ |
| 5 | #define _IIDC_RDMA_ICE_H_ |
| 6 | |
| 7 | #include <linux/dcbnl.h> |
| 8 | |
| 9 | #define IIDC_MAX_USER_PRIORITY 8 |
| 10 | #define IIDC_DSCP_PFC_MODE 0x1 |
| 11 | |
| 12 | /** |
| 13 | * struct iidc_rdma_qset_params - Struct to hold per RDMA Qset info |
| 14 | * @teid: TEID of the Qset node |
| 15 | * @qs_handle: SW index of the Qset, RDMA provides this |
| 16 | * @vport_id: VSI index |
| 17 | * @tc: Traffic Class branch the QSet should belong to |
| 18 | */ |
| 19 | struct iidc_rdma_qset_params { |
| 20 | /* Qset TEID returned to the RDMA driver in |
| 21 | * ice_add_rdma_qset and used by RDMA driver |
| 22 | * for calls to ice_del_rdma_qset |
| 23 | */ |
| 24 | u32 teid; |
| 25 | u16 qs_handle; |
| 26 | u16 vport_id; |
| 27 | u8 tc; |
| 28 | }; |
| 29 | |
| 30 | struct iidc_rdma_qos_info { |
| 31 | u64 tc_ctx; |
| 32 | u8 rel_bw; |
| 33 | u8 prio_type; |
| 34 | u8 egress_virt_up; |
| 35 | u8 ingress_virt_up; |
| 36 | }; |
| 37 | |
| 38 | /* Struct to pass QoS info */ |
| 39 | struct iidc_rdma_qos_params { |
| 40 | struct iidc_rdma_qos_info tc_info[IEEE_8021QAZ_MAX_TCS]; |
| 41 | u8 up2tc[IIDC_MAX_USER_PRIORITY]; |
| 42 | u8 vport_relative_bw; |
| 43 | u8 vport_priority_type; |
| 44 | u8 num_tc; |
| 45 | u8 pfc_mode; |
| 46 | u8 dscp_map[DSCP_MAX]; |
| 47 | }; |
| 48 | |
| 49 | struct iidc_rdma_priv_dev_info { |
| 50 | u8 pf_id; |
| 51 | u16 vport_id; |
| 52 | struct net_device *netdev; |
| 53 | struct iidc_rdma_qos_params qos_info; |
| 54 | u8 __iomem *hw_addr; |
| 55 | }; |
| 56 | |
| 57 | int ice_add_rdma_qset(struct iidc_rdma_core_dev_info *cdev, |
| 58 | struct iidc_rdma_qset_params *qset); |
| 59 | int ice_del_rdma_qset(struct iidc_rdma_core_dev_info *cdev, |
| 60 | struct iidc_rdma_qset_params *qset); |
| 61 | int ice_rdma_request_reset(struct iidc_rdma_core_dev_info *cdev, |
| 62 | enum iidc_rdma_reset_type reset_type); |
| 63 | int ice_rdma_update_vsi_filter(struct iidc_rdma_core_dev_info *cdev, u16 vsi_id, |
| 64 | bool enable); |
| 65 | int ice_alloc_rdma_qvector(struct iidc_rdma_core_dev_info *cdev, |
| 66 | struct msix_entry *entry); |
| 67 | void ice_free_rdma_qvector(struct iidc_rdma_core_dev_info *cdev, |
| 68 | struct msix_entry *entry); |
| 69 | |
| 70 | #endif /* _IIDC_RDMA_ICE_H_*/ |
| 71 | |