/* SPDX-License-Identifier: GPL-2.0-only */ /* Copyright (C) 2025 Intel Corporation */ #ifndef _IXD_H_ #define _IXD_H_ #include #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_ */