The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/dpaa/qman.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * Copyright (c) 2011-2012 Semihalf.
    3  * All rights reserved.
    4  *
    5  * Redistribution and use in source and binary forms, with or without
    6  * modification, are permitted provided that the following conditions
    7  * are met:
    8  * 1. Redistributions of source code must retain the above copyright
    9  *    notice, this list of conditions and the following disclaimer.
   10  * 2. Redistributions in binary form must reproduce the above copyright
   11  *    notice, this list of conditions and the following disclaimer in the
   12  *    documentation and/or other materials provided with the distribution.
   13  *
   14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   15  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   17  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   18  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   22  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   23  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   24  * SUCH DAMAGE.
   25  *
   26  * $FreeBSD: releng/12.0/sys/dev/dpaa/qman.h 296177 2016-02-29 03:38:00Z jhibbits $
   27  */
   28 
   29 #ifndef _QMAN_H
   30 #define _QMAN_H
   31 
   32 #include <machine/vmparam.h>
   33 
   34 #include <contrib/ncsw/inc/Peripherals/qm_ext.h>
   35 
   36 
   37 /**
   38  * @group QMan private defines/declarations
   39  * @{
   40  */
   41 /**
   42  * Maximum number of frame queues in all QMans.
   43  */
   44 #define         QMAN_MAX_FQIDS                  16
   45 
   46 /**
   47  * Pool channel common to all software portals.
   48  * @note Value of 0 reflects the e_QM_FQ_CHANNEL_POOL1 from e_QmFQChannel
   49  *       type used in qman_fqr_create().
   50  */
   51 #define         QMAN_COMMON_POOL_CHANNEL        0
   52 
   53 #define         QMAN_FQID_BASE                  1
   54 
   55 #define         QMAN_CCSR_SIZE                  0x1000
   56 
   57 /*
   58  * Portal defines
   59  */
   60 #define QMAN_CE_PA(base)        (base)
   61 #define QMAN_CI_PA(base)        ((base) + 0x100000)
   62 
   63 #define QMAN_PORTAL_CE_PA(base, n)      \
   64     (QMAN_CE_PA(base) + ((n) * QMAN_PORTAL_CE_SIZE))
   65 #define QMAN_PORTAL_CI_PA(base, n)      \
   66     (QMAN_CI_PA(base) + ((n) * QMAN_PORTAL_CI_SIZE))
   67 
   68 struct qman_softc {
   69         device_t        sc_dev;                 /* device handle */
   70         int             sc_rrid;                /* register rid */
   71         struct resource *sc_rres;               /* register resource */
   72         int             sc_irid;                /* interrupt rid */
   73         struct resource *sc_ires;               /* interrupt resource */
   74 
   75         bool            sc_regs_mapped[MAXCPU];
   76 
   77         t_Handle        sc_qh;                  /* QMAN handle */
   78         t_Handle        sc_qph[MAXCPU];         /* QMAN portal handles */
   79         vm_paddr_t      sc_qp_pa;               /* QMAN portal PA */
   80 
   81         int             sc_fqr_cpu[QMAN_MAX_FQIDS];
   82 };
   83 /** @> */
   84 
   85 
   86 /**
   87  * @group QMan bus interface
   88  * @{
   89  */
   90 int qman_attach(device_t dev);
   91 int qman_detach(device_t dev);
   92 int qman_suspend(device_t dev);
   93 int qman_resume(device_t dev);
   94 int qman_shutdown(device_t dev);
   95 /** @> */
   96 
   97 
   98 /**
   99  * @group QMan API
  100  * @{
  101  */
  102 
  103 /**
  104  * Create Frame Queue Range.
  105  *
  106  * @param fqids_num                     Number of frame queues in the range.
  107  *
  108  * @param channel                       Dedicated channel serviced by this
  109  *                                      Frame Queue Range.
  110  *
  111  * @param wq                            Work Queue Number within the channel.
  112  *
  113  * @param force_fqid                    If TRUE, fore allocation of specific
  114  *                                      FQID. Notice that there can not be two
  115  *                                      frame queues with the same ID in the
  116  *                                      system.
  117  *
  118  * @param fqid_or_align                 FQID if @force_fqid == TRUE, alignment
  119  *                                      of FQIDs entries otherwise.
  120  *
  121  * @param init_parked                   If TRUE, FQ state is initialized to
  122  *                                      "parked" state on creation. Otherwise,
  123  *                                      to "scheduled" state.
  124  *
  125  * @param hold_active                   If TRUE, the FQ may be held in the
  126  *                                      portal in "held active" state in
  127  *                                      anticipation of more frames being
  128  *                                      dequeued from it after the head frame
  129  *                                      is removed from the FQ and the dequeue
  130  *                                      response is returned. If FALSE the
  131  *                                      "held_active" state of the FQ is not
  132  *                                      allowed. This affects only on queues
  133  *                                      destined to software portals. Refer to
  134  *                                      the 6.3.4.6 of DPAA Reference Manual.
  135  *
  136  * @param prefer_in_cache               If TRUE, prefer this FQR to be in QMan
  137  *                                      internal cache memory for all states.
  138  *
  139  * @param congst_avoid_ena              If TRUE, enable congestion avoidance
  140  *                                      mechanism.
  141  *
  142  * @param congst_group                  A handle to the congestion group. Only
  143  *                                      relevant when @congst_avoid_ena == TRUE.
  144  *
  145  * @param overhead_accounting_len       For each frame add this number for CG
  146  *                                      calculation (may be negative), if 0 -
  147  *                                      disable feature.
  148  *
  149  * @param tail_drop_threshold           If not 0 - enable tail drop on this
  150  *                                      FQR.
  151  *
  152  * @return                              A handle to newly created FQR object.
  153  */
  154 t_Handle qman_fqr_create(uint32_t fqids_num, e_QmFQChannel channel, uint8_t wq,
  155     bool force_fqid, uint32_t fqid_or_align, bool init_parked,
  156     bool hold_active, bool prefer_in_cache, bool congst_avoid_ena,
  157     t_Handle congst_group, int8_t overhead_accounting_len,
  158     uint32_t tail_drop_threshold);
  159 
  160 /**
  161  * Free Frame Queue Range.
  162  *
  163  * @param fqr   A handle to FQR to be freed.
  164  * @return      E_OK on success; error code otherwise.
  165  */
  166 t_Error qman_fqr_free(t_Handle fqr);
  167 
  168 /**
  169  * Register the callback function.
  170  * The callback function will be called when a frame comes from this FQR.
  171  *
  172  * @param fqr           A handle to FQR.
  173  * @param callback      A pointer to the callback function.
  174  * @param app           A pointer to the user's data.
  175  * @return              E_OK on success; error code otherwise.
  176  */
  177 t_Error qman_fqr_register_cb(t_Handle fqr, t_QmReceivedFrameCallback *callback,
  178     t_Handle app);
  179 
  180 /**
  181  * Enqueue a frame on a given FQR.
  182  *
  183  * @param fqr           A handle to FQR.
  184  * @param fqid_off      FQID offset wihin the FQR.
  185  * @param frame         A frame to be enqueued to the transmission.
  186  * @return              E_OK on success; error code otherwise.
  187  */
  188 t_Error qman_fqr_enqueue(t_Handle fqr, uint32_t fqid_off, t_DpaaFD *frame);
  189 
  190 /**
  191  * Get one of the FQR counter's value.
  192  *
  193  * @param fqr           A handle to FQR.
  194  * @param fqid_off      FQID offset within the FQR.
  195  * @param counter       The requested counter.
  196  * @return              Counter's current value.
  197  */
  198 uint32_t qman_fqr_get_counter(t_Handle fqr, uint32_t fqid_off,
  199     e_QmFqrCounters counter);
  200 
  201 /**
  202  * Pull frame from FQR.
  203  *
  204  * @param fqr           A handle to FQR.
  205  * @param fqid_off      FQID offset within the FQR.
  206  * @param frame         The received frame.
  207  * @return              E_OK on success; error code otherwise.
  208  */
  209 t_Error qman_fqr_pull_frame(t_Handle fqr, uint32_t fqid_off, t_DpaaFD *frame);
  210 
  211 /**
  212  * Get base FQID of the FQR.
  213  * @param fqr   A handle to FQR.
  214  * @return      Base FQID of the FQR.
  215  */
  216 uint32_t qman_fqr_get_base_fqid(t_Handle fqr);
  217 
  218 /**
  219  * Poll frames from QMan.
  220  * This polls frames from the current software portal.
  221  *
  222  * @param source        Type of frames to be polled.
  223  * @return              E_OK on success; error otherwise.
  224  */
  225 t_Error qman_poll(e_QmPortalPollSource source);
  226 
  227 /**
  228  * General received frame callback.
  229  * This is called, when user did not register his own callback for a given
  230  * frame queue range (fqr).
  231  */
  232 e_RxStoreResponse qman_received_frame_callback(t_Handle app, t_Handle qm_fqr,
  233     t_Handle qm_portal, uint32_t fqid_offset, t_DpaaFD *frame);
  234 
  235 /**
  236  * General rejected frame callback.
  237  * This is called, when user did not register his own callback for a given
  238  * frame queue range (fqr).
  239  */
  240 e_RxStoreResponse qman_rejected_frame_callback(t_Handle app, t_Handle qm_fqr,
  241     t_Handle qm_portal, uint32_t fqid_offset, t_DpaaFD *frame,
  242     t_QmRejectedFrameInfo *qm_rejected_frame_info);
  243 
  244 /** @} */
  245 
  246 #endif /* QMAN_H */

Cache object: 2ad86752d8679d4ed4ec0c2a53506645


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.