/* SPDX-License-Identifier: GPL-2.0-only */ /* Copyright (C) 2023 Intel Corporation */ #ifndef _IDPF_CONTROLQ_API_H_ #define _IDPF_CONTROLQ_API_H_ #include "idpf_mem.h" struct idpf_hw; /* Used for queue init, response and events */ enum idpf_ctlq_type { … }; /* Generic Control Queue Structures */ struct idpf_ctlq_reg { … }; /* Generic queue msg structure */ struct idpf_ctlq_msg { … }; /* Generic queue info structures */ /* MB, CONFIG and EVENT q do not have extended info */ struct idpf_ctlq_create_info { … }; /* Control Queue information */ struct idpf_ctlq_info { … }; /** * enum idpf_mbx_opc - PF/VF mailbox commands * @idpf_mbq_opc_send_msg_to_cp: used by PF or VF to send a message to its CP */ enum idpf_mbx_opc { … }; /* API supported for control queue management */ /* Will init all required q including default mb. "q_info" is an array of * create_info structs equal to the number of control queues to be created. */ int idpf_ctlq_init(struct idpf_hw *hw, u8 num_q, struct idpf_ctlq_create_info *q_info); /* Allocate and initialize a single control queue, which will be added to the * control queue list; returns a handle to the created control queue */ int idpf_ctlq_add(struct idpf_hw *hw, struct idpf_ctlq_create_info *qinfo, struct idpf_ctlq_info **cq); /* Deinitialize and deallocate a single control queue */ void idpf_ctlq_remove(struct idpf_hw *hw, struct idpf_ctlq_info *cq); /* Sends messages to HW and will also free the buffer*/ int idpf_ctlq_send(struct idpf_hw *hw, struct idpf_ctlq_info *cq, u16 num_q_msg, struct idpf_ctlq_msg q_msg[]); /* Receives messages and called by interrupt handler/polling * initiated by app/process. Also caller is supposed to free the buffers */ int idpf_ctlq_recv(struct idpf_ctlq_info *cq, u16 *num_q_msg, struct idpf_ctlq_msg *q_msg); /* Reclaims send descriptors on HW write back */ int idpf_ctlq_clean_sq(struct idpf_ctlq_info *cq, u16 *clean_count, struct idpf_ctlq_msg *msg_status[]); /* Indicate RX buffers are done being processed */ int idpf_ctlq_post_rx_buffs(struct idpf_hw *hw, struct idpf_ctlq_info *cq, u16 *buff_count, struct idpf_dma_mem **buffs); /* Will destroy all q including the default mb */ void idpf_ctlq_deinit(struct idpf_hw *hw); #endif /* _IDPF_CONTROLQ_API_H_ */