summaryrefslogtreecommitdiffstats
path: root/sys/contrib/ncsw/inc/Peripherals/qm_ext.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/contrib/ncsw/inc/Peripherals/qm_ext.h')
-rw-r--r--sys/contrib/ncsw/inc/Peripherals/qm_ext.h1270
1 files changed, 1270 insertions, 0 deletions
diff --git a/sys/contrib/ncsw/inc/Peripherals/qm_ext.h b/sys/contrib/ncsw/inc/Peripherals/qm_ext.h
new file mode 100644
index 0000000..e5674f4
--- /dev/null
+++ b/sys/contrib/ncsw/inc/Peripherals/qm_ext.h
@@ -0,0 +1,1270 @@
+/******************************************************************************
+
+ © 1995-2003, 2004, 2005-2011 Freescale Semiconductor, Inc.
+ All rights reserved.
+
+ This is proprietary source code of Freescale Semiconductor Inc.,
+ and its use is subject to the NetComm Device Drivers EULA.
+ The copyright notice above does not evidence any actual or intended
+ publication of such source code.
+
+ ALTERNATIVELY, redistribution and use in source and binary forms, with
+ or without modification, are permitted provided that the following
+ conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of Freescale Semiconductor nor the
+ names of its contributors may be used to endorse or promote products
+ derived from this software without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
+ DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+
+ **************************************************************************/
+/******************************************************************************
+ @File qm_ext.h
+
+ @Description QM & Portal API
+*//***************************************************************************/
+#ifndef __QM_EXT_H
+#define __QM_EXT_H
+
+#include "error_ext.h"
+#include "std_ext.h"
+#include "dpaa_ext.h"
+#include "part_ext.h"
+
+
+/**************************************************************************//**
+ @Group QM_grp Queue Manager API
+
+ @Description QM API functions, definitions and enums.
+
+ @{
+*//***************************************************************************/
+
+/**************************************************************************//**
+ @Description This callback type is used when receiving frame.
+
+ User provides this function. Driver invokes it.
+
+ @Param[in] h_App A user argument to the callback
+ @Param[in] h_QmFqr A handle to an QM-FQR Module.
+ @Param[in] fqidOffset fqid offset from the FQR's fqid base.
+ @Param[in] p_Frame The Received Frame
+
+ @Retval e_RX_STORE_RESPONSE_CONTINUE - order the driver to continue Rx
+ operation for all ready data.
+ @Retval e_RX_STORE_RESPONSE_PAUSE - order the driver to stop Rx operation.
+
+ @Cautions p_Frame is local parameter; i.e. users must NOT access or use
+ this parameter in any means outside this callback context.
+*//***************************************************************************/
+typedef e_RxStoreResponse (t_QmReceivedFrameCallback)(t_Handle h_App,
+ t_Handle h_QmFqr,
+ t_Handle h_QmPortal,
+ uint32_t fqidOffset,
+ t_DpaaFD *p_Frame);
+
+/**************************************************************************//**
+ @Description This callback type is used when the FQR is completely was drained.
+
+ User provides this function. Driver invokes it.
+
+ @Param[in] h_App A user argument to the callback
+ @Param[in] h_QmFqr A handle to an QM-FQR Module.
+
+ @Retval E_OK on success; Error code otherwise.
+*//***************************************************************************/
+typedef t_Error (t_QmFqrDrainedCompletionCB)(t_Handle h_App,
+ t_Handle h_QmFqr);
+
+/**************************************************************************//**
+ @Description QM Rejection code enum
+*//***************************************************************************/
+typedef enum e_QmRejectionCode
+{
+ e_QM_RC_NONE,
+
+ e_QM_RC_CG_TAILDROP, /**< This frames was rejected due to congestion
+ group taildrop situation */
+ e_QM_RC_CG_WRED, /**< This frames was rejected due to congestion
+ group WRED situation */
+ e_QM_RC_FQ_TAILDROP /**< This frames was rejected due to FQID TD
+ situation */
+/* e_QM_RC_ERROR
+ e_QM_RC_ORPWINDOW_EARLY
+ e_QM_RC_ORPWINDOW_LATE
+ e_QM_RC_ORPWINDOW_RETIRED */
+} e_QmRejectionCode;
+
+/**************************************************************************//**
+ @Description QM Rejected frame information
+*//***************************************************************************/
+typedef struct t_QmRejectedFrameInfo
+{
+ e_QmRejectionCode rejectionCode; /**< Rejection code */
+ union
+ {
+ struct
+ {
+ uint8_t cgId; /**< congestion group id*/
+ } cg; /**< rejection parameters when rejectionCode =
+ e_QM_RC_CG_TAILDROP or e_QM_RC_CG_WRED. */
+ };
+} t_QmRejectedFrameInfo;
+
+/**************************************************************************//**
+ @Description This callback type is used when receiving rejected frames.
+
+ User provides this function. Driver invokes it.
+
+ @Param[in] h_App A user argument to the callback
+ @Param[in] h_QmFqr A handle to an QM-FQR Module.
+ @Param[in] fqidOffset fqid offset from the FQR's fqid base.
+ @Param[in] p_Frame The Rejected Frame
+ @Param[in] p_QmRejectedFrameInfo Rejected Frame information
+
+ @Retval e_RX_STORE_RESPONSE_CONTINUE - order the driver to continue Rx
+ operation for all ready data.
+ @Retval e_RX_STORE_RESPONSE_PAUSE - order the driver to stop Rx operation.
+
+ @Cautions p_Frame is local parameter; i.e. users must NOT access or use
+ this parameter in any means outside this callback context.
+*//***************************************************************************/
+typedef e_RxStoreResponse (t_QmRejectedFrameCallback)(t_Handle h_App,
+ t_Handle h_QmFqr,
+ t_Handle h_QmPortal,
+ uint32_t fqidOffset,
+ t_DpaaFD *p_Frame,
+ t_QmRejectedFrameInfo *p_QmRejectedFrameInfo);
+
+
+
+/**************************************************************************//**
+ @Group QM_lib_grp QM common API
+
+ @Description QM common API functions, definitions and enums.
+
+ @{
+*//***************************************************************************/
+
+/**************************************************************************//**
+ @Description QM Exceptions
+*//***************************************************************************/
+typedef enum e_QmExceptions {
+ e_QM_EX_CORENET_INITIATOR_DATA = 0, /**< Initiator Data Error */
+ e_QM_EX_CORENET_TARGET_DATA, /**< CoreNet Target Data Error */
+ e_QM_EX_CORENET_INVALID_TARGET_TRANSACTION, /**< Invalid Target Transaction */
+ e_QM_EX_PFDR_THRESHOLD, /**< PFDR Low Watermark Interrupt */
+ e_QM_EX_PFDR_ENQUEUE_BLOCKED, /**< PFDR Enqueues Blocked Interrupt */
+ e_QM_EX_SINGLE_ECC, /**< Single Bit ECC Error Interrupt */
+ e_QM_EX_MULTI_ECC, /**< Multi Bit ECC Error Interrupt */
+ e_QM_EX_INVALID_COMMAND, /**< Invalid Command Verb Interrupt */
+ e_QM_EX_DEQUEUE_DCP, /**< Invalid Dequeue Direct Connect Portal Interrupt */
+ e_QM_EX_DEQUEUE_FQ, /**< Invalid Dequeue FQ Interrupt */
+ e_QM_EX_DEQUEUE_SOURCE, /**< Invalid Dequeue Source Interrupt */
+ e_QM_EX_DEQUEUE_QUEUE, /**< Invalid Dequeue Queue Interrupt */
+ e_QM_EX_ENQUEUE_OVERFLOW, /**< Invalid Enqueue Overflow Interrupt */
+ e_QM_EX_ENQUEUE_STATE, /**< Invalid Enqueue State Interrupt */
+ e_QM_EX_ENQUEUE_CHANNEL, /**< Invalid Enqueue Channel Interrupt */
+ e_QM_EX_ENQUEUE_QUEUE, /**< Invalid Enqueue Queue Interrupt */
+ e_QM_EX_CG_STATE_CHANGE /**< CG change state notification */
+} e_QmExceptions;
+
+/**************************************************************************//**
+ @Group QM_init_grp QM (common) Initialization Unit
+
+ @Description QM (common) Initialization Unit
+
+ @{
+*//***************************************************************************/
+
+/**************************************************************************//**
+ @Function t_QmExceptionsCallback
+
+ @Description Exceptions user callback routine, will be called upon an
+ exception passing the exception identification.
+
+ @Param[in] h_App - User's application descriptor.
+ @Param[in] exception - The exception.
+*//***************************************************************************/
+typedef void (t_QmExceptionsCallback) ( t_Handle h_App,
+ e_QmExceptions exception);
+
+/**************************************************************************//**
+ @Description Frame's Type to poll
+*//***************************************************************************/
+typedef enum e_QmPortalPollSource {
+ e_QM_PORTAL_POLL_SOURCE_DATA_FRAMES = 0, /**< Poll only data frames */
+ e_QM_PORTAL_POLL_SOURCE_CONTROL_FRAMES, /**< Poll only control frames */
+ e_QM_PORTAL_POLL_SOURCE_BOTH /**< Poll both */
+} e_QmPortalPollSource;
+
+/**************************************************************************//**
+ @Description structure representing QM contextA of FQ initialization parameters
+ Note that this is only "space-holder" for the Context-A. The "real"
+ Context-A is described in each specific driver (E.g. FM driver
+ has its own Context-A API).
+*//***************************************************************************/
+typedef struct {
+ uint32_t res[2]; /**< reserved size for context-a */
+} t_QmContextA;
+
+/**************************************************************************//**
+ @Description structure representing QM contextB of FQ initialization parameters
+ Note that this is only "space-holder" for the Context-B. The "real"
+ Context-B is described in each specific driver (E.g. FM driver
+ has its own Context-B API).
+*//***************************************************************************/
+typedef uint32_t t_QmContextB;
+
+/**************************************************************************//**
+ @Description structure representing QM initialization parameters
+*//***************************************************************************/
+typedef struct {
+ uint8_t guestId; /**< QM Partition Id */
+
+ uintptr_t baseAddress; /**< Qm base address (virtual)
+ NOTE: this parameter relevant only for BM in master mode ('guestId'=NCSW_MASTER_ID). */
+ uintptr_t swPortalsBaseAddress; /**< QM Software Portals Base Address (virtual) */
+ uint16_t liodn; /**< This value is attached to every transaction initiated by QMan when accessing its private data structures */
+ uint32_t totalNumOfFqids; /**< Total number of frame-queue-ids in the system */
+ uint32_t fqdMemPartitionId; /**< FQD's mem partition id;
+ NOTE: The memory partition must be non-cacheable and no-coherent area. */
+ uint32_t pfdrMemPartitionId; /**< PFDR's mem partition id;
+ NOTE: The memory partition must be non-cacheable and no-coherent area. */
+ t_QmExceptionsCallback *f_Exception; /**< An application callback routine to handle exceptions.*/
+ t_Handle h_App; /**< A handle to an application layer object; This handle will
+ be passed by the driver upon calling the above callbacks */
+ int errIrq; /**< error interrupt line; NO_IRQ if interrupts not used */
+ uint32_t partFqidBase; /**< The first frame-queue-id dedicated to this partition.
+ NOTE: this parameter relevant only when working with multiple partitions. */
+ uint32_t partNumOfFqids; /**< Number of frame-queue-ids dedicated to this partition.
+ NOTE: this parameter relevant only when working with multiple partitions. */
+ uint16_t partCgsBase; /**< The first cgr dedicated to this partition.
+ NOTE: this parameter relevant only when working with multiple partitions. */
+ uint16_t partNumOfCgs; /**< Number of cgr's dedicated to this partition.
+ NOTE: this parameter relevant only when working with multiple partitions. */
+} t_QmParam;
+
+
+/**************************************************************************//**
+ @Function QM_Config
+
+ @Description Creates descriptor for the QM module.
+
+ The routine returns a handle (descriptor) to the QM object.
+ This descriptor must be passed as first parameter to all other
+ QM function calls.
+
+ No actual initialization or configuration of QM hardware is
+ done by this routine.
+
+ @Param[in] p_QmParam - Pointer to data structure of parameters
+
+ @Retval Handle to the QM object, or NULL for Failure.
+*//***************************************************************************/
+t_Handle QM_Config(t_QmParam *p_QmParam);
+
+/**************************************************************************//**
+ @Function QM_Init
+
+ @Description Initializes the QM module
+
+ @Param[in] h_Qm - A handle to the QM module
+
+ @Return E_OK on success; Error code otherwise.
+*//***************************************************************************/
+t_Error QM_Init(t_Handle h_Qm);
+
+/**************************************************************************//**
+ @Function QM_Free
+
+ @Description Frees all resources that were assigned to the QM module.
+
+ Calling this routine invalidates the descriptor.
+
+ @Param[in] h_Qm - A handle to the QM module
+
+ @Return E_OK on success; Error code otherwise.
+*//***************************************************************************/
+t_Error QM_Free(t_Handle h_Qm);
+
+
+/**************************************************************************//**
+ @Group QM_advanced_init_grp QM (common) Advanced Configuration Unit
+
+ @Description Configuration functions used to change default values.
+
+ @{
+*//***************************************************************************/
+
+/**************************************************************************//**
+ @Description structure for defining DC portal ERN destination
+*//***************************************************************************/
+typedef struct t_QmDcPortalParams {
+ bool sendToSw;
+ e_DpaaSwPortal swPortalId;
+} t_QmDcPortalParams;
+
+
+/**************************************************************************//**
+ @Function QM_ConfigRTFramesDepth
+
+ @Description Change the run-time frames depth (i.e. the maximum total number
+ of frames that may be inside QM at a certain time) from its default
+ configuration [30000].
+
+ @Param[in] h_Qm - A handle to the QM module
+ @Param[in] rtFramesDepth - run-time max num of frames.
+
+ @Return E_OK on success; Error code otherwise.
+
+ @Cautions Allowed only following QM_Config() and before QM_Init().
+*//***************************************************************************/
+t_Error QM_ConfigRTFramesDepth(t_Handle h_Qm, uint32_t rtFramesDepth);
+
+/**************************************************************************//**
+ @Function QM_ConfigPfdrThreshold
+
+ @Description Change the pfdr threshold from its default
+ configuration [0].
+ An interrupt if enables is asserted when the number of PFDRs is below this threshold.
+
+ @Param[in] h_Qm - A handle to the QM module
+ @Param[in] threshold - threshold value.
+
+ @Return E_OK on success; Error code otherwise.
+
+ @Cautions Allowed only following QM_Config() and before QM_Init().
+*//***************************************************************************/
+t_Error QM_ConfigPfdrThreshold(t_Handle h_Qm, uint32_t threshold);
+
+/**************************************************************************//**
+ @Function QM_ConfigSfdrReservationThreshold
+
+ @Description Change the sfdr threshold from its default
+ configuration [0].
+
+ @Param[in] h_Qm - A handle to the QM module
+ @Param[in] threshold - threshold value.
+
+ @Return E_OK on success; Error code otherwise.
+
+ @Cautions Allowed only following QM_Config() and before QM_Init().
+*//***************************************************************************/
+t_Error QM_ConfigSfdrReservationThreshold(t_Handle h_Qm, uint32_t threshold);
+
+/**************************************************************************//**
+ @Function QM_ConfigErrorRejectionNotificationDest
+
+ @Description Change the destination of rejected frames for DC portals.
+ By default, depending on chip, some DC portals are set to reject
+ frames to HW and some to SW.
+
+ @Param[in] h_Qm - A handle to the QM module
+ @Param[in] id - DC Portal id.
+ @Param[in] p_Params - Destination parameters.
+
+ @Return E_OK on success; Error code otherwise.
+
+ @Cautions Allowed only following QM_Config() and before QM_Init().
+*//***************************************************************************/
+t_Error QM_ConfigErrorRejectionNotificationDest(t_Handle h_Qm, e_DpaaDcPortal id, t_QmDcPortalParams *p_Params);
+
+/** @} */ /* end of QM_advanced_init_grp group */
+/** @} */ /* end of QM_init_grp group */
+
+
+/**************************************************************************//**
+ @Group QM_runtime_control_grp QM (common) Runtime Control Unit
+
+ @Description QM (common) Runtime control unit API functions, definitions and enums.
+
+ @{
+*//***************************************************************************/
+
+/**************************************************************************//**
+ @Description enum for defining QM counters
+*//***************************************************************************/
+typedef enum e_QmCounters {
+ e_QM_COUNTERS_SFDR_IN_USE = 0, /**< Total Single Frame Descriptor Record (SFDR) currently in use */
+ e_QM_COUNTERS_PFDR_IN_USE, /**< Total Packed Frame Descriptor Record (PFDR) currently in use */
+ e_QM_COUNTERS_PFDR_FREE_POOL /**< Total Packed Frame Descriptor Record (PFDR) Free Pool Count in external memory */
+} e_QmCounters;
+
+/**************************************************************************//**
+ @Description structure for returning revision information
+*//***************************************************************************/
+typedef struct t_QmRevisionInfo {
+ uint8_t majorRev; /**< Major revision */
+ uint8_t minorRev; /**< Minor revision */
+} t_QmRevisionInfo;
+
+/**************************************************************************//**
+ @Description structure representing QM FQ-Range reservation parameters
+*//***************************************************************************/
+typedef struct t_QmRsrvFqrParams {
+ bool useForce; /**< TRUE - force reservation of specific fqids;
+ FALSE - reserve several fqids */
+ uint32_t numOfFqids; /**< number of fqids to be reserved. */
+ union{
+ struct {
+ uint32_t align; /**< alignment. will be used if useForce=FALSE */
+ } nonFrcQs;
+ struct {
+ uint32_t fqid; /**< the fqid base of the forced fqids. will be used if useForce=TRUE */
+ } frcQ;
+ } qs;
+} t_QmRsrvFqrParams;
+
+/**************************************************************************//**
+ @Description structure representing QM Error information
+*//***************************************************************************/
+typedef struct t_QmErrorInfo {
+ bool portalValid;
+ bool hwPortal;
+ e_DpaaSwPortal swPortalId; /**< Sw Portal id */
+ e_DpaaDcPortal dcpId; /**< Dcp (hw Portal) id */
+ bool fqidValid;
+ uint32_t fqid;
+} t_QmErrorInfo;
+
+
+/**************************************************************************//**
+ @Function QM_ReserveQueues
+
+ @Description Request to Reserved queues for future use.
+
+ @Param[in] h_Qm - A handle to the QM Module.
+ @Param[in] p_QmFqrParams - A structure of parameters for defining the
+ desired queues parameters.
+ @Param[out] p_BaseFqid - base-fqid on success; '0' code otherwise.
+
+ @Return E_OK on success;
+
+ @Cautions Allowed only after QM_Init().
+*//***************************************************************************/
+t_Error QM_ReserveQueues(t_Handle h_Qm, t_QmRsrvFqrParams *p_QmFqrParams, uint32_t *p_BaseFqid);
+
+#if (defined(DEBUG_ERRORS) && (DEBUG_ERRORS > 0))
+/**************************************************************************//**
+ @Function QM_DumpRegs
+
+ @Description Dumps all QM registers
+
+ @Param[in] h_Qm - A handle to the QM Module.
+
+ @Return E_OK on success;
+
+ @Cautions Allowed only after QM_Init().
+*//***************************************************************************/
+t_Error QM_DumpRegs(t_Handle h_Qm);
+#endif /* (defined(DEBUG_ERRORS) && ... */
+
+/**************************************************************************//**
+ @Function QM_SetException
+
+ @Description Calling this routine enables/disables the specified exception.
+
+ @Param[in] h_Qm - A handle to the QM Module.
+ @Param[in] exception - The exception to be selected.
+ @Param[in] enable - TRUE to enable interrupt, FALSE to mask it.
+
+ @Return E_OK on success; Error code otherwise.
+
+ @Cautions Allowed only following QM_Init().
+ This routine should NOT be called from guest-partition
+ (i.e. guestId != NCSW_MASTER_ID)
+*//***************************************************************************/
+t_Error QM_SetException(t_Handle h_Qm, e_QmExceptions exception, bool enable);
+
+/**************************************************************************//**
+ @Function QM_ErrorIsr
+
+ @Description QM interrupt-service-routine for errors.
+
+ @Param[in] h_Qm - A handle to the QM module
+
+ @Cautions Allowed only following QM_Init().
+ This routine should NOT be called from guest-partition
+ (i.e. guestId != NCSW_MASTER_ID)
+*//***************************************************************************/
+void QM_ErrorIsr(t_Handle h_Qm);
+
+/**************************************************************************//**
+ @Function QM_GetErrorInformation
+
+ @Description Reads the last error information.
+
+ @Param[in] h_Qm - A handle to the QM Module.
+ @Param[out] p_errInfo - the information will be loaded to this struct.
+
+ @Return E_OK on success; Error code otherwise.
+
+ @Cautions Allowed only following QM_Init().
+ This routine should NOT be called from guest-partition
+ (i.e. guestId != NCSW_MASTER_ID)
+*//***************************************************************************/
+t_Error QM_GetErrorInformation(t_Handle h_Qm, t_QmErrorInfo *p_errInfo);
+
+/**************************************************************************//**
+ @Function QM_GetCounter
+
+ @Description Reads one of the QM counters.
+
+ @Param[in] h_Qm - A handle to the QM Module.
+ @Param[in] counter - The requested counter.
+
+ @Return Counter's current value.
+
+ @Cautions Allowed only following QM_Init().
+*//***************************************************************************/
+uint32_t QM_GetCounter(t_Handle h_Qm, e_QmCounters counter);
+
+/**************************************************************************//**
+ @Function QM_GetRevision
+
+ @Description Returns the QM revision
+
+ @Param[in] h_Qm A handle to a QM Module.
+ @Param[out] p_QmRevisionInfo A structure of revision information parameters.
+
+ @Return None.
+
+ @Cautions Allowed only following QM_Init().
+*//***************************************************************************/
+t_Error QM_GetRevision(t_Handle h_Qm, t_QmRevisionInfo *p_QmRevisionInfo);
+
+/** @} */ /* end of QM_runtime_control_grp group */
+
+
+/**************************************************************************//**
+ @Group QM_runtime_data_grp QM (common) Runtime Data Unit
+
+ @Description QM (common) Runtime data unit API functions, definitions and enums.
+
+ @{
+*//***************************************************************************/
+
+/**************************************************************************//**
+ @Function QM_Poll
+
+ @Description Poll frames from QM.
+
+ @Param[in] h_Qm - A handle to the QM module
+ @Param[in] source - The selected frames type to poll
+
+ @Return E_OK on success; Error code otherwise.
+
+ @Cautions Allowed only following QM_Init().
+*//***************************************************************************/
+t_Error QM_Poll(t_Handle h_Qm, e_QmPortalPollSource source);
+
+/** @} */ /* end of QM_runtime_data_grp group */
+/** @} */ /* end of QM_lib_grp group */
+
+
+/**************************************************************************//**
+ @Group QM_portal_grp QM-Portal API
+
+ @Description QM common API functions, definitions and enums.
+
+ @{
+*//***************************************************************************/
+
+/**************************************************************************//**
+ @Group QM_portal_init_grp QM-Portal Initialization Unit
+
+ @Description QM-Portal Initialization Unit
+
+ @{
+*//***************************************************************************/
+
+/**************************************************************************//**
+ @Description structure representing QM-Portal Stash parameters
+*//***************************************************************************/
+typedef struct {
+ uint8_t stashDestQueue; /**< This value is used to direct all stashing transactions initiated on behalf of this software portal
+ to the specific Stashing Request Queues (SRQ) */
+ uint8_t eqcr; /**< If 0, disabled. If 1, for every EQCR entry consumed by QMan a new stash transaction is performed.
+ If 2-7, after 2-7 EQCR entries being consumed by QMAN a new stash transaction is performed. */
+ bool eqcrHighPri; /**< EQCR entry stash transactions for this software portal will be signaled with higher priority. */
+ bool dqrr; /**< DQRR entry stash enable/disable */
+ uint16_t dqrrLiodn; /**< This value is attached to every transaction initiated by QMan when performing DQRR entry or EQCR_CI stashing
+ on behalf of this software portal */
+ bool dqrrHighPri; /**< DQRR entry stash transactions for this software portal will be signaled with higher priority. */
+ bool fdFq; /**< Dequeued Frame Data, Annotation, and FQ Context Stashing enable/disable */
+ uint16_t fdFqLiodn; /**< This value is attached to every transaction initiated by QMan when performing dequeued frame data and
+ annotation stashing, or FQ context stashing on behalf of this software portal */
+ bool fdFqHighPri; /**< Dequeued frame data, annotation, and FQ context stash transactions for this software portal will be signaled
+ with higher priority. */
+ bool fdFqDrop; /**< If True, Dequeued frame data, annotation, and FQ context stash transactions for this software portal will be dropped
+ by QMan if the target SRQ is almost full, to prevent QMan sequencer stalling. Stash transactions that are
+ dropped will result in a fetch from main memory when a core reads the addressed coherency granule.
+ If FALSE, Dequeued frame data, annotation, and FQ context stash transactions for this software portal will never be
+ dropped by QMan. If the target SRQ is full a sequencer will stall until each stash transaction can be completed. */
+} t_QmPortalStashParam;
+
+/**************************************************************************//**
+ @Description structure representing QM-Portal initialization parameters
+*//***************************************************************************/
+typedef struct {
+ uintptr_t ceBaseAddress; /**< Cache-enabled base address (virtual) */
+ uintptr_t ciBaseAddress; /**< Cache-inhibited base address (virtual) */
+ t_Handle h_Qm; /**< Qm Handle */
+ e_DpaaSwPortal swPortalId; /**< Portal id */
+ int irq; /**< portal interrupt line; used only if useIrq set to TRUE */
+ uint16_t fdLiodnOffset; /**< liodn to be used for all frames enqueued via this software portal */
+ t_QmReceivedFrameCallback *f_DfltFrame; /**< this callback will be called unless specific callback assigned to the FQ*/
+ t_QmRejectedFrameCallback *f_RejectedFrame; /**< this callback will be called for rejected frames. */
+ t_Handle h_App; /**< a handle to the upper layer; It will be passed by the driver upon calling the CB */
+} t_QmPortalParam;
+
+
+/**************************************************************************//**
+ @Function QM_PORTAL_Config
+
+ @Description Creates descriptor for a QM-Portal module.
+
+ The routine returns a handle (descriptor) to a QM-Portal object.
+ This descriptor must be passed as first parameter to all other
+ QM-Portal function calls.
+
+ No actual initialization or configuration of QM-Portal hardware is
+ done by this routine.
+
+ @Param[in] p_QmPortalParam - Pointer to data structure of parameters
+
+ @Retval Handle to a QM-Portal object, or NULL for Failure.
+*//***************************************************************************/
+t_Handle QM_PORTAL_Config(t_QmPortalParam *p_QmPortalParam);
+
+/**************************************************************************//**
+ @Function QM_PORTAL_Init
+
+ @Description Initializes a QM-Portal module
+
+ @Param[in] h_QmPortal - A handle to a QM-Portal module
+
+ @Return E_OK on success; Error code otherwise.
+*//***************************************************************************/
+t_Error QM_PORTAL_Init(t_Handle h_QmPortal);
+
+/**************************************************************************//**
+ @Function QM_PORTAL_Free
+
+ @Description Frees all resources that were assigned to a QM-Portal module.
+
+ Calling this routine invalidates the descriptor.
+
+ @Param[in] h_QmPortal - A handle to a QM-Portal module
+
+ @Return E_OK on success; Error code otherwise.
+*//***************************************************************************/
+t_Error QM_PORTAL_Free(t_Handle h_QmPortal);
+
+/**************************************************************************//**
+ @Group QM_portal_advanced_init_grp QM-Portal Advanced Configuration Unit
+
+ @Description Configuration functions used to change default values.
+
+ @{
+*//***************************************************************************/
+
+/**************************************************************************//**
+ @Function QM_PORTAL_ConfigDcaMode
+
+ @Description Change the Discrate Consumption Acknowledge mode
+ from its default configuration [FALSE].
+
+ @Param[in] h_QmPortal - A handle to a QM-Portal module
+ @Param[in] enable - Enable/Disable DCA mode
+
+ @Return E_OK on success; Error code otherwise.
+
+ @Cautions Allowed only following QM_PORTAL_Config() and before QM_PORTAL_Init().
+*//***************************************************************************/
+t_Error QM_PORTAL_ConfigDcaMode(t_Handle h_QmPortal, bool enable);
+
+/**************************************************************************//**
+ @Function QM_PORTAL_ConfigStash
+
+ @Description Config the portal to active stash mode.
+
+ @Param[in] h_QmPortal - A handle to a QM-Portal module
+ @Param[in] p_StashParams - Pointer to data structure of parameters
+
+ @Return E_OK on success; Error code otherwise.
+
+ @Cautions Allowed only following QM_PORTAL_Config() and before QM_PORTAL_Init().
+*//***************************************************************************/
+t_Error QM_PORTAL_ConfigStash(t_Handle h_QmPortal, t_QmPortalStashParam *p_StashParams);
+
+
+/**************************************************************************//**
+ @Function QM_PORTAL_ConfigPullMode
+
+ @Description Change the Pull Mode from its default configuration [FALSE].
+
+ @Param[in] h_QmPortal - A handle to a QM-Portal module
+ @Param[in] pullMode - When TRUE, the Portal will work in pull mode.
+
+ @Return E_OK on success; Error code otherwise.
+
+ @Cautions Allowed only following QM_PORTAL_Config() and before QM_PORTAL_Init().
+*//***************************************************************************/
+t_Error QM_PORTAL_ConfigPullMode(t_Handle h_QmPortal, bool pullMode);
+
+/** @} */ /* end of QM_portal_advanced_init_grp group */
+/** @} */ /* end of QM_portal_init_grp group */
+
+
+/**************************************************************************//**
+ @Group QM_portal_runtime_control_grp QM-Portal Runtime Control Unit
+
+ @Description QM-Portal Runtime control unit API functions, definitions and enums.
+
+ @{
+*//***************************************************************************/
+
+/**************************************************************************//**
+ @Function QM_PORTAL_AddPoolChannel
+
+ @Description Adding the pool channel to the SW-Portal's scheduler.
+ the sw-portal will get frames that came from the pool channel.
+
+ @Param[in] h_QmPortal - A handle to a QM-Portal module
+ @Param[in] poolChannelId - Pool channel id. must between '0' to QM_MAX_NUM_OF_POOL_CHANNELS
+
+ @Return E_OK on success; Error code otherwise.
+
+ @Cautions Allowed only following QM_PORTAL_Init().
+*//***************************************************************************/
+t_Error QM_PORTAL_AddPoolChannel(t_Handle h_QmPortal, uint8_t poolChannelId);
+
+/** @} */ /* end of QM_portal_runtime_control_grp group */
+
+
+/**************************************************************************//**
+ @Group QM_portal_runtime_data_grp QM-Portal Runtime Data Unit
+
+ @Description QM-Portal Runtime data unit API functions, definitions and enums.
+
+ @{
+*//***************************************************************************/
+
+/**************************************************************************//**
+ @Description structure representing QM Portal Frame Info
+*//***************************************************************************/
+typedef struct t_QmPortalFrameInfo {
+ t_Handle h_App;
+ t_Handle h_QmFqr;
+ uint32_t fqidOffset;
+ t_DpaaFD frame;
+} t_QmPortalFrameInfo;
+
+/**************************************************************************//**
+ @Function QM_PORTAL_Poll
+
+ @Description Poll frames from the specified sw-portal.
+
+ @Param[in] h_QmPortal - A handle to a QM-Portal module
+ @Param[in] source - The selected frames type to poll
+
+ @Return E_OK on success; Error code otherwise.
+
+ @Cautions Allowed only following QM_PORTAL_Init().
+*//***************************************************************************/
+t_Error QM_PORTAL_Poll(t_Handle h_QmPortal, e_QmPortalPollSource source);
+
+/**************************************************************************//**
+ @Function QM_PORTAL_PollFrame
+
+ @Description Poll frames from the specified sw-portal. will poll only data frames
+
+ @Param[in] h_QmPortal - A handle to a QM-Portal module
+ @Param[out] p_frameInfo - A structure to hold the dequeued frame information
+
+ @Return E_OK on success; Error code otherwise.
+
+ @Cautions Allowed only following QM_PORTAL_Init().
+*//***************************************************************************/
+t_Error QM_PORTAL_PollFrame(t_Handle h_QmPortal, t_QmPortalFrameInfo *p_frameInfo);
+
+
+/** @} */ /* end of QM_portal_runtime_data_grp group */
+/** @} */ /* end of QM_portal_grp group */
+
+
+/**************************************************************************//**
+ @Group QM_fqr_grp QM Frame-Queue-Range API
+
+ @Description QM-FQR API functions, definitions and enums.
+
+ @{
+*//***************************************************************************/
+
+/**************************************************************************//**
+ @Group QM_fqr_init_grp QM-FQR Initialization Unit
+
+ @Description QM-FQR Initialization Unit
+
+ @{
+*//***************************************************************************/
+
+
+/**************************************************************************//**
+ @Description structure representing QM FQ-Range congestion group parameters
+*//***************************************************************************/
+typedef struct {
+ t_Handle h_QmCg; /**< A handle to the congestion group. */
+ int8_t overheadAccountingLength; /**< For each frame add this number for CG calculation
+ (may be negative), if 0 - disable feature */
+ uint32_t fqTailDropThreshold; /**< if not "0" - enable tail drop on this FQR */
+} t_QmFqrCongestionAvoidanceParams;
+
+/**************************************************************************//**
+ @Description structure representing QM FQ-Range initialization parameters
+*//***************************************************************************/
+typedef struct {
+ t_Handle h_Qm; /**< A handle to a QM module */
+ t_Handle h_QmPortal; /**< A handle to a QM Portal Module;
+ will be used only for Init and Free routines;
+ NOTE : if NULL, assuming affinity */
+ bool initParked; /**< This FQ-Range will be initialize in park state (un-schedule) */
+ bool holdActive; /**< This FQ-Range can be parked (un-schedule);
+ This affects only on queues destined to software portals*/
+ bool preferInCache; /**< Prefer this FQ-Range to be in QMAN's internal cache for all states */
+ bool useContextAForStash;/**< This FQ-Range will use context A for stash */
+ union {
+ struct {
+ uint8_t frameAnnotationSize;/**< Size of Frame Annotation to be stashed */
+ uint8_t frameDataSize; /**< Size of Frame Data to be stashed. */
+ uint8_t fqContextSize; /**< Size of FQ context to be stashed. */
+ uint64_t fqContextAddr; /**< 40 bit memory address containing the FQ context information to be stashed;
+ Must be cacheline-aligned */
+ } stashingParams;
+ t_QmContextA *p_ContextA; /**< context-A field to be written in the FQ structure */
+ };
+ t_QmContextB *p_ContextB; /**< context-B field to be written in the FQ structure;
+ Note that this field may be used for Tx queues only! */
+ e_QmFQChannel channel; /**< Qm Channel */
+ uint8_t wq; /**< Work queue within the channel */
+ bool shadowMode; /**< If TRUE, useForce MUST set to TRUE and numOfFqids MUST set to '1' */
+ uint32_t numOfFqids; /**< number of fqids to be allocated*/
+ bool useForce; /**< TRUE - force allocation of specific fqids;
+ FALSE - allocate several fqids */
+ union{
+ struct {
+ uint32_t align; /**< alignment. will be used if useForce=FALSE */
+ } nonFrcQs;
+ struct {
+ uint32_t fqid; /**< the fqid base of the forced fqids. will be used if useForce=TRUE */
+ } frcQ;
+ } qs;
+ bool congestionAvoidanceEnable;
+ /**< TRUE to enable congestion avoidance mechanism */
+ t_QmFqrCongestionAvoidanceParams congestionAvoidanceParams;
+ /**< Parameters for congestion avoidance */
+} t_QmFqrParams;
+
+
+/**************************************************************************//**
+ @Function QM_FQR_Create
+
+ @Description Initializing and enabling a Frame-Queue-Range.
+ This routine should be called for adding an FQR.
+
+ @Param[in] p_QmFqrParams - A structure of parameters for defining the
+ desired queues parameters.
+
+ @Return A handle to the initialized FQR on success; NULL code otherwise.
+
+ @Cautions Allowed only following QM_Init().
+*//***************************************************************************/
+t_Handle QM_FQR_Create(t_QmFqrParams *p_QmFqrParams);
+
+/**************************************************************************//**
+ @Function QM_FQR_Free
+
+ @Description Deleting and free all resources of an initialized FQR.
+
+ @Param[in] h_QmFqr - A handle to a QM-FQR Module.
+
+ @Return E_OK on success; Error code otherwise.
+
+ @Cautions Allowed only following QM_Init() and QM_FQR_Create() for this FQR.
+*//***************************************************************************/
+t_Error QM_FQR_Free(t_Handle h_QmFqr);
+
+/**************************************************************************//**
+ @Function QM_FQR_FreeWDrain
+
+ @Description Deleting and free all resources of an initialized FQR
+ with the option of draining.
+
+ @Param[in] h_QmFqr - A handle to a QM-FQR Module.
+ @Param[in] f_CompletionCB - Pointer to a completion callback to be used in non-blocking mode.
+ @Param[in] deliverFrame - TRUE for deliver the drained frames to the user;
+ FALSE for not deliver the frames.
+ @Param[in] f_CallBack - Pointer to a callback to handle the delivered frames.
+ @Param[in] h_App - User's application descriptor.
+
+ @Return E_OK on success; Error code otherwise.
+
+ @Cautions Allowed only following QM_Init() and QM_FQR_Create() for this FQR.
+*//***************************************************************************/
+t_Error QM_FQR_FreeWDrain(t_Handle h_QmFqr,
+ t_QmFqrDrainedCompletionCB *f_CompletionCB,
+ bool deliverFrame,
+ t_QmReceivedFrameCallback *f_CallBack,
+ t_Handle h_App);
+
+/** @} */ /* end of QM_fqr_init_grp group */
+
+
+/**************************************************************************//**
+ @Group QM_fqr_runtime_control_grp QM-FQR Runtime Control Unit
+
+ @Description QM-FQR Runtime control unit API functions, definitions and enums.
+
+ @{
+*//***************************************************************************/
+
+/**************************************************************************//**
+ @Description enum for defining QM-FQR counters
+*//***************************************************************************/
+typedef enum e_QmFqrCounters {
+ e_QM_FQR_COUNTERS_FRAME = 0, /**< Total number of frames on this frame queue */
+ e_QM_FQR_COUNTERS_BYTE /**< Total number of bytes in all frames on this frame queue */
+} e_QmFqrCounters;
+
+/**************************************************************************//**
+ @Function QM_FQR_RegisterCB
+
+ @Description Register a callback routine to be called when a frame comes from this FQ-Range
+
+ @Param[in] h_QmFqr - A handle to a QM-FQR Module.
+ @Param[in] f_CallBack - An application callback
+ @Param[in] h_App - User's application descriptor
+
+ @Return E_OK on success; Error code otherwise.
+
+ @Cautions Allowed only following QM_FQR_Create().
+*//***************************************************************************/
+t_Error QM_FQR_RegisterCB(t_Handle h_QmFqr, t_QmReceivedFrameCallback *f_CallBack, t_Handle h_App);
+
+/**************************************************************************//**
+ @Function QM_FQR_Resume
+
+ @Description Request to Re-Schedule this Fqid.
+
+ @Param[in] h_QmFqr - A handle to a QM-FQR Module.
+ @Param[in] h_QmPortal - A handle to a QM Portal Module;
+ NOTE : if NULL, assuming affinity.
+ @Param[in] fqidOffset - Fqid offset within the FQ-Range.
+
+ @Return E_OK on success; Error code otherwise.
+
+ @Cautions Allowed only following QM_FQR_Create().
+*//***************************************************************************/
+t_Error QM_FQR_Resume(t_Handle h_QmFqr, t_Handle h_QmPortal, uint32_t fqidOffset);
+
+/**************************************************************************//**
+ @Function QM_FQR_Suspend
+
+ @Description Request to Un-Schedule this Fqid.
+
+ @Param[in] h_QmFqr - A handle to a QM-FQR Module.
+ @Param[in] h_QmPortal - A handle to a QM Portal Module;
+ NOTE : if NULL, assuming affinity.
+ @Param[in] fqidOffset - Fqid offset within the FQ-Range.
+
+ @Return E_OK on success; Error code otherwise.
+
+ @Cautions Allowed only following QM_FQR_Create().
+*//***************************************************************************/
+t_Error QM_FQR_Suspend(t_Handle h_QmFqr, t_Handle h_QmPortal, uint32_t fqidOffset);
+
+/**************************************************************************//**
+ @Function QM_FQR_GetFqid
+
+ @Description Returned the Fqid base of the FQ-Range
+
+ @Param[in] h_QmFqr - A handle to a QM-FQR Module.
+
+ @Return Fqid base.
+
+ @Cautions Allowed only following QM_FQR_Create().
+*//***************************************************************************/
+uint32_t QM_FQR_GetFqid(t_Handle h_QmFqr);
+
+/**************************************************************************//**
+ @Function QM_FQR_GetCounter
+
+ @Description Reads one of the QM-FQR counters.
+
+ @Param[in] h_QmFqr - A handle to a QM-FQR Module.
+ @Param[in] h_QmPortal - A handle to a QM Portal Module;
+ NOTE : if NULL, assuming affinity.
+ @Param[in] fqidOffset - Fqid offset within the FQ-Range.
+ @Param[in] counter - The requested counter.
+
+ @Return Counter's current value.
+
+ @Cautions Allowed only following QM_FQR_Create().
+*//***************************************************************************/
+uint32_t QM_FQR_GetCounter(t_Handle h_QmFqr, t_Handle h_QmPortal, uint32_t fqidOffset, e_QmFqrCounters counter);
+
+/** @} */ /* end of QM_fqr_runtime_control_grp group */
+
+
+/**************************************************************************//**
+ @Group QM_fqr_runtime_data_grp QM-FQR Runtime Data Unit
+
+ @Description QM-FQR Runtime data unit API functions, definitions and enums.
+
+ @{
+*//***************************************************************************/
+
+/**************************************************************************//**
+ @Function QM_FQR_Enqueue
+
+ @Description Enqueue the frame into the FQ to be transmitted.
+
+ @Param[in] h_QmFqr - A handle to a QM-FQR Module.
+ @Param[in] h_QmPortal - A handle to a QM Portal Module;
+ NOTE : if NULL, assuming affinity.
+ @Param[in] fqidOffset - Fqid offset within the FQ-Range.
+ @Param[in] p_Frame - Pointer to the frame to be enqueued.
+
+ @Return E_OK on success; Error code otherwise.
+
+ @Cautions Allowed only following QM_FQR_Create().
+*//***************************************************************************/
+t_Error QM_FQR_Enqueue(t_Handle h_QmFqr, t_Handle h_QmPortal, uint32_t fqidOffset, t_DpaaFD *p_Frame);
+
+/**************************************************************************//**
+ @Function QM_FQR_PullFrame
+
+ @Description Perform a Pull command.
+
+ @Param[in] h_QmFqr - A handle to a QM-FQR Module.
+ @Param[in] h_QmPortal - A handle to a QM Portal Module;
+ NOTE : if NULL, assuming affinity.
+ @Param[in] fqidOffset - Fqid offset within the FQ-Range.
+ @Param[out] p_Frame - The Received Frame
+
+ @Return E_OK on success; Error code otherwise.
+
+ @Cautions Allowed only following QM_PORTAL_Init().
+*//***************************************************************************/
+t_Error QM_FQR_PullFrame(t_Handle h_QmFqr, t_Handle h_QmPortal, uint32_t fqidOffset, t_DpaaFD *p_Frame);
+
+
+/** @} */ /* end of QM_fqr_runtime_data_grp group */
+/** @} */ /* end of QM_fqr_grp group */
+
+
+/**************************************************************************//**
+ @Group QM_cg_grp QM Congestion Group API
+
+ @Description QM-CG API functions, definitions and enums.
+
+ @{
+*//***************************************************************************/
+
+/**************************************************************************//**
+ @Group QM_cg_init_grp QM-Congestion Group Initialization Unit
+
+ @Description QM-CG Initialization Unit
+
+ @{
+*//***************************************************************************/
+
+/**************************************************************************//**
+ @Description structure representing QM CG WRED curve
+*//***************************************************************************/
+typedef struct t_QmCgWredCurve {
+ uint32_t maxTh; /**< minimum threshold - below this level
+ all packets are rejected (approximated
+ to be expressed as x*2^y due to HW
+ implementation)*/
+ uint32_t minTh; /**< minimum threshold - below this level
+ all packets are accepted (approximated
+ due to HW implementation)*/
+ uint8_t probabilityDenominator; /**< 1-64, the fraction of packets dropped
+ when the average queue depth is at the
+ maximum threshold.(approximated due to HW
+ implementation). */
+} t_QmCgWredCurve;
+
+/**************************************************************************//**
+ @Description structure representing QM CG WRED parameters
+*//***************************************************************************/
+typedef struct t_QmCgWredParams {
+ bool enableGreen;
+ t_QmCgWredCurve greenCurve;
+ bool enableYellow;
+ t_QmCgWredCurve yellowCurve;
+ bool enableRed;
+ t_QmCgWredCurve redCurve;
+} t_QmCgWredParams;
+
+/**************************************************************************//**
+ @Description structure representing QM CG configuration parameters
+*//***************************************************************************/
+typedef struct t_QmCgParams {
+ t_Handle h_Qm; /**< A handle to a QM module */
+ t_Handle h_QmPortal; /**< A handle to a QM Portal Module;
+ will be used for Init, Free and as
+ an interrupt destination for cg state
+ change (if CgStateChangeEnable = TRUE) */
+ bool frameCount; /**< TRUE for frame count, FALSE - byte count */
+ bool wredEnable; /**< if TRUE - WRED enabled. Each color is enabled independently
+ so that some colors may use WRED, but others may use
+ Tail drop - if enabled, or none. */
+ t_QmCgWredParams wredParams; /**< WRED parameters, relevant if wredEnable = TRUE*/
+ bool tailDropEnable; /**< if TRUE - Tail drop enabled */
+ uint32_t threshold; /**< If Tail drop - used as Tail drop threshold, otherwise
+ 'threshold' may still be used to receive notifications
+ when threshold is passed. If threshold and f_Exception
+ are set, interrupts are set defaultly by driver. */
+ bool notifyDcPortal; /**< Relevant if this CG receives enqueues from a direct portal
+ e_DPAA_DCPORTAL0 or e_DPAA_DCPORTAL1. TRUE to notify
+ the DC portal, FALSE to notify this SW portal. */
+ e_DpaaDcPortal dcPortalId; /**< relevant if notifyDcPortal=TRUE - DC Portal id */
+ t_QmExceptionsCallback *f_Exception; /**< relevant and mandatory if threshold is configured and
+ notifyDcPortal = FALSE. If threshold and f_Exception
+ are set, interrupts are set defaultly by driver */
+ t_Handle h_App; /**< A handle to the application layer, will be passed as
+ argument to f_Exception */
+} t_QmCgParams;
+
+
+/**************************************************************************//**
+ @Function QM_CG_Create
+
+ @Description Create and configure a congestion Group.
+
+ @Param[in] p_CgParams - CG parameters
+
+ @Return A handle to the CG module
+
+ @Cautions Allowed only following QM_Init().
+*//***************************************************************************/
+t_Handle QM_CG_Create(t_QmCgParams *p_CgParams);
+
+/**************************************************************************//**
+ @Function QM_CG_Free
+
+ @Description Deleting and free all resources of an initialized CG.
+
+ @Param[in] h_QmCg - A handle to a QM-CG Module.
+
+ @Return E_OK on success; Error code otherwise.
+
+ @Cautions Allowed only following QM_Init() and QM_CR_Create() for this CG.
+*//***************************************************************************/
+t_Error QM_CG_Free(t_Handle h_QmCg);
+
+/** @} */ /* end of QM_cg_init_grp group */
+
+
+/**************************************************************************//**
+ @Group QM_cg_runtime_control_grp QM-CG Runtime Control Unit
+
+ @Description QM-CG Runtime control unit API functions, definitions and enums.
+
+ @{
+*//***************************************************************************/
+
+/**************************************************************************//**
+ @Description structure representing QM CG WRED colors
+*//***************************************************************************/
+typedef enum e_QmCgColor {
+ e_QM_CG_COLOR_GREEN,
+ e_QM_CG_COLOR_YELLOW,
+ e_QM_CG_COLOR_RED
+} e_QmCgColor;
+
+/**************************************************************************//**
+ @Description structure representing QM CG modification parameters
+*//***************************************************************************/
+typedef struct t_QmCgModifyWredParams {
+ e_QmCgColor color;
+ bool enable;
+ t_QmCgWredCurve wredParams;
+} t_QmCgModifyWredParams;
+
+
+/**************************************************************************//**
+ @Function QM_CG_SetException
+
+ @Description Set CG exception.
+
+ @Param[in] h_QmCg - A handle to a QM-CG Module.
+ @Param[in] exception - exception enum
+ @Param[in] enable - TRUE to enable, FALSE to disable.
+
+ @Return E_OK on success; Error code otherwise.
+
+ @Cautions Allowed only following QM_Init() and QM_CG_Create() for this CG.
+*//***************************************************************************/
+t_Error QM_CG_SetException(t_Handle h_QmCg, e_QmExceptions exception, bool enable);
+
+/**************************************************************************//**
+ @Function QM_CG_ModifyWredCurve
+
+ @Description Change WRED curve parameters for a selected color.
+ Note that this routine may be called only for valid CG's that
+ already have been configured for WRED, and only need a change
+ in the WRED parameters.
+
+ @Param[in] h_QmCg - A handle to a QM-CG Module.
+ @Param[in] p_QmCgModifyParams - A structure of new WRED parameters.
+
+ @Return E_OK on success; Error code otherwise.
+
+ @Cautions Allowed only following QM_Init() and QM_CG_Create() for this CG.
+*//***************************************************************************/
+t_Error QM_CG_ModifyWredCurve(t_Handle h_QmCg, t_QmCgModifyWredParams *p_QmCgModifyParams);
+
+/**************************************************************************//**
+ @Function QM_CG_ModifyTailDropThreshold
+
+ @Description Change WRED curve parameters for a selected color.
+ Note that this routine may be called only for valid CG's that
+ already have been configured for tail drop, and only need a change
+ in the threshold value.
+
+ @Param[in] h_QmCg - A handle to a QM-CG Module.
+ @Param[in] threshold - New threshold.
+
+ @Return E_OK on success; Error code otherwise.
+
+ @Cautions Allowed only following QM_Init() and QM_CG_Create() for this CG.
+*//***************************************************************************/
+t_Error QM_CG_ModifyTailDropThreshold(t_Handle h_QmCg, uint32_t threshold);
+
+
+/** @} */ /* end of QM_cg_runtime_control_grp group */
+/** @} */ /* end of QM_cg_grp group */
+/** @} */ /* end of QM_grp group */
+
+
+#endif /* __QM_EXT_H */
OpenPOWER on IntegriCloud