/*****************************************************************************
 *
 *   SPDX-License-Identifier: BSD-3-Clause
 *   Copyright(c) 2007-2026 Intel Corporation
 * 
 *   These contents may have been developed with support from one or more
 *   Intel-operated generative artificial intelligence solutions.
 *
 *****************************************************************************/

/*****************************************************************************
 * @file icp_adf_transport_dp.h
 *
 * @description
 *      File contains Public API definitions for ADF transport for data plane.
 *
 *****************************************************************************/
#ifndef ICP_ADF_TRANSPORT_DP_H
#define ICP_ADF_TRANSPORT_DP_H

#include "cpa.h"
#include "icp_adf_transport.h"

/*
 * icp_adf_getQueueMemory
 * Data plane support function - returns the pointer to next message on the ring
 * or NULL if there is not enough space.
 */
extern void icp_adf_getQueueMemory(icp_comms_trans_handle trans_handle,
                                   Cpa32U numberRequests,
                                   void **pCurrentQatMsg);
/*
 * icp_adf_getSingleQueueAddr
 * Data plane support function - returns the pointer to next message on the ring
 * or NULL if there is not enough space - it also updates the shadow tail copy.
 */
extern void icp_adf_getSingleQueueAddr(icp_comms_trans_handle trans_handle,
                                       void **pCurrentQatMsg);

/*
 * icp_adf_getQueueNext
 * Data plane support function - increments the tail pointer and returns
 * the pointer to next message on the ring.
 */
extern void icp_adf_getQueueNext(icp_comms_trans_handle trans_handle,
                                 void **pCurrentQatMsg);

/*
 * icp_adf_updateQueueTail
 * Data plane support function - Writes the tail shadow copy to the device.
 */
extern CpaStatus icp_adf_updateQueueTail(icp_comms_trans_handle trans_handle);

/*
 * icp_adf_isRingEmpty
 * Data plane support function - check if the ring is empty
 */
extern CpaBoolean icp_adf_isRingEmpty(icp_comms_trans_handle trans_handle);

/*
 * icp_adf_pollQueue
 * Data plane support function - Poll messages from the queue.
 */
extern CpaStatus icp_adf_pollQueue(icp_comms_trans_handle trans_handle,
                                   Cpa32U response_quota);

/*
 * icp_adf_queueDataToSend
 * LAC lite support function - Indicates if there is data on the ring to be
 * send. This should only be called on request rings. If the function returns
 * true then it is ok to call icp_adf_updateQueueTail() function on this ring.
 */
extern CpaBoolean icp_adf_queueDataToSend(icp_comms_trans_handle trans_hnd);

/*
 * icp_adf_getDpInflightRequests
 * Retrieves in-flight and max in-flight request counts
 */
extern void icp_adf_getDpInflightRequests(icp_comms_trans_handle trans_handle,
                                          Cpa32U *maxInflightRequests,
                                          Cpa32U *numInflightRequests);

#endif /* ICP_ADF_TRANSPORT_DP_H */
