1*29735d99SLarysa Zaremba /* SPDX-License-Identifier: GPL-2.0-only */ 2*29735d99SLarysa Zaremba /* Copyright (C) 2025 Intel Corporation */ 3*29735d99SLarysa Zaremba 4*29735d99SLarysa Zaremba #ifndef _IXD_CTLQ_H_ 5*29735d99SLarysa Zaremba #define _IXD_CTLQ_H_ 6*29735d99SLarysa Zaremba 7*29735d99SLarysa Zaremba #include <linux/net/intel/virtchnl2.h> 8*29735d99SLarysa Zaremba 9*29735d99SLarysa Zaremba #define IXD_CTLQ_TIMEOUT 2000 10*29735d99SLarysa Zaremba 11*29735d99SLarysa Zaremba /** 12*29735d99SLarysa Zaremba * struct ixd_ctlq_req - Standard virtchnl request description 13*29735d99SLarysa Zaremba * @opcode: protocol opcode, only virtchnl2 is needed for now 14*29735d99SLarysa Zaremba * @send_size: required length of the send buffer 15*29735d99SLarysa Zaremba * @send_buff_init: function to initialize the allocated send buffer 16*29735d99SLarysa Zaremba * @recv_process: function to handle the CP response 17*29735d99SLarysa Zaremba * @ctx: additional context for callbacks 18*29735d99SLarysa Zaremba */ 19*29735d99SLarysa Zaremba struct ixd_ctlq_req { 20*29735d99SLarysa Zaremba enum virtchnl2_op opcode; 21*29735d99SLarysa Zaremba size_t send_size; 22*29735d99SLarysa Zaremba void (*send_buff_init)(struct ixd_adapter *adapter, void *send_buff, 23*29735d99SLarysa Zaremba void *ctx); 24*29735d99SLarysa Zaremba int (*recv_process)(struct ixd_adapter *adapter, void *recv_buff, 25*29735d99SLarysa Zaremba size_t recv_size, void *ctx); 26*29735d99SLarysa Zaremba void *ctx; 27*29735d99SLarysa Zaremba }; 28*29735d99SLarysa Zaremba 29*29735d99SLarysa Zaremba void ixd_ctlq_clean_sq(struct ixd_adapter *adapter, bool force); 30*29735d99SLarysa Zaremba int ixd_ctlq_do_req(struct ixd_adapter *adapter, 31*29735d99SLarysa Zaremba const struct ixd_ctlq_req *req); 32*29735d99SLarysa Zaremba void ixd_ctlq_rx_task(struct work_struct *work); 33*29735d99SLarysa Zaremba 34*29735d99SLarysa Zaremba #endif /* _IXD_CTLQ_H_ */ 35