xref: /linux/drivers/net/ethernet/intel/ixd/ixd.h (revision 91ec2035134982b98fab0609a9fd8480e8217dc1)
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 Zaremba static 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