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 *//***************************************************************************/
75 typedef 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 *//***************************************************************************/
91 typedef t_Error (t_QmFqrDrainedCompletionCB)(t_Handle h_App,
92                                              t_Handle h_QmFqr);
93 
94 /**************************************************************************//**
95  @Description   QM Rejection code enum
96 *//***************************************************************************/
97 typedef 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 *//***************************************************************************/
116 typedef 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 *//***************************************************************************/
147 typedef 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 *//***************************************************************************/
167 typedef 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 *//***************************************************************************/
204 typedef void (t_QmExceptionsCallback) ( t_Handle              h_App,
205                                         e_QmExceptions        exception);
206 
207 /**************************************************************************//**
208  @Description    Frame's Type to poll
209 *//***************************************************************************/
210 typedef 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 *//***************************************************************************/
222 typedef 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 *//***************************************************************************/
232 typedef  uint32_t   t_QmContextB;
233 
234 /**************************************************************************//**
235  @Description   structure representing QM initialization parameters
236 *//***************************************************************************/
237 typedef 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 *//***************************************************************************/
280 t_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 *//***************************************************************************/
291 t_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 *//***************************************************************************/
304 t_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 *//***************************************************************************/
318 typedef 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 *//***************************************************************************/
338 t_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 *//***************************************************************************/
354 t_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 *//***************************************************************************/
369 t_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 *//***************************************************************************/
386 t_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 *//***************************************************************************/
403 typedef 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 *//***************************************************************************/
412 typedef 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 *//***************************************************************************/
420 typedef 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 *//***************************************************************************/
437 typedef 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 *//***************************************************************************/
461 t_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 *//***************************************************************************/
475 t_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 *//***************************************************************************/
493 t_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 *//***************************************************************************/
506 void    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 *//***************************************************************************/
522 t_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 *//***************************************************************************/
536 uint32_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 *//***************************************************************************/
550 t_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 *//***************************************************************************/
575 t_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 *//***************************************************************************/
600 typedef 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 *//***************************************************************************/
625 typedef 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 *//***************************************************************************/
654 t_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 *//***************************************************************************/
665 t_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 *//***************************************************************************/
678 t_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 *//***************************************************************************/
701 t_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 *//***************************************************************************/
715 t_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 *//***************************************************************************/
730 t_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 *//***************************************************************************/
757 t_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 *//***************************************************************************/
773 typedef 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 *//***************************************************************************/
792 t_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 *//***************************************************************************/
806 t_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 *//***************************************************************************/
833 typedef 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 *//***************************************************************************/
843 typedef 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 *//***************************************************************************/
899 t_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 *//***************************************************************************/
912 t_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 *//***************************************************************************/
931 t_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 *//***************************************************************************/
951 typedef 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 *//***************************************************************************/
969 t_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 *//***************************************************************************/
985 t_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 *//***************************************************************************/
1001 t_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 *//***************************************************************************/
1014 uint32_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 *//***************************************************************************/
1031 uint32_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 *//***************************************************************************/
1059 t_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 *//***************************************************************************/
1076 t_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 *//***************************************************************************/
1102 typedef 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 *//***************************************************************************/
1119 typedef 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 *//***************************************************************************/
1131 typedef 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 *//***************************************************************************/
1170 t_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 *//***************************************************************************/
1183 t_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 *//***************************************************************************/
1199 typedef 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 *//***************************************************************************/
1208 typedef 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 *//***************************************************************************/
1228 t_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 *//***************************************************************************/
1245 t_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 *//***************************************************************************/
1262 t_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