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/bman.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/bman.h 296177 2016-02-29 03:38:00Z jhibbits $
   27  */
   28 
   29 #ifndef _BMAN_H
   30 #define _BMAN_H
   31 
   32 #include <machine/vmparam.h>
   33 
   34 #include <contrib/ncsw/inc/Peripherals/bm_ext.h>
   35 
   36 /*
   37  * BMAN Configuration
   38  */
   39 
   40 /* Maximum number of buffers in all BMAN pools */
   41 #define BMAN_MAX_BUFFERS        4096
   42 
   43 /*
   44  * Portal definitions
   45  */
   46 #define BMAN_CE_PA(base)        (base)
   47 #define BMAN_CI_PA(base)        ((base) + 0x100000)
   48 
   49 #define BMAN_PORTAL_CE_PA(base, n)      \
   50     (BMAN_CE_PA(base) + ((n) * BMAN_PORTAL_CE_SIZE))
   51 #define BMAN_PORTAL_CI_PA(base, n)      \
   52     (BMAN_CI_PA(base) + ((n) * BMAN_PORTAL_CI_SIZE))
   53 
   54 #define BMAN_CCSR_SIZE          0x1000
   55 
   56 struct bman_softc {
   57         device_t        sc_dev;                 /* device handle */
   58         int             sc_rrid;                /* register rid */
   59         struct resource *sc_rres;               /* register resource */
   60         int             sc_irid;                /* interrupt rid */
   61         struct resource *sc_ires;               /* interrupt resource */
   62 
   63         bool            sc_regs_mapped[MAXCPU]; /* register mapping status */
   64 
   65         t_Handle        sc_bh;                  /* BMAN handle */
   66         t_Handle        sc_bph[MAXCPU];         /* BMAN portal handles */
   67         vm_paddr_t      sc_bp_pa;               /* BMAN portals PA */
   68         unsigned int    sc_bpool_cpu[BM_MAX_NUM_OF_POOLS];
   69 };
   70 
   71 /*
   72  * External API
   73  */
   74 
   75 /*
   76  * @brief Function to create BMAN pool.
   77  *
   78  * @param bpid          The pointer to variable where Buffer Pool ID will be
   79  *                      stored.
   80  *
   81  * @param bufferSize    The size of buffers in newly created pool.
   82  *
   83  * @param maxBuffers    The maximum number of buffers in software stockpile.
   84  *                      Set to 0 if software stockpile should not be created.
   85  *
   86  * @param minBuffers    The minimum number of buffers in software stockpile.
   87  *                      Set to 0 if software stockpile should not be created.
   88  *
   89  * @param allocBuffers  The number of buffers to preallocate during pool
   90  *                      creation.
   91  *
   92  * @param f_GetBuf      The buffer allocating function. Called only by
   93  *                      bman_pool_create() and bman_pool_fill().
   94  *
   95  * @param f_PutBuf      The buffer freeing function. Called only by
   96  *                      bman_pool_destroy().
   97  *
   98  * @param dep_sw_entry  The software portal depletion entry threshold.
   99  *                      Set to 0 if depletion should not be signaled on
  100  *                      software portal.
  101  *
  102  * @param dep_sw_exit   The software portal depletion exit threshold.
  103  *                      Set to 0 if depletion should not be signaled on
  104  *                      software portal.
  105  *
  106  * @param dep_hw_entry  The hardware portal depletion entry threshold.
  107  *                      Set to 0 if depletion should not be signaled on
  108  *                      hardware portal.
  109  *
  110  * @param dep_hw_exit   The hardware portal depletion exit threshold.
  111  *                      Set to 0 if depletion should not be signaled on
  112  *                      hardware portal.
  113  *
  114  * @param f_Depletion   The software portal depletion notification function.
  115  *                      Set to NULL if depletion notification is not used.
  116  *
  117  * @param h_BufferPool  The user provided buffer pool context passed to
  118  *                      f_GetBuf, f_PutBuf and f_Depletion functions.
  119  *
  120  * @param f_PhysToVirt  The PA to VA translation function. Set to NULL if
  121  *                      default one should be used.
  122  *
  123  * @param f_VirtToPhys  The VA to PA translation function. Set to NULL if
  124  *                      default one should be used.
  125  *
  126  * @returns             Handle to newly created BMAN pool or NULL on error.
  127  *
  128  * @cautions            If pool uses software stockpile, all accesses to given
  129  *                      pool must be protected by lock. Even if only hardware
  130  *                      portal depletion notification is used, the caller must
  131  *                      provide valid @p f_Depletion function.
  132  */
  133 t_Handle bman_pool_create(uint8_t *bpid, uint16_t bufferSize,
  134     uint16_t maxBuffers, uint16_t minBuffers, uint16_t allocBuffers,
  135     t_GetBufFunction *f_GetBuf, t_PutBufFunction *f_PutBuf,
  136     uint32_t dep_sw_entry, uint32_t dep_sw_exit, uint32_t dep_hw_entry,
  137     uint32_t dep_hw_exit, t_BmDepletionCallback *f_Depletion,
  138     t_Handle h_BufferPool, t_PhysToVirt *f_PhysToVirt,
  139     t_VirtToPhys *f_VirtToPhys);
  140 
  141 /*
  142  * @brief Fill pool with buffers.
  143  *
  144  * The bman_pool_fill() function fills the BMAN pool with buffers. The buffers
  145  * are allocated through f_GetBuf function (see bman_pool_create() description).
  146  *
  147  * @param pool          The BMAN pool handle.
  148  * @param nbufs         The number of buffers to allocate. To maximize
  149  *                      performance this value should be multiple of 8.
  150  *
  151  * @returns             Zero on success or error code on failure.
  152  */
  153 int bman_pool_fill(t_Handle pool, uint16_t nbufs);
  154 
  155 /*
  156  * @brief Destroy pool.
  157  *
  158  * The bman_pool_destroy() function destroys the BMAN pool. Buffers for pool
  159  * are free through f_PutBuf function (see bman_pool_create() description).
  160  *
  161  * @param pool          The BMAN pool handle.
  162  *
  163  * @returns             Zero on success or error code on failure.
  164  */
  165 int bman_pool_destroy(t_Handle pool);
  166 
  167 /*
  168  * @brief Get a buffer from BMAN pool.
  169  *
  170  * @param pool          The BMAN pool handle.
  171  *
  172  * @returns             Pointer to the buffer or NULL if pool is empty.
  173  */
  174 void *bman_get_buffer(t_Handle pool);
  175 
  176 /*
  177  * @brief Put a buffer to BMAN pool.
  178  *
  179  * @param pool          The BMAN pool handle.
  180  * @param buffer        The pointer to buffer.
  181  *
  182  * @returns             Zero on success or error code on failure.
  183  */
  184 int bman_put_buffer(t_Handle pool, void *buffer);
  185 
  186 /*
  187  * @brief Count free buffers in given pool.
  188  *
  189  * @param pool          The BMAN pool handle.
  190  *
  191  * @returns             Number of free buffers in pool.
  192  */
  193 uint32_t bman_count(t_Handle pool);
  194 
  195 /*
  196  * Bus i/f
  197  */
  198 int bman_attach(device_t dev);
  199 int bman_detach(device_t dev);
  200 int bman_suspend(device_t dev);
  201 int bman_resume(device_t dev);
  202 int bman_shutdown(device_t dev);
  203 
  204 #endif /* BMAN_H */

Cache object: 175f30206ee68dddd3991374b1e59bdb


[ 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.