| /* SPDX-License-Identifier: GPL-2.0-only */ |
| /* Copyright (C) 2025 Intel Corporation */ |
| |
| #ifndef _IXD_H_ |
| #define _IXD_H_ |
| |
| #include <linux/net/intel/libie/controlq.h> |
| |
| #define IXD_INIT_TASK_DELAY_JIFFIES msecs_to_jiffies(500) |
| |
| /** |
| * struct ixd_adapter - Data structure representing a CPF |
| * @cp_ctx: Control plane communication context |
| * @init_task: Delayed initialization after reset |
| * @init_task.init_work: Delayed initialization work |
| * @init_task.reset_retries: How many times to check, whether reset is completed |
| * @init_task.vc_retries: Number of retries to establish mailbox communication |
| * @init_task.success: init_work completion status |
| * @mbx_task: Control queue Rx handling |
| * @xnm: virtchnl transaction manager |
| * @asq: Send control queue info |
| * @arq: Receive control queue info |
| * @vc_ver: Negotiated virtchnl version |
| * @vc_ver.major: Negotiated major virtchnl version |
| * @vc_ver.minor: Negotiated minor virtchnl version |
| * @caps: Negotiated virtchnl capabilities |
| */ |
| struct ixd_adapter { |
| struct libie_ctlq_ctx cp_ctx; |
| struct { |
| struct delayed_work init_work; |
| u8 reset_retries; |
| u8 vc_retries; |
| bool success; |
| } init_task; |
| struct delayed_work mbx_task; |
| struct libie_ctlq_xn_manager *xnm; |
| struct libie_ctlq_info *asq; |
| struct libie_ctlq_info *arq; |
| struct { |
| u32 major; |
| u32 minor; |
| } vc_ver; |
| struct virtchnl2_get_capabilities caps; |
| }; |
| |
| /** |
| * ixd_to_dev - Get the corresponding device struct from an adapter |
| * @adapter: PCI device driver-specific private data |
| * |
| * Return: struct device corresponding to the given adapter |
| */ |
| static inline struct device *ixd_to_dev(struct ixd_adapter *adapter) |
| { |
| return &adapter->cp_ctx.mmio_info.pdev->dev; |
| } |
| |
| void ixd_ctlq_reg_init(struct ixd_adapter *adapter, |
| struct libie_ctlq_reg *ctlq_reg_tx, |
| struct libie_ctlq_reg *ctlq_reg_rx); |
| void ixd_trigger_reset(struct ixd_adapter *adapter); |
| bool ixd_check_reset_complete(struct ixd_adapter *adapter); |
| void ixd_init_task(struct work_struct *work); |
| int ixd_init_dflt_mbx(struct ixd_adapter *adapter); |
| void ixd_deinit_dflt_mbx(struct ixd_adapter *adapter); |
| |
| #endif /* _IXD_H_ */ |