1bea44e38SLarysa Zaremba /* SPDX-License-Identifier: GPL-2.0-only */ 2bea44e38SLarysa Zaremba /* Copyright (C) 2025 Intel Corporation */ 3bea44e38SLarysa Zaremba 4bea44e38SLarysa Zaremba #ifndef _IXD_H_ 5bea44e38SLarysa Zaremba #define _IXD_H_ 6bea44e38SLarysa Zaremba 731ddf796SLarysa Zaremba #include <linux/net/intel/libie/controlq.h> 831ddf796SLarysa Zaremba 931ddf796SLarysa Zaremba #define IXD_INIT_TASK_DELAY_JIFFIES msecs_to_jiffies(500) 10bea44e38SLarysa Zaremba 11bea44e38SLarysa Zaremba /** 12bea44e38SLarysa Zaremba * struct ixd_adapter - Data structure representing a CPF 1331ddf796SLarysa Zaremba * @cp_ctx: Control plane communication context 1431ddf796SLarysa Zaremba * @init_task: Delayed initialization after reset 1531ddf796SLarysa Zaremba * @init_task.init_work: Delayed initialization work 1631ddf796SLarysa Zaremba * @init_task.reset_retries: How many times to check, whether reset is completed 1729735d99SLarysa Zaremba * @init_task.vc_retries: Number of retries to establish mailbox communication 18*f290d48fSAmritha Nambiar * @init_task.success: init_work completion status 1929735d99SLarysa Zaremba * @mbx_task: Control queue Rx handling 2031ddf796SLarysa Zaremba * @xnm: virtchnl transaction manager 2131ddf796SLarysa Zaremba * @asq: Send control queue info 2231ddf796SLarysa Zaremba * @arq: Receive control queue info 2329735d99SLarysa Zaremba * @vc_ver: Negotiated virtchnl version 2429735d99SLarysa Zaremba * @vc_ver.major: Negotiated major virtchnl version 2529735d99SLarysa Zaremba * @vc_ver.minor: Negotiated minor virtchnl version 2629735d99SLarysa Zaremba * @caps: Negotiated virtchnl capabilities 27bea44e38SLarysa Zaremba */ 28bea44e38SLarysa Zaremba struct ixd_adapter { 2931ddf796SLarysa Zaremba struct libie_ctlq_ctx cp_ctx; 3031ddf796SLarysa Zaremba struct { 3131ddf796SLarysa Zaremba struct delayed_work init_work; 3231ddf796SLarysa Zaremba u8 reset_retries; 3329735d99SLarysa Zaremba u8 vc_retries; 34*f290d48fSAmritha Nambiar bool success; 3531ddf796SLarysa Zaremba } init_task; 3629735d99SLarysa Zaremba struct delayed_work mbx_task; 3731ddf796SLarysa Zaremba struct libie_ctlq_xn_manager *xnm; 3831ddf796SLarysa Zaremba struct libie_ctlq_info *asq; 3931ddf796SLarysa Zaremba struct libie_ctlq_info *arq; 4029735d99SLarysa Zaremba struct { 4129735d99SLarysa Zaremba u32 major; 4229735d99SLarysa Zaremba u32 minor; 4329735d99SLarysa Zaremba } vc_ver; 4429735d99SLarysa Zaremba struct virtchnl2_get_capabilities caps; 45bea44e38SLarysa Zaremba }; 46bea44e38SLarysa Zaremba 47bea44e38SLarysa Zaremba /** 48bea44e38SLarysa Zaremba * ixd_to_dev - Get the corresponding device struct from an adapter 49bea44e38SLarysa Zaremba * @adapter: PCI device driver-specific private data 50bea44e38SLarysa Zaremba * 51bea44e38SLarysa Zaremba * Return: struct device corresponding to the given adapter 52bea44e38SLarysa Zaremba */ ixd_to_dev(struct ixd_adapter * adapter)53bea44e38SLarysa Zarembastatic inline struct device *ixd_to_dev(struct ixd_adapter *adapter) 54bea44e38SLarysa Zaremba { 5531ddf796SLarysa Zaremba return &adapter->cp_ctx.mmio_info.pdev->dev; 56bea44e38SLarysa Zaremba } 57bea44e38SLarysa Zaremba 5831ddf796SLarysa Zaremba void ixd_ctlq_reg_init(struct ixd_adapter *adapter, 5931ddf796SLarysa Zaremba struct libie_ctlq_reg *ctlq_reg_tx, 6031ddf796SLarysa Zaremba struct libie_ctlq_reg *ctlq_reg_rx); 6131ddf796SLarysa Zaremba void ixd_trigger_reset(struct ixd_adapter *adapter); 6231ddf796SLarysa Zaremba bool ixd_check_reset_complete(struct ixd_adapter *adapter); 6331ddf796SLarysa Zaremba void ixd_init_task(struct work_struct *work); 6431ddf796SLarysa Zaremba int ixd_init_dflt_mbx(struct ixd_adapter *adapter); 6531ddf796SLarysa Zaremba void ixd_deinit_dflt_mbx(struct ixd_adapter *adapter); 6631ddf796SLarysa Zaremba 67bea44e38SLarysa Zaremba #endif /* _IXD_H_ */ 68