1/******************************************************************************
2
3 � 1995-2003, 2004, 2005-2011 Freescale Semiconductor, Inc.
4 All rights reserved.
5
6 This is proprietary source code of Freescale Semiconductor Inc.,
7 and its use is subject to the NetComm Device Drivers EULA.
8 The copyright notice above does not evidence any actual or intended
9 publication of such source code.
10
11 ALTERNATIVELY, redistribution and use in source and binary forms, with
12 or without modification, are permitted provided that the following
13 conditions are met:
14     * Redistributions of source code must retain the above copyright
15       notice, this list of conditions and the following disclaimer.
16     * Redistributions in binary form must reproduce the above copyright
17       notice, this list of conditions and the following disclaimer in the
18       documentation and/or other materials provided with the distribution.
19     * Neither the name of Freescale Semiconductor nor the
20       names of its contributors may be used to endorse or promote products
21       derived from this software without specific prior written permission.
22
23 THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
24 EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
25 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
26 DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
27 DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
28 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
30 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
31 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
32 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
33 *
34
35 **************************************************************************/
36/******************************************************************************
37 @File          qm_ext.h
38
39 @Description   QM & Portal API
40*//***************************************************************************/
41#ifndef __QM_EXT_H
42#define __QM_EXT_H
43
44#include "error_ext.h"
45#include "std_ext.h"
46#include "dpaa_ext.h"
47#include "part_ext.h"
48
49
50/**************************************************************************//**
51 @Group         QM_grp Queue Manager API
52
53 @Description   QM API functions, definitions and enums.
54
55 @{
56*//***************************************************************************/
57
58/**************************************************************************//**
59 @Description   This callback type is used when receiving frame.
60
61                User provides this function. Driver invokes it.
62
63 @Param[in]     h_App       A user argument to the callback
64 @Param[in]     h_QmFqr     A handle to an QM-FQR Module.
65 @Param[in]     fqidOffset  fqid offset from the FQR's fqid base.
66 @Param[in]     p_Frame     The Received Frame
67
68 @Retval        e_RX_STORE_RESPONSE_CONTINUE - order the driver to continue Rx
69                                               operation for all ready data.
70 @Retval        e_RX_STORE_RESPONSE_PAUSE    - order the driver to stop Rx operation.
71
72 @Cautions      p_Frame is local parameter; i.e. users must NOT access or use
73                this parameter in any means outside this callback context.
74*//***************************************************************************/
75typedef e_RxStoreResponse (t_QmReceivedFrameCallback)(t_Handle h_App,
76                                                      t_Handle h_QmFqr,
77                                                      t_Handle h_QmPortal,
78                                                      uint32_t fqidOffset,
79                                                      t_DpaaFD *p_Frame);
80
81/**************************************************************************//**
82 @Description   This callback type is used when the FQR is completely was drained.
83
84                User provides this function. Driver invokes it.
85
86 @Param[in]     h_App       A user argument to the callback
87 @Param[in]     h_QmFqr     A handle to an QM-FQR Module.
88
89 @Retval        E_OK on success; Error code otherwise.
90*//***************************************************************************/
91typedef t_Error (t_QmFqrDrainedCompletionCB)(t_Handle h_App,
92                                             t_Handle h_QmFqr);
93
94/**************************************************************************//**
95 @Description   QM Rejection code enum
96*//***************************************************************************/
97typedef enum e_QmRejectionCode
98{
99    e_QM_RC_NONE,
100
101    e_QM_RC_CG_TAILDROP,    /**< This frames was rejected due to congestion
102                                     group taildrop situation */
103    e_QM_RC_CG_WRED,            /**< This frames was rejected due to congestion
104                                     group WRED situation */
105    e_QM_RC_FQ_TAILDROP         /**< This frames was rejected due to FQID TD
106                                     situation */
107/*  e_QM_RC_ERROR
108    e_QM_RC_ORPWINDOW_EARLY
109    e_QM_RC_ORPWINDOW_LATE
110    e_QM_RC_ORPWINDOW_RETIRED */
111} e_QmRejectionCode;
112
113/**************************************************************************//**
114 @Description   QM Rejected frame information
115*//***************************************************************************/
116typedef struct t_QmRejectedFrameInfo
117{
118    e_QmRejectionCode    rejectionCode; /**< Rejection code */
119    union
120    {
121        struct
122        {
123            uint8_t cgId;               /**< congestion group id*/
124        } cg;                           /**< rejection parameters when rejectionCode =
125                                             e_QM_RC_CG_TAILDROP or e_QM_RC_CG_WRED. */
126    };
127} t_QmRejectedFrameInfo;
128
129/**************************************************************************//**
130 @Description   This callback type is used when receiving rejected frames.
131
132                User provides this function. Driver invokes it.
133
134 @Param[in]     h_App                   A user argument to the callback
135 @Param[in]     h_QmFqr                 A handle to an QM-FQR Module.
136 @Param[in]     fqidOffset              fqid offset from the FQR's fqid base.
137 @Param[in]     p_Frame                 The Rejected Frame
138 @Param[in]     p_QmRejectedFrameInfo   Rejected Frame information
139
140 @Retval        e_RX_STORE_RESPONSE_CONTINUE - order the driver to continue Rx
141                                               operation for all ready data.
142 @Retval        e_RX_STORE_RESPONSE_PAUSE    - order the driver to stop Rx operation.
143
144 @Cautions      p_Frame is local parameter; i.e. users must NOT access or use
145                this parameter in any means outside this callback context.
146*//***************************************************************************/
147typedef e_RxStoreResponse (t_QmRejectedFrameCallback)(t_Handle h_App,
148                                                      t_Handle h_QmFqr,
149                                                      t_Handle h_QmPortal,
150                                                      uint32_t fqidOffset,
151                                                      t_DpaaFD *p_Frame,
152                                                      t_QmRejectedFrameInfo *p_QmRejectedFrameInfo);
153
154
155
156/**************************************************************************//**
157 @Group         QM_lib_grp QM common API
158
159 @Description   QM common API functions, definitions and enums.
160
161 @{
162*//***************************************************************************/
163
164/**************************************************************************//**
165 @Description   QM Exceptions
166*//***************************************************************************/
167typedef enum e_QmExceptions {
168    e_QM_EX_CORENET_INITIATOR_DATA = 0,         /**< Initiator Data Error */
169    e_QM_EX_CORENET_TARGET_DATA,                /**< CoreNet Target Data Error */
170    e_QM_EX_CORENET_INVALID_TARGET_TRANSACTION, /**< Invalid Target Transaction */
171    e_QM_EX_PFDR_THRESHOLD,                     /**< PFDR Low Watermark Interrupt */
172    e_QM_EX_PFDR_ENQUEUE_BLOCKED,               /**< PFDR Enqueues Blocked Interrupt */
173    e_QM_EX_SINGLE_ECC,                         /**< Single Bit ECC Error Interrupt */
174    e_QM_EX_MULTI_ECC,                          /**< Multi Bit ECC Error Interrupt */
175    e_QM_EX_INVALID_COMMAND,                    /**< Invalid Command Verb Interrupt */
176    e_QM_EX_DEQUEUE_DCP,                        /**< Invalid Dequeue Direct Connect Portal Interrupt */
177    e_QM_EX_DEQUEUE_FQ,                         /**< Invalid Dequeue FQ Interrupt */
178    e_QM_EX_DEQUEUE_SOURCE,                     /**< Invalid Dequeue Source Interrupt */
179    e_QM_EX_DEQUEUE_QUEUE,                      /**< Invalid Dequeue Queue Interrupt */
180    e_QM_EX_ENQUEUE_OVERFLOW,                   /**< Invalid Enqueue Overflow Interrupt */
181    e_QM_EX_ENQUEUE_STATE,                      /**< Invalid Enqueue State Interrupt */
182    e_QM_EX_ENQUEUE_CHANNEL,                    /**< Invalid Enqueue Channel Interrupt */
183    e_QM_EX_ENQUEUE_QUEUE,                      /**< Invalid Enqueue Queue Interrupt */
184    e_QM_EX_CG_STATE_CHANGE                     /**< CG change state notification */
185} e_QmExceptions;
186
187/**************************************************************************//**
188 @Group         QM_init_grp QM (common) Initialization Unit
189
190 @Description   QM (common) Initialization Unit
191
192 @{
193*//***************************************************************************/
194
195/**************************************************************************//**
196 @Function      t_QmExceptionsCallback
197
198 @Description   Exceptions user callback routine, will be called upon an
199                exception passing the exception identification.
200
201 @Param[in]     h_App      - User's application descriptor.
202 @Param[in]     exception  - The exception.
203*//***************************************************************************/
204typedef void (t_QmExceptionsCallback) ( t_Handle              h_App,
205                                        e_QmExceptions        exception);
206
207/**************************************************************************//**
208 @Description    Frame's Type to poll
209*//***************************************************************************/
210typedef enum e_QmPortalPollSource {
211    e_QM_PORTAL_POLL_SOURCE_DATA_FRAMES = 0,    /**< Poll only data frames */
212    e_QM_PORTAL_POLL_SOURCE_CONTROL_FRAMES,     /**< Poll only control frames */
213    e_QM_PORTAL_POLL_SOURCE_BOTH                /**< Poll both */
214} e_QmPortalPollSource;
215
216/**************************************************************************//**
217 @Description   structure representing QM contextA of FQ initialization parameters
218                Note that this is only "space-holder" for the Context-A. The "real"
219                Context-A is described in each specific driver (E.g. FM driver
220                has its own Context-A API).
221*//***************************************************************************/
222typedef struct {
223    uint32_t    res[2];     /**< reserved size for context-a */
224} t_QmContextA;
225
226/**************************************************************************//**
227 @Description   structure representing QM contextB of FQ initialization parameters
228                Note that this is only "space-holder" for the Context-B. The "real"
229                Context-B is described in each specific driver (E.g. FM driver
230                has its own Context-B API).
231*//***************************************************************************/
232typedef  uint32_t   t_QmContextB;
233
234/**************************************************************************//**
235 @Description   structure representing QM initialization parameters
236*//***************************************************************************/
237typedef struct {
238    uint8_t                 guestId;                /**< QM Partition Id */
239
240    uintptr_t               baseAddress;            /**< Qm base address (virtual)
241                                                         NOTE: this parameter relevant only for BM in master mode ('guestId'=NCSW_MASTER_ID). */
242    uintptr_t               swPortalsBaseAddress;   /**< QM Software Portals Base Address (virtual) */
243    uint16_t                liodn;                  /**< This value is attached to every transaction initiated by QMan when accessing its private data structures */
244    uint32_t                totalNumOfFqids;        /**< Total number of frame-queue-ids in the system */
245    uint32_t                fqdMemPartitionId;      /**< FQD's mem partition id;
246                                                         NOTE: The memory partition must be non-cacheable and no-coherent area. */
247    uint32_t                pfdrMemPartitionId;     /**< PFDR's mem partition id;
248                                                         NOTE: The memory partition must be non-cacheable and no-coherent area. */
249    t_QmExceptionsCallback  *f_Exception;           /**< An application callback routine to handle exceptions.*/
250    t_Handle                h_App;                  /**< A handle to an application layer object; This handle will
251                                                         be passed by the driver upon calling the above callbacks */
252    int                     errIrq;                 /**< error interrupt line; NO_IRQ if interrupts not used */
253    uint32_t                partFqidBase;           /**< The first frame-queue-id dedicated to this partition.
254                                                         NOTE: this parameter relevant only when working with multiple partitions. */
255    uint32_t                partNumOfFqids;         /**< Number of frame-queue-ids dedicated to this partition.
256                                                         NOTE: this parameter relevant only when working with multiple partitions. */
257    uint16_t                partCgsBase;            /**< The first cgr dedicated to this partition.
258                                                         NOTE: this parameter relevant only when working with multiple partitions. */
259    uint16_t                partNumOfCgs;           /**< Number of cgr's dedicated to this partition.
260                                                         NOTE: this parameter relevant only when working with multiple partitions. */
261} t_QmParam;
262
263
264/**************************************************************************//**
265 @Function      QM_Config
266
267 @Description   Creates descriptor for the QM module.
268
269                The routine returns a handle (descriptor) to the QM object.
270                This descriptor must be passed as first parameter to all other
271                QM function calls.
272
273                No actual initialization or configuration of QM hardware is
274                done by this routine.
275
276 @Param[in]     p_QmParam   - Pointer to data structure of parameters
277
278 @Retval        Handle to the QM object, or NULL for Failure.
279*//***************************************************************************/
280t_Handle QM_Config(t_QmParam *p_QmParam);
281
282/**************************************************************************//**
283 @Function      QM_Init
284
285 @Description   Initializes the QM module
286
287 @Param[in]     h_Qm - A handle to the QM module
288
289 @Return        E_OK on success; Error code otherwise.
290*//***************************************************************************/
291t_Error QM_Init(t_Handle h_Qm);
292
293/**************************************************************************//**
294 @Function      QM_Free
295
296 @Description   Frees all resources that were assigned to the QM module.
297
298                Calling this routine invalidates the descriptor.
299
300 @Param[in]     h_Qm - A handle to the QM module
301
302 @Return        E_OK on success; Error code otherwise.
303*//***************************************************************************/
304t_Error QM_Free(t_Handle h_Qm);
305
306
307/**************************************************************************//**
308 @Group         QM_advanced_init_grp    QM (common) Advanced Configuration Unit
309
310 @Description   Configuration functions used to change default values.
311
312 @{
313*//***************************************************************************/
314
315/**************************************************************************//**
316 @Description   structure for defining DC portal ERN destination
317*//***************************************************************************/
318typedef struct t_QmDcPortalParams {
319    bool            sendToSw;
320    e_DpaaSwPortal  swPortalId;
321} t_QmDcPortalParams;
322
323
324/**************************************************************************//**
325 @Function      QM_ConfigRTFramesDepth
326
327 @Description   Change the run-time frames depth (i.e. the maximum total number
328                of frames that may be inside QM at a certain time) from its default
329                configuration [30000].
330
331 @Param[in]     h_Qm            - A handle to the QM module
332 @Param[in]     rtFramesDepth   - run-time max num of frames.
333
334 @Return        E_OK on success; Error code otherwise.
335
336 @Cautions      Allowed only following QM_Config() and before QM_Init().
337*//***************************************************************************/
338t_Error QM_ConfigRTFramesDepth(t_Handle h_Qm, uint32_t rtFramesDepth);
339
340/**************************************************************************//**
341 @Function      QM_ConfigPfdrThreshold
342
343 @Description   Change the pfdr threshold from its default
344                configuration [0].
345                An interrupt if enables is asserted when the number of PFDRs is below this threshold.
346
347 @Param[in]     h_Qm            - A handle to the QM module
348 @Param[in]     threshold       - threshold value.
349
350 @Return        E_OK on success; Error code otherwise.
351
352 @Cautions      Allowed only following QM_Config() and before QM_Init().
353*//***************************************************************************/
354t_Error QM_ConfigPfdrThreshold(t_Handle h_Qm, uint32_t threshold);
355
356/**************************************************************************//**
357 @Function      QM_ConfigSfdrReservationThreshold
358
359 @Description   Change the sfdr threshold from its default
360                configuration [0].
361
362 @Param[in]     h_Qm            - A handle to the QM module
363 @Param[in]     threshold       - threshold value.
364
365 @Return        E_OK on success; Error code otherwise.
366
367 @Cautions      Allowed only following QM_Config() and before QM_Init().
368*//***************************************************************************/
369t_Error QM_ConfigSfdrReservationThreshold(t_Handle h_Qm, uint32_t threshold);
370
371/**************************************************************************//**
372 @Function      QM_ConfigErrorRejectionNotificationDest
373
374 @Description   Change the destination of rejected frames for DC portals.
375                By default, depending on chip, some DC portals are set to reject
376                frames to HW and some to SW.
377
378 @Param[in]     h_Qm            - A handle to the QM module
379 @Param[in]     id              - DC Portal id.
380 @Param[in]     p_Params        - Destination parameters.
381
382 @Return        E_OK on success; Error code otherwise.
383
384 @Cautions      Allowed only following QM_Config() and before QM_Init().
385*//***************************************************************************/
386t_Error QM_ConfigErrorRejectionNotificationDest(t_Handle h_Qm, e_DpaaDcPortal id, t_QmDcPortalParams *p_Params);
387
388/** @} */ /* end of QM_advanced_init_grp group */
389/** @} */ /* end of QM_init_grp group */
390
391
392/**************************************************************************//**
393 @Group         QM_runtime_control_grp QM (common) Runtime Control Unit
394
395 @Description   QM (common) Runtime control unit API functions, definitions and enums.
396
397 @{
398*//***************************************************************************/
399
400/**************************************************************************//**
401 @Description   enum for defining QM counters
402*//***************************************************************************/
403typedef enum e_QmCounters {
404    e_QM_COUNTERS_SFDR_IN_USE = 0,          /**< Total Single Frame Descriptor Record (SFDR) currently in use */
405    e_QM_COUNTERS_PFDR_IN_USE,              /**< Total Packed Frame Descriptor Record (PFDR) currently in use */
406    e_QM_COUNTERS_PFDR_FREE_POOL            /**< Total Packed Frame Descriptor Record (PFDR) Free Pool Count in external memory */
407} e_QmCounters;
408
409/**************************************************************************//**
410 @Description   structure for returning revision information
411*//***************************************************************************/
412typedef struct t_QmRevisionInfo {
413    uint8_t         majorRev;               /**< Major revision */
414    uint8_t         minorRev;               /**< Minor revision */
415} t_QmRevisionInfo;
416
417/**************************************************************************//**
418 @Description   structure representing QM FQ-Range reservation parameters
419*//***************************************************************************/
420typedef struct t_QmRsrvFqrParams {
421    bool                useForce;       /**< TRUE - force reservation of specific fqids;
422                                             FALSE - reserve several fqids */
423    uint32_t            numOfFqids;     /**< number of fqids to be reserved. */
424    union{
425        struct {
426            uint32_t    align;          /**< alignment. will be used if useForce=FALSE */
427        } nonFrcQs;
428        struct {
429            uint32_t    fqid;           /**< the fqid base of the forced fqids. will be used if useForce=TRUE */
430        } frcQ;
431    } qs;
432} t_QmRsrvFqrParams;
433
434/**************************************************************************//**
435 @Description   structure representing QM Error information
436*//***************************************************************************/
437typedef struct t_QmErrorInfo {
438    bool                portalValid;
439    bool                hwPortal;
440    e_DpaaSwPortal      swPortalId;         /**< Sw Portal id */
441    e_DpaaDcPortal      dcpId;              /**< Dcp (hw Portal) id */
442    bool                fqidValid;
443    uint32_t            fqid;
444} t_QmErrorInfo;
445
446
447/**************************************************************************//**
448 @Function      QM_ReserveQueues
449
450 @Description   Request to Reserved queues for future use.
451
452 @Param[in]     h_Qm            - A handle to the QM Module.
453 @Param[in]     p_QmFqrParams   - A structure of parameters for defining the
454                                  desired queues parameters.
455 @Param[out]    p_BaseFqid      - base-fqid on success; '0' code otherwise.
456
457 @Return        E_OK on success;
458
459 @Cautions      Allowed only after QM_Init().
460*//***************************************************************************/
461t_Error QM_ReserveQueues(t_Handle h_Qm, t_QmRsrvFqrParams *p_QmFqrParams, uint32_t  *p_BaseFqid);
462
463#if (defined(DEBUG_ERRORS) && (DEBUG_ERRORS > 0))
464/**************************************************************************//**
465 @Function      QM_DumpRegs
466
467 @Description   Dumps all QM registers
468
469 @Param[in]     h_Qm        - A handle to the QM Module.
470
471 @Return        E_OK on success;
472
473 @Cautions      Allowed only after QM_Init().
474*//***************************************************************************/
475t_Error QM_DumpRegs(t_Handle h_Qm);
476#endif /* (defined(DEBUG_ERRORS) && ... */
477
478/**************************************************************************//**
479 @Function      QM_SetException
480
481 @Description   Calling this routine enables/disables the specified exception.
482
483 @Param[in]     h_Qm        - A handle to the QM Module.
484 @Param[in]     exception   - The exception to be selected.
485 @Param[in]     enable      - TRUE to enable interrupt, FALSE to mask it.
486
487 @Return        E_OK on success; Error code otherwise.
488
489 @Cautions      Allowed only following QM_Init().
490                This routine should NOT be called from guest-partition
491                (i.e. guestId != NCSW_MASTER_ID)
492*//***************************************************************************/
493t_Error QM_SetException(t_Handle h_Qm, e_QmExceptions exception, bool enable);
494
495/**************************************************************************//**
496 @Function      QM_ErrorIsr
497
498 @Description   QM interrupt-service-routine for errors.
499
500 @Param[in]     h_Qm            - A handle to the QM module
501
502 @Cautions      Allowed only following QM_Init().
503                This routine should NOT be called from guest-partition
504                (i.e. guestId != NCSW_MASTER_ID)
505*//***************************************************************************/
506void    QM_ErrorIsr(t_Handle h_Qm);
507
508/**************************************************************************//**
509 @Function      QM_GetErrorInformation
510
511 @Description   Reads the last error information.
512
513 @Param[in]     h_Qm        - A handle to the QM Module.
514 @Param[out]    p_errInfo   - the information will be loaded to this struct.
515
516 @Return        E_OK on success; Error code otherwise.
517
518 @Cautions      Allowed only following QM_Init().
519                This routine should NOT be called from guest-partition
520                (i.e. guestId != NCSW_MASTER_ID)
521*//***************************************************************************/
522t_Error QM_GetErrorInformation(t_Handle h_Qm, t_QmErrorInfo *p_errInfo);
523
524/**************************************************************************//**
525 @Function      QM_GetCounter
526
527 @Description   Reads one of the QM counters.
528
529 @Param[in]     h_Qm        - A handle to the QM Module.
530 @Param[in]     counter     - The requested counter.
531
532 @Return        Counter's current value.
533
534 @Cautions      Allowed only following QM_Init().
535*//***************************************************************************/
536uint32_t    QM_GetCounter(t_Handle h_Qm, e_QmCounters counter);
537
538/**************************************************************************//**
539 @Function      QM_GetRevision
540
541 @Description   Returns the QM revision
542
543 @Param[in]     h_Qm                A handle to a QM Module.
544 @Param[out]    p_QmRevisionInfo    A structure of revision information parameters.
545
546 @Return        None.
547
548 @Cautions      Allowed only following QM_Init().
549*//***************************************************************************/
550t_Error QM_GetRevision(t_Handle h_Qm, t_QmRevisionInfo *p_QmRevisionInfo);
551
552/** @} */ /* end of QM_runtime_control_grp group */
553
554
555/**************************************************************************//**
556 @Group         QM_runtime_data_grp QM (common) Runtime Data Unit
557
558 @Description   QM (common) Runtime data unit API functions, definitions and enums.
559
560 @{
561*//***************************************************************************/
562
563/**************************************************************************//**
564 @Function      QM_Poll
565
566 @Description   Poll frames from QM.
567
568 @Param[in]     h_Qm            - A handle to the QM module
569 @Param[in]     source          - The selected frames type to poll
570
571 @Return        E_OK on success; Error code otherwise.
572
573 @Cautions      Allowed only following QM_Init().
574*//***************************************************************************/
575t_Error QM_Poll(t_Handle h_Qm, e_QmPortalPollSource source);
576
577/** @} */ /* end of QM_runtime_data_grp group */
578/** @} */ /* end of QM_lib_grp group */
579
580
581/**************************************************************************//**
582 @Group         QM_portal_grp QM-Portal API
583
584 @Description   QM common API functions, definitions and enums.
585
586 @{
587*//***************************************************************************/
588
589/**************************************************************************//**
590 @Group         QM_portal_init_grp QM-Portal Initialization Unit
591
592 @Description   QM-Portal Initialization Unit
593
594 @{
595*//***************************************************************************/
596
597/**************************************************************************//**
598 @Description   structure representing QM-Portal Stash parameters
599*//***************************************************************************/
600typedef struct {
601    uint8_t                         stashDestQueue;         /**< This value is used to direct all stashing transactions initiated on behalf of this software portal
602                                                                 to the specific Stashing Request Queues (SRQ) */
603    uint8_t                         eqcr;                   /**< If 0, disabled. If 1, for every EQCR entry consumed by QMan a new stash transaction is performed.
604                                                                 If 2-7, after 2-7 EQCR entries being consumed by QMAN a new stash transaction is performed. */
605    bool                            eqcrHighPri;            /**< EQCR entry stash transactions for this software portal will be signaled with higher priority. */
606    bool                            dqrr;                   /**< DQRR entry stash enable/disable */
607    uint16_t                        dqrrLiodn;              /**< This value is attached to every transaction initiated by QMan when performing DQRR entry or EQCR_CI stashing
608                                                                 on behalf of this software portal */
609    bool                            dqrrHighPri;            /**< DQRR entry stash transactions for this software portal will be signaled with higher priority. */
610    bool                            fdFq;                   /**< Dequeued Frame Data, Annotation, and FQ Context Stashing enable/disable */
611    uint16_t                        fdFqLiodn;              /**< This value is attached to every transaction initiated by QMan when performing dequeued frame data and
612                                                                 annotation stashing, or FQ context stashing on behalf of this software portal */
613    bool                            fdFqHighPri;            /**< Dequeued frame data, annotation, and FQ context stash transactions for this software portal will be signaled
614                                                                 with higher priority. */
615    bool                            fdFqDrop;               /**< If True, Dequeued frame data, annotation, and FQ context stash transactions for this software portal will be dropped
616                                                                          by QMan if the target SRQ is almost full, to prevent QMan sequencer stalling. Stash transactions that are
617                                                                          dropped will result in a fetch from main memory when a core reads the addressed coherency granule.
618                                                                 If FALSE, Dequeued frame data, annotation, and FQ context stash transactions for this software portal will never be
619                                                                           dropped by QMan. If the target SRQ is full a sequencer will stall until each stash transaction can be completed. */
620} t_QmPortalStashParam;
621
622/**************************************************************************//**
623 @Description   structure representing QM-Portal initialization parameters
624*//***************************************************************************/
625typedef struct {
626    uintptr_t                       ceBaseAddress;          /**< Cache-enabled base address (virtual) */
627    uintptr_t                       ciBaseAddress;          /**< Cache-inhibited base address (virtual) */
628    t_Handle                        h_Qm;                   /**< Qm Handle */
629    e_DpaaSwPortal                  swPortalId;             /**< Portal id */
630    int                             irq;                    /**< portal interrupt line; used only if useIrq set to TRUE */
631    uint16_t                        fdLiodnOffset;                /**< liodn to be used for all frames enqueued via this software portal */
632    t_QmReceivedFrameCallback       *f_DfltFrame;           /**< this callback will be called unless specific callback assigned to the FQ*/
633    t_QmRejectedFrameCallback       *f_RejectedFrame;       /**< this callback will be called for rejected frames. */
634    t_Handle                        h_App;                  /**< a handle to the upper layer; It will be passed by the driver upon calling the CB */
635} t_QmPortalParam;
636
637
638/**************************************************************************//**
639 @Function      QM_PORTAL_Config
640
641 @Description   Creates descriptor for a QM-Portal module.
642
643                The routine returns a handle (descriptor) to a QM-Portal object.
644                This descriptor must be passed as first parameter to all other
645                QM-Portal function calls.
646
647                No actual initialization or configuration of QM-Portal hardware is
648                done by this routine.
649
650 @Param[in]     p_QmPortalParam   - Pointer to data structure of parameters
651
652 @Retval        Handle to a QM-Portal object, or NULL for Failure.
653*//***************************************************************************/
654t_Handle QM_PORTAL_Config(t_QmPortalParam *p_QmPortalParam);
655
656/**************************************************************************//**
657 @Function      QM_PORTAL_Init
658
659 @Description   Initializes a QM-Portal module
660
661 @Param[in]     h_QmPortal - A handle to a QM-Portal module
662
663 @Return        E_OK on success; Error code otherwise.
664*//***************************************************************************/
665t_Error QM_PORTAL_Init(t_Handle h_QmPortal);
666
667/**************************************************************************//**
668 @Function      QM_PORTAL_Free
669
670 @Description   Frees all resources that were assigned to a QM-Portal module.
671
672                Calling this routine invalidates the descriptor.
673
674 @Param[in]     h_QmPortal - A handle to a QM-Portal module
675
676 @Return        E_OK on success; Error code otherwise.
677*//***************************************************************************/
678t_Error QM_PORTAL_Free(t_Handle h_QmPortal);
679
680/**************************************************************************//**
681 @Group         QM_portal_advanced_init_grp    QM-Portal Advanced Configuration Unit
682
683 @Description   Configuration functions used to change default values.
684
685 @{
686*//***************************************************************************/
687
688/**************************************************************************//**
689 @Function      QM_PORTAL_ConfigDcaMode
690
691 @Description   Change the Discrate Consumption Acknowledge mode
692                from its default configuration [FALSE].
693
694 @Param[in]     h_QmPortal  - A handle to a QM-Portal module
695 @Param[in]     enable      - Enable/Disable DCA mode
696
697 @Return        E_OK on success; Error code otherwise.
698
699 @Cautions      Allowed only following QM_PORTAL_Config() and before QM_PORTAL_Init().
700*//***************************************************************************/
701t_Error QM_PORTAL_ConfigDcaMode(t_Handle h_QmPortal, bool enable);
702
703/**************************************************************************//**
704 @Function      QM_PORTAL_ConfigStash
705
706 @Description   Config the portal to active stash mode.
707
708 @Param[in]     h_QmPortal      - A handle to a QM-Portal module
709 @Param[in]     p_StashParams   - Pointer to data structure of parameters
710
711 @Return        E_OK on success; Error code otherwise.
712
713 @Cautions      Allowed only following QM_PORTAL_Config() and before QM_PORTAL_Init().
714*//***************************************************************************/
715t_Error QM_PORTAL_ConfigStash(t_Handle h_QmPortal, t_QmPortalStashParam *p_StashParams);
716
717
718/**************************************************************************//**
719 @Function      QM_PORTAL_ConfigPullMode
720
721 @Description   Change the Pull Mode from its default configuration [FALSE].
722
723 @Param[in]     h_QmPortal  - A handle to a QM-Portal module
724 @Param[in]     pullMode    - When TRUE, the Portal will work in pull mode.
725
726 @Return        E_OK on success; Error code otherwise.
727
728 @Cautions      Allowed only following QM_PORTAL_Config() and before QM_PORTAL_Init().
729*//***************************************************************************/
730t_Error QM_PORTAL_ConfigPullMode(t_Handle h_QmPortal, bool pullMode);
731
732/** @} */ /* end of QM_portal_advanced_init_grp group */
733/** @} */ /* end of QM_portal_init_grp group */
734
735
736/**************************************************************************//**
737 @Group         QM_portal_runtime_control_grp QM-Portal Runtime Control Unit
738
739 @Description   QM-Portal Runtime control unit API functions, definitions and enums.
740
741 @{
742*//***************************************************************************/
743
744/**************************************************************************//**
745 @Function      QM_PORTAL_AddPoolChannel
746
747 @Description   Adding the pool channel to the SW-Portal's scheduler.
748                the sw-portal will get frames that came from the pool channel.
749
750 @Param[in]     h_QmPortal      - A handle to a QM-Portal module
751 @Param[in]     poolChannelId   - Pool channel id. must between '0' to QM_MAX_NUM_OF_POOL_CHANNELS
752
753 @Return        E_OK on success; Error code otherwise.
754
755 @Cautions      Allowed only following QM_PORTAL_Init().
756*//***************************************************************************/
757t_Error QM_PORTAL_AddPoolChannel(t_Handle h_QmPortal, uint8_t poolChannelId);
758
759/** @} */ /* end of QM_portal_runtime_control_grp group */
760
761
762/**************************************************************************//**
763 @Group         QM_portal_runtime_data_grp QM-Portal Runtime Data Unit
764
765 @Description   QM-Portal Runtime data unit API functions, definitions and enums.
766
767 @{
768*//***************************************************************************/
769
770/**************************************************************************//**
771 @Description structure representing QM Portal Frame Info
772*//***************************************************************************/
773typedef struct t_QmPortalFrameInfo {
774    t_Handle    h_App;
775    t_Handle    h_QmFqr;
776    uint32_t    fqidOffset;
777    t_DpaaFD    frame;
778} t_QmPortalFrameInfo;
779
780/**************************************************************************//**
781 @Function      QM_PORTAL_Poll
782
783 @Description   Poll frames from the specified sw-portal.
784
785 @Param[in]     h_QmPortal      - A handle to a QM-Portal module
786 @Param[in]     source          - The selected frames type to poll
787
788 @Return        E_OK on success; Error code otherwise.
789
790 @Cautions      Allowed only following QM_PORTAL_Init().
791*//***************************************************************************/
792t_Error QM_PORTAL_Poll(t_Handle h_QmPortal, e_QmPortalPollSource source);
793
794/**************************************************************************//**
795 @Function      QM_PORTAL_PollFrame
796
797 @Description   Poll frames from the specified sw-portal. will poll only data frames
798
799 @Param[in]     h_QmPortal      - A handle to a QM-Portal module
800 @Param[out]    p_frameInfo     - A structure to hold the dequeued frame information
801
802 @Return        E_OK on success; Error code otherwise.
803
804 @Cautions      Allowed only following QM_PORTAL_Init().
805*//***************************************************************************/
806t_Error QM_PORTAL_PollFrame(t_Handle h_QmPortal, t_QmPortalFrameInfo *p_frameInfo);
807
808
809/** @} */ /* end of QM_portal_runtime_data_grp group */
810/** @} */ /* end of QM_portal_grp group */
811
812
813/**************************************************************************//**
814 @Group         QM_fqr_grp QM Frame-Queue-Range API
815
816 @Description   QM-FQR API functions, definitions and enums.
817
818 @{
819*//***************************************************************************/
820
821/**************************************************************************//**
822 @Group         QM_fqr_init_grp QM-FQR Initialization Unit
823
824 @Description   QM-FQR Initialization Unit
825
826 @{
827*//***************************************************************************/
828
829
830/**************************************************************************//**
831 @Description structure representing QM FQ-Range congestion group parameters
832*//***************************************************************************/
833typedef struct {
834    t_Handle    h_QmCg;                     /**< A handle to the congestion group. */
835    int8_t      overheadAccountingLength;   /**< For each frame add this number for CG calculation
836                                                 (may be negative), if 0 - disable feature */
837    uint32_t    fqTailDropThreshold;        /**< if not "0" - enable tail drop on this FQR */
838} t_QmFqrCongestionAvoidanceParams;
839
840/**************************************************************************//**
841 @Description   structure representing QM FQ-Range initialization parameters
842*//***************************************************************************/
843typedef struct {
844    t_Handle            h_Qm;           /**< A handle to a QM module */
845    t_Handle            h_QmPortal;     /**< A handle to a QM Portal Module;
846                                             will be used only for Init and Free routines;
847                                             NOTE : if NULL, assuming affinity */
848    bool                initParked;     /**< This FQ-Range will be initialize in park state (un-schedule) */
849    bool                holdActive;     /**< This FQ-Range can be parked (un-schedule);
850                                             This affects only on queues destined to software portals*/
851    bool                preferInCache;  /**< Prefer this FQ-Range to be in QMAN's internal cache for all states */
852    bool                useContextAForStash;/**< This FQ-Range will use context A for stash */
853    union {
854        struct {
855            uint8_t     frameAnnotationSize;/**< Size of Frame Annotation to be stashed */
856            uint8_t     frameDataSize;      /**< Size of Frame Data to be stashed. */
857            uint8_t     fqContextSize;      /**< Size of FQ context to be stashed. */
858            uint64_t    fqContextAddr;      /**< 40 bit memory address containing the FQ context information to be stashed;
859                                                 Must be cacheline-aligned */
860        } stashingParams;
861        t_QmContextA    *p_ContextA;    /**< context-A field to be written in the FQ structure */
862    };
863    t_QmContextB        *p_ContextB;    /**< context-B field to be written in the FQ structure;
864                                             Note that this field may be used for Tx queues only! */
865    e_QmFQChannel       channel;        /**< Qm Channel */
866    uint8_t             wq;             /**< Work queue within the channel */
867    bool                shadowMode;     /**< If TRUE, useForce MUST set to TRUE and numOfFqids MUST set to '1' */
868    uint32_t            numOfFqids;     /**< number of fqids to be allocated*/
869    bool                useForce;       /**< TRUE - force allocation of specific fqids;
870                                             FALSE - allocate several fqids */
871    union{
872        struct {
873            uint32_t    align;          /**< alignment. will be used if useForce=FALSE */
874        } nonFrcQs;
875        struct {
876            uint32_t    fqid;           /**< the fqid base of the forced fqids. will be used if useForce=TRUE */
877        } frcQ;
878    } qs;
879    bool                congestionAvoidanceEnable;
880                                        /**< TRUE to enable congestion avoidance mechanism */
881    t_QmFqrCongestionAvoidanceParams    congestionAvoidanceParams;
882                                        /**< Parameters for congestion avoidance */
883} t_QmFqrParams;
884
885
886/**************************************************************************//**
887 @Function      QM_FQR_Create
888
889 @Description   Initializing and enabling a Frame-Queue-Range.
890                This routine should be called for adding an FQR.
891
892 @Param[in]     p_QmFqrParams   - A structure of parameters for defining the
893                                  desired queues parameters.
894
895 @Return        A handle to the initialized FQR on success; NULL code otherwise.
896
897 @Cautions      Allowed only following QM_Init().
898*//***************************************************************************/
899t_Handle QM_FQR_Create(t_QmFqrParams *p_QmFqrParams);
900
901/**************************************************************************//**
902 @Function      QM_FQR_Free
903
904 @Description   Deleting and free all resources of an initialized FQR.
905
906 @Param[in]     h_QmFqr         - A handle to a QM-FQR Module.
907
908 @Return        E_OK on success; Error code otherwise.
909
910 @Cautions      Allowed only following QM_Init() and QM_FQR_Create() for this FQR.
911*//***************************************************************************/
912t_Error QM_FQR_Free(t_Handle h_QmFqr);
913
914/**************************************************************************//**
915 @Function      QM_FQR_FreeWDrain
916
917 @Description   Deleting and free all resources of an initialized FQR
918                with the option of draining.
919
920 @Param[in]     h_QmFqr         - A handle to a QM-FQR Module.
921 @Param[in]     f_CompletionCB  - Pointer to a completion callback to be used in non-blocking mode.
922 @Param[in]     deliverFrame    - TRUE for deliver the drained frames to the user;
923                                  FALSE for not deliver the frames.
924 @Param[in]     f_CallBack      - Pointer to a callback to handle the delivered frames.
925 @Param[in]     h_App           - User's application descriptor.
926
927 @Return        E_OK on success; Error code otherwise.
928
929 @Cautions      Allowed only following QM_Init() and QM_FQR_Create() for this FQR.
930*//***************************************************************************/
931t_Error QM_FQR_FreeWDrain(t_Handle                     h_QmFqr,
932                          t_QmFqrDrainedCompletionCB   *f_CompletionCB,
933                          bool                         deliverFrame,
934                          t_QmReceivedFrameCallback    *f_CallBack,
935                          t_Handle                     h_App);
936
937/** @} */ /* end of QM_fqr_init_grp group */
938
939
940/**************************************************************************//**
941 @Group         QM_fqr_runtime_control_grp QM-FQR Runtime Control Unit
942
943 @Description   QM-FQR Runtime control unit API functions, definitions and enums.
944
945 @{
946*//***************************************************************************/
947
948/**************************************************************************//**
949 @Description   enum for defining QM-FQR counters
950*//***************************************************************************/
951typedef enum e_QmFqrCounters {
952    e_QM_FQR_COUNTERS_FRAME = 0,        /**< Total number of frames on this frame queue */
953    e_QM_FQR_COUNTERS_BYTE              /**< Total number of bytes in all frames on this frame queue */
954} e_QmFqrCounters;
955
956/**************************************************************************//**
957 @Function      QM_FQR_RegisterCB
958
959 @Description   Register a callback routine to be called when a frame comes from this FQ-Range
960
961 @Param[in]     h_QmFqr         - A handle to a QM-FQR Module.
962 @Param[in]     f_CallBack      - An application callback
963 @Param[in]     h_App           - User's application descriptor
964
965 @Return        E_OK on success; Error code otherwise.
966
967 @Cautions      Allowed only following QM_FQR_Create().
968*//***************************************************************************/
969t_Error QM_FQR_RegisterCB(t_Handle h_QmFqr, t_QmReceivedFrameCallback *f_CallBack, t_Handle h_App);
970
971/**************************************************************************//**
972 @Function      QM_FQR_Resume
973
974 @Description   Request to Re-Schedule this Fqid.
975
976 @Param[in]     h_QmFqr         - A handle to a QM-FQR Module.
977 @Param[in]     h_QmPortal      - A handle to a QM Portal Module;
978                                  NOTE : if NULL, assuming affinity.
979 @Param[in]     fqidOffset      - Fqid offset within the FQ-Range.
980
981 @Return        E_OK on success; Error code otherwise.
982
983 @Cautions      Allowed only following QM_FQR_Create().
984*//***************************************************************************/
985t_Error QM_FQR_Resume(t_Handle h_QmFqr, t_Handle h_QmPortal, uint32_t fqidOffset);
986
987/**************************************************************************//**
988 @Function      QM_FQR_Suspend
989
990 @Description   Request to Un-Schedule this Fqid.
991
992 @Param[in]     h_QmFqr         - A handle to a QM-FQR Module.
993 @Param[in]     h_QmPortal      - A handle to a QM Portal Module;
994                                  NOTE : if NULL, assuming affinity.
995 @Param[in]     fqidOffset      - Fqid offset within the FQ-Range.
996
997 @Return        E_OK on success; Error code otherwise.
998
999 @Cautions      Allowed only following QM_FQR_Create().
1000*//***************************************************************************/
1001t_Error QM_FQR_Suspend(t_Handle h_QmFqr, t_Handle h_QmPortal, uint32_t fqidOffset);
1002
1003/**************************************************************************//**
1004 @Function      QM_FQR_GetFqid
1005
1006 @Description   Returned the Fqid base of the FQ-Range
1007
1008 @Param[in]     h_QmFqr         - A handle to a QM-FQR Module.
1009
1010 @Return        Fqid base.
1011
1012 @Cautions      Allowed only following QM_FQR_Create().
1013*//***************************************************************************/
1014uint32_t QM_FQR_GetFqid(t_Handle h_QmFqr);
1015
1016/**************************************************************************//**
1017 @Function      QM_FQR_GetCounter
1018
1019 @Description   Reads one of the QM-FQR counters.
1020
1021 @Param[in]     h_QmFqr         - A handle to a QM-FQR Module.
1022 @Param[in]     h_QmPortal      - A handle to a QM Portal Module;
1023                                  NOTE : if NULL, assuming affinity.
1024 @Param[in]     fqidOffset      - Fqid offset within the FQ-Range.
1025 @Param[in]     counter         - The requested counter.
1026
1027 @Return        Counter's current value.
1028
1029 @Cautions      Allowed only following QM_FQR_Create().
1030*//***************************************************************************/
1031uint32_t QM_FQR_GetCounter(t_Handle h_QmFqr, t_Handle h_QmPortal, uint32_t fqidOffset, e_QmFqrCounters counter);
1032
1033/** @} */ /* end of QM_fqr_runtime_control_grp group */
1034
1035
1036/**************************************************************************//**
1037 @Group         QM_fqr_runtime_data_grp QM-FQR Runtime Data Unit
1038
1039 @Description   QM-FQR Runtime data unit API functions, definitions and enums.
1040
1041 @{
1042*//***************************************************************************/
1043
1044/**************************************************************************//**
1045 @Function      QM_FQR_Enqueue
1046
1047 @Description   Enqueue the frame into the FQ to be transmitted.
1048
1049 @Param[in]     h_QmFqr         - A handle to a QM-FQR Module.
1050 @Param[in]     h_QmPortal      - A handle to a QM Portal Module;
1051                                  NOTE : if NULL, assuming affinity.
1052 @Param[in]     fqidOffset      - Fqid offset within the FQ-Range.
1053 @Param[in]     p_Frame         - Pointer to the frame to be enqueued.
1054
1055 @Return        E_OK on success; Error code otherwise.
1056
1057 @Cautions      Allowed only following QM_FQR_Create().
1058*//***************************************************************************/
1059t_Error QM_FQR_Enqueue(t_Handle h_QmFqr, t_Handle h_QmPortal, uint32_t fqidOffset, t_DpaaFD *p_Frame);
1060
1061/**************************************************************************//**
1062 @Function      QM_FQR_PullFrame
1063
1064 @Description   Perform a Pull command.
1065
1066 @Param[in]     h_QmFqr         - A handle to a QM-FQR Module.
1067 @Param[in]     h_QmPortal      - A handle to a QM Portal Module;
1068                                  NOTE : if NULL, assuming affinity.
1069 @Param[in]     fqidOffset      - Fqid offset within the FQ-Range.
1070 @Param[out]    p_Frame         - The Received Frame
1071
1072 @Return        E_OK on success; Error code otherwise.
1073
1074 @Cautions      Allowed only following QM_PORTAL_Init().
1075*//***************************************************************************/
1076t_Error QM_FQR_PullFrame(t_Handle h_QmFqr, t_Handle h_QmPortal, uint32_t fqidOffset, t_DpaaFD *p_Frame);
1077
1078
1079/** @} */ /* end of QM_fqr_runtime_data_grp group */
1080/** @} */ /* end of QM_fqr_grp group */
1081
1082
1083/**************************************************************************//**
1084 @Group         QM_cg_grp QM Congestion Group API
1085
1086 @Description   QM-CG API functions, definitions and enums.
1087
1088 @{
1089*//***************************************************************************/
1090
1091/**************************************************************************//**
1092 @Group         QM_cg_init_grp QM-Congestion Group Initialization Unit
1093
1094 @Description   QM-CG Initialization Unit
1095
1096 @{
1097*//***************************************************************************/
1098
1099/**************************************************************************//**
1100 @Description   structure representing QM CG WRED curve
1101*//***************************************************************************/
1102typedef struct t_QmCgWredCurve {
1103    uint32_t    maxTh;                  /**< minimum threshold - below this level
1104                                             all packets are rejected (approximated
1105                                             to be expressed as x*2^y due to HW
1106                                             implementation)*/
1107    uint32_t    minTh;                  /**< minimum threshold - below this level
1108                                             all packets are accepted (approximated
1109                                             due to HW implementation)*/
1110    uint8_t    probabilityDenominator;  /**< 1-64, the fraction of packets dropped
1111                                             when the average queue depth is at the
1112                                             maximum threshold.(approximated due to HW
1113                                             implementation). */
1114} t_QmCgWredCurve;
1115
1116/**************************************************************************//**
1117 @Description   structure representing QM CG WRED parameters
1118*//***************************************************************************/
1119typedef struct t_QmCgWredParams {
1120    bool            enableGreen;
1121    t_QmCgWredCurve greenCurve;
1122    bool            enableYellow;
1123    t_QmCgWredCurve yellowCurve;
1124    bool            enableRed;
1125    t_QmCgWredCurve redCurve;
1126} t_QmCgWredParams;
1127
1128/**************************************************************************//**
1129 @Description   structure representing QM CG configuration parameters
1130*//***************************************************************************/
1131typedef struct t_QmCgParams {
1132    t_Handle                h_Qm;           /**< A handle to a QM module */
1133    t_Handle                h_QmPortal;     /**< A handle to a QM Portal Module;
1134                                                 will be used for Init, Free and as
1135                                                 an interrupt destination for cg state
1136                                                 change (if CgStateChangeEnable = TRUE) */
1137    bool                    frameCount;     /**< TRUE for frame count, FALSE - byte count */
1138    bool                    wredEnable;     /**< if TRUE - WRED enabled. Each color is enabled independently
1139                                                 so that some colors may use WRED, but others may use
1140                                                 Tail drop - if enabled, or none.  */
1141    t_QmCgWredParams        wredParams;     /**< WRED parameters, relevant if wredEnable = TRUE*/
1142    bool                    tailDropEnable; /**< if TRUE - Tail drop enabled */
1143    uint32_t                threshold;      /**< If Tail drop - used as Tail drop threshold, otherwise
1144                                                 'threshold' may still be used to receive notifications
1145                                                 when threshold is passed. If threshold and f_Exception
1146                                                 are set, interrupts are set defaultly by driver. */
1147    bool                    notifyDcPortal; /**< Relevant if this CG receives enqueues from a direct portal
1148                                                 e_DPAA_DCPORTAL0 or e_DPAA_DCPORTAL1. TRUE to notify
1149                                                 the DC portal, FALSE to notify this SW portal. */
1150    e_DpaaDcPortal          dcPortalId;     /**< relevant if notifyDcPortal=TRUE - DC Portal id */
1151    t_QmExceptionsCallback  *f_Exception;   /**< relevant and mandatory if threshold is configured and
1152                                                 notifyDcPortal = FALSE. If threshold and f_Exception
1153                                                 are set, interrupts are set defaultly by driver */
1154    t_Handle                h_App;          /**< A handle to the application layer, will be passed as
1155                                                 argument to f_Exception */
1156} t_QmCgParams;
1157
1158
1159/**************************************************************************//**
1160 @Function      QM_CG_Create
1161
1162 @Description   Create and configure a congestion Group.
1163
1164 @Param[in]     p_CgParams      - CG parameters
1165
1166 @Return        A handle to the CG module
1167
1168 @Cautions      Allowed only following QM_Init().
1169*//***************************************************************************/
1170t_Handle    QM_CG_Create(t_QmCgParams *p_CgParams);
1171
1172/**************************************************************************//**
1173 @Function      QM_CG_Free
1174
1175 @Description   Deleting and free all resources of an initialized CG.
1176
1177 @Param[in]     h_QmCg         - A handle to a QM-CG Module.
1178
1179 @Return        E_OK on success; Error code otherwise.
1180
1181 @Cautions      Allowed only following QM_Init() and QM_CR_Create() for this CG.
1182*//***************************************************************************/
1183t_Error QM_CG_Free(t_Handle h_QmCg);
1184
1185/** @} */ /* end of QM_cg_init_grp group */
1186
1187
1188/**************************************************************************//**
1189 @Group         QM_cg_runtime_control_grp QM-CG Runtime Control Unit
1190
1191 @Description   QM-CG Runtime control unit API functions, definitions and enums.
1192
1193 @{
1194*//***************************************************************************/
1195
1196/**************************************************************************//**
1197 @Description   structure representing QM CG WRED colors
1198*//***************************************************************************/
1199typedef enum e_QmCgColor {
1200    e_QM_CG_COLOR_GREEN,
1201    e_QM_CG_COLOR_YELLOW,
1202    e_QM_CG_COLOR_RED
1203} e_QmCgColor;
1204
1205/**************************************************************************//**
1206 @Description   structure representing QM CG modification parameters
1207*//***************************************************************************/
1208typedef struct t_QmCgModifyWredParams {
1209    e_QmCgColor         color;
1210    bool                enable;
1211    t_QmCgWredCurve     wredParams;
1212} t_QmCgModifyWredParams;
1213
1214
1215/**************************************************************************//**
1216 @Function      QM_CG_SetException
1217
1218 @Description   Set CG exception.
1219
1220 @Param[in]     h_QmCg         - A handle to a QM-CG Module.
1221 @Param[in]     exception      - exception enum
1222 @Param[in]     enable         - TRUE to enable, FALSE to disable.
1223
1224 @Return        E_OK on success; Error code otherwise.
1225
1226 @Cautions      Allowed only following QM_Init() and QM_CG_Create() for this CG.
1227*//***************************************************************************/
1228t_Error QM_CG_SetException(t_Handle h_QmCg, e_QmExceptions exception, bool enable);
1229
1230/**************************************************************************//**
1231 @Function      QM_CG_ModifyWredCurve
1232
1233 @Description   Change WRED curve parameters for a selected color.
1234                Note that this routine may be called only for valid CG's that
1235                already have been configured for WRED, and only need a change
1236                in the WRED parameters.
1237
1238 @Param[in]     h_QmCg              - A handle to a QM-CG Module.
1239 @Param[in]     p_QmCgModifyParams  - A structure of new WRED parameters.
1240
1241 @Return        E_OK on success; Error code otherwise.
1242
1243 @Cautions      Allowed only following QM_Init() and QM_CG_Create() for this CG.
1244*//***************************************************************************/
1245t_Error QM_CG_ModifyWredCurve(t_Handle h_QmCg, t_QmCgModifyWredParams *p_QmCgModifyParams);
1246
1247/**************************************************************************//**
1248 @Function      QM_CG_ModifyTailDropThreshold
1249
1250 @Description   Change WRED curve parameters for a selected color.
1251                Note that this routine may be called only for valid CG's that
1252                already have been configured for tail drop, and only need a change
1253                in the threshold value.
1254
1255 @Param[in]     h_QmCg              - A handle to a QM-CG Module.
1256 @Param[in]     threshold           - New threshold.
1257
1258 @Return        E_OK on success; Error code otherwise.
1259
1260 @Cautions      Allowed only following QM_Init() and QM_CG_Create() for this CG.
1261*//***************************************************************************/
1262t_Error QM_CG_ModifyTailDropThreshold(t_Handle h_QmCg, uint32_t threshold);
1263
1264
1265/** @} */ /* end of QM_cg_runtime_control_grp group */
1266/** @} */ /* end of QM_cg_grp group */
1267/** @} */ /* end of QM_grp group */
1268
1269
1270#endif /* __QM_EXT_H */
1271