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/dpaa2/dpaa2_mcp.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  * SPDX-License-Identifier: BSD-2-Clause
    3  *
    4  * Copyright © 2021-2022 Dmitry Salychev
    5  *
    6  * Redistribution and use in source and binary forms, with or without
    7  * modification, are permitted provided that the following conditions
    8  * are met:
    9  * 1. Redistributions of source code must retain the above copyright
   10  *    notice, this list of conditions and the following disclaimer.
   11  * 2. Redistributions in binary form must reproduce the above copyright
   12  *    notice, this list of conditions and the following disclaimer in the
   13  *    documentation and/or other materials provided with the distribution.
   14  *
   15  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   16  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   18  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   19  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   20  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   21  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   22  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   23  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   24  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   25  * SUCH DAMAGE.
   26  */
   27 
   28 #ifndef _DPAA2_MCP_H
   29 #define _DPAA2_MCP_H
   30 
   31 #include <sys/rman.h>
   32 #include <sys/condvar.h>
   33 #include <sys/mutex.h>
   34 
   35 #include "dpaa2_types.h"
   36 
   37 /*
   38  * DPAA2 MC command interface helper routines.
   39  */
   40 
   41 #define DPAA2_PORTAL_TIMEOUT            100000  /* us */
   42 #define DPAA2_MCP_MEM_WIDTH             0x40 /* Minimal size of the MC portal. */
   43 #define DPAA2_MCP_MAX_RESOURCES         1 /* resources per DPMCP: 1 SYS_MEM */
   44 
   45 /*
   46  * Portal flags.
   47  *
   48  * TODO: Use the same flags for both MC and software portals.
   49  */
   50 #define DPAA2_PORTAL_DEF                0x0u
   51 #define DPAA2_PORTAL_NOWAIT_ALLOC       0x2u    /* Do not sleep during init */
   52 #define DPAA2_PORTAL_LOCKED             0x4000u /* Wait till portal's unlocked */
   53 #define DPAA2_PORTAL_DESTROYED          0x8000u /* Terminate any operations */
   54 
   55 /* Command flags. */
   56 #define DPAA2_CMD_DEF                   0x0u
   57 #define DPAA2_CMD_HIGH_PRIO             0x80u   /* High priority command */
   58 #define DPAA2_CMD_INTR_DIS              0x100u  /* Disable cmd finished intr */
   59 #define DPAA2_CMD_NOWAIT_ALLOC          0x8000u /* Do not sleep during init */
   60 
   61 /* DPAA2 command return codes. */
   62 #define DPAA2_CMD_STAT_OK               0x0     /* Set by MC on success */
   63 #define DPAA2_CMD_STAT_READY            0x1     /* Ready to be processed */
   64 #define DPAA2_CMD_STAT_AUTH_ERR         0x3     /* Illegal object-portal-icid */
   65 #define DPAA2_CMD_STAT_NO_PRIVILEGE     0x4     /* No privilege */
   66 #define DPAA2_CMD_STAT_DMA_ERR          0x5     /* DMA or I/O error */
   67 #define DPAA2_CMD_STAT_CONFIG_ERR       0x6     /* Invalid/conflicting params */
   68 #define DPAA2_CMD_STAT_TIMEOUT          0x7     /* Command timed out */
   69 #define DPAA2_CMD_STAT_NO_RESOURCE      0x8     /* No DPAA2 resources */
   70 #define DPAA2_CMD_STAT_NO_MEMORY        0x9     /* No memory available */
   71 #define DPAA2_CMD_STAT_BUSY             0xA     /* Device is busy */
   72 #define DPAA2_CMD_STAT_UNSUPPORTED_OP   0xB     /* Unsupported operation */
   73 #define DPAA2_CMD_STAT_INVALID_STATE    0xC     /* Invalid state */
   74 /* Driver-specific return codes. */
   75 #define DPAA2_CMD_STAT_UNKNOWN_OBJ      0xFD    /* Unknown DPAA2 object. */
   76 #define DPAA2_CMD_STAT_EINVAL           0xFE    /* Invalid argument */
   77 #define DPAA2_CMD_STAT_ERR              0xFF    /* General error */
   78 
   79 /* Object's memory region flags. */
   80 #define DPAA2_RC_REG_CACHEABLE          0x1     /* Cacheable memory mapping */
   81 
   82 #define DPAA2_HW_FLAG_HIGH_PRIO         0x80u
   83 #define DPAA2_SW_FLAG_INTR_DIS          0x01u
   84 
   85 #define DPAA2_CMD_PARAMS_N              7u
   86 #define DPAA2_LABEL_SZ                  16
   87 
   88 /* ------------------------- MNG command IDs -------------------------------- */
   89 #define CMD_MNG_BASE_VERSION    1
   90 #define CMD_MNG_ID_OFFSET       4
   91 
   92 #define CMD_MNG(id)     (((id) << CMD_MNG_ID_OFFSET) | CMD_MNG_BASE_VERSION)
   93 
   94 #define CMDID_MNG_GET_VER                       CMD_MNG(0x831)
   95 #define CMDID_MNG_GET_SOC_VER                   CMD_MNG(0x832)
   96 #define CMDID_MNG_GET_CONT_ID                   CMD_MNG(0x830)
   97 
   98 /* ------------------------- DPRC command IDs ------------------------------- */
   99 #define CMD_RC_BASE_VERSION     1
  100 #define CMD_RC_2ND_VERSION      2
  101 #define CMD_RC_3RD_VERSION      3
  102 #define CMD_RC_ID_OFFSET        4
  103 
  104 #define CMD_RC(id)      (((id) << CMD_RC_ID_OFFSET) | CMD_RC_BASE_VERSION)
  105 #define CMD_RC_V2(id)   (((id) << CMD_RC_ID_OFFSET) | CMD_RC_2ND_VERSION)
  106 #define CMD_RC_V3(id)   (((id) << CMD_RC_ID_OFFSET) | CMD_RC_3RD_VERSION)
  107 
  108 #define CMDID_RC_OPEN                           CMD_RC(0x805)
  109 #define CMDID_RC_CLOSE                          CMD_RC(0x800)
  110 #define CMDID_RC_GET_API_VERSION                CMD_RC(0xA05)
  111 #define CMDID_RC_GET_ATTR                       CMD_RC(0x004)
  112 #define CMDID_RC_RESET_CONT                     CMD_RC(0x005)
  113 #define CMDID_RC_RESET_CONT_V2                  CMD_RC_V2(0x005)
  114 #define CMDID_RC_SET_IRQ                        CMD_RC(0x010)
  115 #define CMDID_RC_SET_IRQ_ENABLE                 CMD_RC(0x012)
  116 #define CMDID_RC_SET_IRQ_MASK                   CMD_RC(0x014)
  117 #define CMDID_RC_GET_IRQ_STATUS                 CMD_RC(0x016)
  118 #define CMDID_RC_CLEAR_IRQ_STATUS               CMD_RC(0x017)
  119 #define CMDID_RC_GET_CONT_ID                    CMD_RC(0x830)
  120 #define CMDID_RC_GET_OBJ_COUNT                  CMD_RC(0x159)
  121 #define CMDID_RC_GET_OBJ                        CMD_RC(0x15A)
  122 #define CMDID_RC_GET_OBJ_DESC                   CMD_RC(0x162)
  123 #define CMDID_RC_GET_OBJ_REG                    CMD_RC(0x15E)
  124 #define CMDID_RC_GET_OBJ_REG_V2                 CMD_RC_V2(0x15E)
  125 #define CMDID_RC_GET_OBJ_REG_V3                 CMD_RC_V3(0x15E)
  126 #define CMDID_RC_SET_OBJ_IRQ                    CMD_RC(0x15F)
  127 #define CMDID_RC_GET_CONN                       CMD_RC(0x16C)
  128 
  129 /* ------------------------- DPIO command IDs ------------------------------- */
  130 #define CMD_IO_BASE_VERSION     1
  131 #define CMD_IO_ID_OFFSET        4
  132 
  133 #define CMD_IO(id)      (((id) << CMD_IO_ID_OFFSET) | CMD_IO_BASE_VERSION)
  134 
  135 #define CMDID_IO_OPEN                           CMD_IO(0x803)
  136 #define CMDID_IO_CLOSE                          CMD_IO(0x800)
  137 #define CMDID_IO_ENABLE                         CMD_IO(0x002)
  138 #define CMDID_IO_DISABLE                        CMD_IO(0x003)
  139 #define CMDID_IO_GET_ATTR                       CMD_IO(0x004)
  140 #define CMDID_IO_RESET                          CMD_IO(0x005)
  141 #define CMDID_IO_SET_IRQ_ENABLE                 CMD_IO(0x012)
  142 #define CMDID_IO_SET_IRQ_MASK                   CMD_IO(0x014)
  143 #define CMDID_IO_GET_IRQ_STATUS                 CMD_IO(0x016)
  144 #define CMDID_IO_ADD_STATIC_DQ_CHAN             CMD_IO(0x122)
  145 
  146 /* ------------------------- DPNI command IDs ------------------------------- */
  147 #define CMD_NI_BASE_VERSION     1
  148 #define CMD_NI_2ND_VERSION      2
  149 #define CMD_NI_4TH_VERSION      4
  150 #define CMD_NI_ID_OFFSET        4
  151 
  152 #define CMD_NI(id)      (((id) << CMD_NI_ID_OFFSET) | CMD_NI_BASE_VERSION)
  153 #define CMD_NI_V2(id)   (((id) << CMD_NI_ID_OFFSET) | CMD_NI_2ND_VERSION)
  154 #define CMD_NI_V4(id)   (((id) << CMD_NI_ID_OFFSET) | CMD_NI_4TH_VERSION)
  155 
  156 #define CMDID_NI_OPEN                           CMD_NI(0x801)
  157 #define CMDID_NI_CLOSE                          CMD_NI(0x800)
  158 #define CMDID_NI_ENABLE                         CMD_NI(0x002)
  159 #define CMDID_NI_DISABLE                        CMD_NI(0x003)
  160 #define CMDID_NI_GET_API_VER                    CMD_NI(0xA01)
  161 #define CMDID_NI_RESET                          CMD_NI(0x005)
  162 #define CMDID_NI_GET_ATTR                       CMD_NI(0x004)
  163 #define CMDID_NI_SET_BUF_LAYOUT                 CMD_NI(0x265)
  164 #define CMDID_NI_GET_TX_DATA_OFF                CMD_NI(0x212)
  165 #define CMDID_NI_GET_PORT_MAC_ADDR              CMD_NI(0x263)
  166 #define CMDID_NI_SET_PRIM_MAC_ADDR              CMD_NI(0x224)
  167 #define CMDID_NI_GET_PRIM_MAC_ADDR              CMD_NI(0x225)
  168 #define CMDID_NI_SET_LINK_CFG                   CMD_NI(0x21A)
  169 #define CMDID_NI_GET_LINK_CFG                   CMD_NI(0x278)
  170 #define CMDID_NI_GET_LINK_STATE                 CMD_NI(0x215)
  171 #define CMDID_NI_SET_QOS_TABLE                  CMD_NI(0x240)
  172 #define CMDID_NI_CLEAR_QOS_TABLE                CMD_NI(0x243)
  173 #define CMDID_NI_SET_POOLS                      CMD_NI(0x200)
  174 #define CMDID_NI_SET_ERR_BEHAVIOR               CMD_NI(0x20B)
  175 #define CMDID_NI_GET_QUEUE                      CMD_NI(0x25F)
  176 #define CMDID_NI_SET_QUEUE                      CMD_NI(0x260)
  177 #define CMDID_NI_GET_QDID                       CMD_NI(0x210)
  178 #define CMDID_NI_ADD_MAC_ADDR                   CMD_NI(0x226)
  179 #define CMDID_NI_REMOVE_MAC_ADDR                CMD_NI(0x227)
  180 #define CMDID_NI_CLEAR_MAC_FILTERS              CMD_NI(0x228)
  181 #define CMDID_NI_SET_MFL                        CMD_NI(0x216)
  182 #define CMDID_NI_SET_OFFLOAD                    CMD_NI(0x26C)
  183 #define CMDID_NI_SET_IRQ_MASK                   CMD_NI(0x014)
  184 #define CMDID_NI_SET_IRQ_ENABLE                 CMD_NI(0x012)
  185 #define CMDID_NI_GET_IRQ_STATUS                 CMD_NI(0x016)
  186 #define CMDID_NI_SET_UNI_PROMISC                CMD_NI(0x222)
  187 #define CMDID_NI_SET_MULTI_PROMISC              CMD_NI(0x220)
  188 #define CMDID_NI_GET_STATISTICS                 CMD_NI(0x25D)
  189 #define CMDID_NI_SET_RX_TC_DIST                 CMD_NI(0x235)
  190 
  191 /* ------------------------- DPBP command IDs ------------------------------- */
  192 #define CMD_BP_BASE_VERSION     1
  193 #define CMD_BP_ID_OFFSET        4
  194 
  195 #define CMD_BP(id)      (((id) << CMD_BP_ID_OFFSET) | CMD_BP_BASE_VERSION)
  196 
  197 #define CMDID_BP_OPEN                           CMD_BP(0x804)
  198 #define CMDID_BP_CLOSE                          CMD_BP(0x800)
  199 #define CMDID_BP_ENABLE                         CMD_BP(0x002)
  200 #define CMDID_BP_DISABLE                        CMD_BP(0x003)
  201 #define CMDID_BP_GET_ATTR                       CMD_BP(0x004)
  202 #define CMDID_BP_RESET                          CMD_BP(0x005)
  203 
  204 /* ------------------------- DPMAC command IDs ------------------------------ */
  205 #define CMD_MAC_BASE_VERSION    1
  206 #define CMD_MAC_2ND_VERSION     2
  207 #define CMD_MAC_ID_OFFSET       4
  208 
  209 #define CMD_MAC(id)     (((id) << CMD_MAC_ID_OFFSET) | CMD_MAC_BASE_VERSION)
  210 #define CMD_MAC_V2(id)  (((id) << CMD_MAC_ID_OFFSET) | CMD_MAC_2ND_VERSION)
  211 
  212 #define CMDID_MAC_OPEN                          CMD_MAC(0x80C)
  213 #define CMDID_MAC_CLOSE                         CMD_MAC(0x800)
  214 #define CMDID_MAC_RESET                         CMD_MAC(0x005)
  215 #define CMDID_MAC_MDIO_READ                     CMD_MAC(0x0C0)
  216 #define CMDID_MAC_MDIO_WRITE                    CMD_MAC(0x0C1)
  217 #define CMDID_MAC_GET_ADDR                      CMD_MAC(0x0C5)
  218 #define CMDID_MAC_GET_ATTR                      CMD_MAC(0x004)
  219 #define CMDID_MAC_SET_LINK_STATE                CMD_MAC_V2(0x0C3)
  220 #define CMDID_MAC_SET_IRQ_MASK                  CMD_MAC(0x014)
  221 #define CMDID_MAC_SET_IRQ_ENABLE                CMD_MAC(0x012)
  222 #define CMDID_MAC_GET_IRQ_STATUS                CMD_MAC(0x016)
  223 
  224 /* ------------------------- DPCON command IDs ------------------------------ */
  225 #define CMD_CON_BASE_VERSION    1
  226 #define CMD_CON_ID_OFFSET       4
  227 
  228 #define CMD_CON(id)     (((id) << CMD_CON_ID_OFFSET) | CMD_CON_BASE_VERSION)
  229 
  230 #define CMDID_CON_OPEN                          CMD_CON(0x808)
  231 #define CMDID_CON_CLOSE                         CMD_CON(0x800)
  232 #define CMDID_CON_ENABLE                        CMD_CON(0x002)
  233 #define CMDID_CON_DISABLE                       CMD_CON(0x003)
  234 #define CMDID_CON_GET_ATTR                      CMD_CON(0x004)
  235 #define CMDID_CON_RESET                         CMD_CON(0x005)
  236 #define CMDID_CON_SET_NOTIF                     CMD_CON(0x100)
  237 
  238 /* ------------------------- DPMCP command IDs ------------------------------ */
  239 #define CMD_MCP_BASE_VERSION    1
  240 #define CMD_MCP_2ND_VERSION     2
  241 #define CMD_MCP_ID_OFFSET       4
  242 
  243 #define CMD_MCP(id)     (((id) << CMD_MCP_ID_OFFSET) | CMD_MCP_BASE_VERSION)
  244 #define CMD_MCP_V2(id)  (((id) << CMD_MCP_ID_OFFSET) | CMD_MCP_2ND_VERSION)
  245 
  246 #define CMDID_MCP_CREATE                        CMD_MCP_V2(0x90B)
  247 #define CMDID_MCP_DESTROY                       CMD_MCP(0x98B)
  248 #define CMDID_MCP_OPEN                          CMD_MCP(0x80B)
  249 #define CMDID_MCP_CLOSE                         CMD_MCP(0x800)
  250 #define CMDID_MCP_RESET                         CMD_MCP(0x005)
  251 
  252 #define DPAA2_MCP_LOCK(__mcp, __flags) do {             \
  253         mtx_assert(&(__mcp)->lock, MA_NOTOWNED);        \
  254         mtx_lock(&(__mcp)->lock);                       \
  255         *(__flags) = (__mcp)->flags;                    \
  256         (__mcp)->flags |= DPAA2_PORTAL_LOCKED;          \
  257 } while (0)
  258 
  259 #define DPAA2_MCP_UNLOCK(__mcp) do {            \
  260         mtx_assert(&(__mcp)->lock, MA_OWNED);   \
  261         (__mcp)->flags &= ~DPAA2_PORTAL_LOCKED; \
  262         mtx_unlock(&(__mcp)->lock);             \
  263 } while (0)
  264 
  265 enum dpaa2_rc_region_type {
  266         DPAA2_RC_REG_MC_PORTAL,
  267         DPAA2_RC_REG_QBMAN_PORTAL
  268 };
  269 
  270 /**
  271  * @brief Helper object to interact with the MC portal.
  272  *
  273  * res:                 Unmapped portal's I/O memory.
  274  * map:                 Mapped portal's I/O memory.
  275  * lock:                Lock to send a command to the portal and wait for the
  276  *                      result.
  277  * flags:               Current state of the object.
  278  * rc_api_major:        Major version of the DPRC API.
  279  * rc_api_minor:        Minor version of the DPRC API.
  280  */
  281 struct dpaa2_mcp {
  282         struct resource *res;
  283         struct resource_map *map;
  284         struct mtx      lock;
  285         uint16_t        flags;
  286         uint16_t        rc_api_major;
  287         uint16_t        rc_api_minor;
  288 };
  289 
  290 /**
  291  * @brief Command object holds data to be written to the MC portal.
  292  *
  293  * header:      8 least significant bytes of the MC portal.
  294  * params:      Parameters to pass together with the command to MC. Might keep
  295  *              command execution results.
  296  *
  297  * NOTE: 64 bytes.
  298  */
  299 struct dpaa2_cmd {
  300         uint64_t        header;
  301         uint64_t        params[DPAA2_CMD_PARAMS_N];
  302 };
  303 
  304 /**
  305  * @brief Helper object to access fields of the MC command header.
  306  *
  307  * srcid:       The SoC architected source ID of the submitter. This field is
  308  *              reserved and cannot be written by the driver.
  309  * flags_hw:    Bits from 8 to 15 of the command header. Most of them are
  310  *              reserved at the moment.
  311  * status:      Command ready/status. This field is used as the handshake field
  312  *              between MC and the driver. MC reports command completion with
  313  *              success/error codes in this field.
  314  * flags_sw:    ...
  315  * token:       ...
  316  * cmdid:       ...
  317  *
  318  * NOTE: 8 bytes.
  319  */
  320 struct dpaa2_cmd_header {
  321         uint8_t         srcid;
  322         uint8_t         flags_hw;
  323         uint8_t         status;
  324         uint8_t         flags_sw;
  325         uint16_t        token;
  326         uint16_t        cmdid;
  327 } __packed;
  328 
  329 /**
  330  * @brief Information about DPAA2 object.
  331  *
  332  * id:          ID of a logical object resource.
  333  * vendor:      Object vendor identifier.
  334  * irq_count:   Number of interrupts supported by the object.
  335  * reg_count:   Number of mappable regions supported by the object.
  336  * state:       Object state (combination of states).
  337  * ver_major:   Major version of the object.
  338  * ver_minor:   Minor version of the object.
  339  * flags:       Object attributes flags.
  340  * type:        ...
  341  * label:       ...
  342  */
  343 struct dpaa2_obj {
  344         uint32_t        id;
  345         uint16_t        vendor;
  346         uint8_t         irq_count;
  347         uint8_t         reg_count;
  348         uint32_t        state;
  349         uint16_t        ver_major;
  350         uint16_t        ver_minor;
  351         uint16_t        flags;
  352         uint8_t         label[DPAA2_LABEL_SZ];
  353         enum dpaa2_dev_type type;
  354 };
  355 
  356 /**
  357  * @brief Attributes of the DPRC object.
  358  *
  359  * cont_id:     Container ID.
  360  * portal_id:   Container's portal ID.
  361  * options:     Container's options as set at container's creation.
  362  * icid:        Container's isolation context ID.
  363  */
  364 struct dpaa2_rc_attr {
  365         uint32_t        cont_id;
  366         uint32_t        portal_id;
  367         uint32_t        options;
  368         uint32_t        icid;
  369 };
  370 
  371 /**
  372  * @brief Description of the object's memory region.
  373  *
  374  * base_paddr:  Region base physical address.
  375  * base_offset: Region base offset.
  376  * size:        Region size (in bytes).
  377  * flags:       Region flags (cacheable, etc.)
  378  * type:        Type of a software portal this region belongs to.
  379  */
  380 struct dpaa2_rc_obj_region {
  381         uint64_t        base_paddr;
  382         uint64_t        base_offset;
  383         uint32_t        size;
  384         uint32_t        flags;
  385         enum dpaa2_rc_region_type type;
  386 };
  387 
  388 /**
  389  * @brief DPAA2 endpoint descriptor.
  390  *
  391  * obj_id:      Endpoint object ID.
  392  * if_id:       Interface ID; for endpoints with multiple interfaces
  393  *              (DPSW, DPDMUX), 0 - otherwise.
  394  * type:        Endpoint object type, null-terminated string.
  395  */
  396 struct dpaa2_ep_desc {
  397         uint32_t        obj_id;
  398         uint32_t        if_id;
  399         enum dpaa2_dev_type type;
  400 };
  401 
  402 /**
  403  * @brief Configuration of the channel data availability notification (CDAN).
  404  *
  405  * qman_ctx:    Context value provided with each CDAN message.
  406  * dpio_id:     DPIO object ID configured with a notification channel.
  407  * prior:       Priority selection within the DPIO channel; valid values
  408  *              are 0-7, depending on the number of priorities in that channel.
  409  */
  410 struct dpaa2_con_notif_cfg {
  411         uint64_t        qman_ctx;
  412         uint32_t        dpio_id;
  413         uint8_t         prior;
  414 };
  415 
  416 /**
  417  * @brief Attributes of the DPMCP object.
  418  *
  419  * id:           DPMCP object ID.
  420  * options:      Options of the MC portal (disabled high-prio commands, etc.).
  421  */
  422 struct dpaa2_mcp_attr {
  423         uint32_t                id;
  424         uint32_t                options;
  425 };
  426 
  427 /**
  428  * @brief Software context for the DPAA2 MC portal.
  429  */
  430 struct dpaa2_mcp_softc {
  431         device_t                 dev;
  432         struct dpaa2_mcp_attr    attr;
  433 
  434         struct resource         *res[DPAA2_MCP_MAX_RESOURCES];
  435         struct resource_map      map[DPAA2_MCP_MAX_RESOURCES];
  436 };
  437 
  438 int     dpaa2_mcp_init_portal(struct dpaa2_mcp **mcp, struct resource *res,
  439             struct resource_map *map, uint16_t flags);
  440 int     dpaa2_mcp_init_command(struct dpaa2_cmd **cmd, uint16_t flags);
  441 void    dpaa2_mcp_free_portal(struct dpaa2_mcp *mcp);
  442 void    dpaa2_mcp_free_command(struct dpaa2_cmd *cmd);
  443 
  444 /* to quickly update command token */
  445 struct dpaa2_cmd *dpaa2_mcp_tk(struct dpaa2_cmd *cmd, uint16_t token);
  446 /* to quickly update command flags */
  447 struct dpaa2_cmd *dpaa2_mcp_f(struct dpaa2_cmd *cmd, uint16_t flags);
  448 
  449 #endif /* _DPAA2_MCP_H */

Cache object: d58049be3b1b2001f8c66a1b2e9895bb


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