linux/drivers/staging/fsl-mc/include/dpaa2-global.h
<<
>>
Prefs
   1/*
   2 * Copyright 2014-2016 Freescale Semiconductor Inc.
   3 * Copyright 2016 NXP
   4 *
   5 * Redistribution and use in source and binary forms, with or without
   6 * modification, are permitted provided that the following conditions are met:
   7 *     * Redistributions of source code must retain the above copyright
   8 *       notice, this list of conditions and the following disclaimer.
   9 *     * Redistributions in binary form must reproduce the above copyright
  10 *       notice, this list of conditions and the following disclaimer in the
  11 *       documentation and/or other materials provided with the distribution.
  12 *     * Neither the name of Freescale Semiconductor nor the
  13 *       names of its contributors may be used to endorse or promote products
  14 *       derived from this software without specific prior written permission.
  15 *
  16 * ALTERNATIVELY, this software may be distributed under the terms of the
  17 * GNU General Public License ("GPL") as published by the Free Software
  18 * Foundation, either version 2 of that License or (at your option) any
  19 * later version.
  20 *
  21 * THIS SOFTWARE IS PROVIDED BY Freescale Semiconductor ``AS IS'' AND ANY
  22 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
  23 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  24 * DISCLAIMED. IN NO EVENT SHALL Freescale Semiconductor BE LIABLE FOR ANY
  25 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  26 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  27 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  28 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  29 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  30 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  31 */
  32#ifndef __FSL_DPAA2_GLOBAL_H
  33#define __FSL_DPAA2_GLOBAL_H
  34
  35#include <linux/types.h>
  36#include <linux/cpumask.h>
  37#include "dpaa2-fd.h"
  38
  39struct dpaa2_dq {
  40        union {
  41                struct common {
  42                        u8 verb;
  43                        u8 reserved[63];
  44                } common;
  45                struct dq {
  46                        u8 verb;
  47                        u8 stat;
  48                        __le16 seqnum;
  49                        __le16 oprid;
  50                        u8 reserved;
  51                        u8 tok;
  52                        __le32 fqid;
  53                        u32 reserved2;
  54                        __le32 fq_byte_cnt;
  55                        __le32 fq_frm_cnt;
  56                        __le64 fqd_ctx;
  57                        u8 fd[32];
  58                } dq;
  59                struct scn {
  60                        u8 verb;
  61                        u8 stat;
  62                        u8 state;
  63                        u8 reserved;
  64                        __le32 rid_tok;
  65                        __le64 ctx;
  66                } scn;
  67        };
  68};
  69
  70/* Parsing frame dequeue results */
  71/* FQ empty */
  72#define DPAA2_DQ_STAT_FQEMPTY       0x80
  73/* FQ held active */
  74#define DPAA2_DQ_STAT_HELDACTIVE    0x40
  75/* FQ force eligible */
  76#define DPAA2_DQ_STAT_FORCEELIGIBLE 0x20
  77/* valid frame */
  78#define DPAA2_DQ_STAT_VALIDFRAME    0x10
  79/* FQ ODP enable */
  80#define DPAA2_DQ_STAT_ODPVALID      0x04
  81/* volatile dequeue */
  82#define DPAA2_DQ_STAT_VOLATILE      0x02
  83/* volatile dequeue command is expired */
  84#define DPAA2_DQ_STAT_EXPIRED       0x01
  85
  86#define DQ_FQID_MASK            0x00FFFFFF
  87#define DQ_FRAME_COUNT_MASK     0x00FFFFFF
  88
  89/**
  90 * dpaa2_dq_flags() - Get the stat field of dequeue response
  91 * @dq: the dequeue result.
  92 */
  93static inline u32 dpaa2_dq_flags(const struct dpaa2_dq *dq)
  94{
  95        return dq->dq.stat;
  96}
  97
  98/**
  99 * dpaa2_dq_is_pull() - Check whether the dq response is from a pull
 100 *                      command.
 101 * @dq: the dequeue result
 102 *
 103 * Return 1 for volatile(pull) dequeue, 0 for static dequeue.
 104 */
 105static inline int dpaa2_dq_is_pull(const struct dpaa2_dq *dq)
 106{
 107        return (int)(dpaa2_dq_flags(dq) & DPAA2_DQ_STAT_VOLATILE);
 108}
 109
 110/**
 111 * dpaa2_dq_is_pull_complete() - Check whether the pull command is completed.
 112 * @dq: the dequeue result
 113 *
 114 * Return boolean.
 115 */
 116static inline bool dpaa2_dq_is_pull_complete(const struct dpaa2_dq *dq)
 117{
 118        return !!(dpaa2_dq_flags(dq) & DPAA2_DQ_STAT_EXPIRED);
 119}
 120
 121/**
 122 * dpaa2_dq_seqnum() - Get the seqnum field in dequeue response
 123 * @dq: the dequeue result
 124 *
 125 * seqnum is valid only if VALIDFRAME flag is TRUE
 126 *
 127 * Return seqnum.
 128 */
 129static inline u16 dpaa2_dq_seqnum(const struct dpaa2_dq *dq)
 130{
 131        return le16_to_cpu(dq->dq.seqnum);
 132}
 133
 134/**
 135 * dpaa2_dq_odpid() - Get the odpid field in dequeue response
 136 * @dq: the dequeue result
 137 *
 138 * odpid is valid only if ODPVALID flag is TRUE.
 139 *
 140 * Return odpid.
 141 */
 142static inline u16 dpaa2_dq_odpid(const struct dpaa2_dq *dq)
 143{
 144        return le16_to_cpu(dq->dq.oprid);
 145}
 146
 147/**
 148 * dpaa2_dq_fqid() - Get the fqid in dequeue response
 149 * @dq: the dequeue result
 150 *
 151 * Return fqid.
 152 */
 153static inline u32 dpaa2_dq_fqid(const struct dpaa2_dq *dq)
 154{
 155        return le32_to_cpu(dq->dq.fqid) & DQ_FQID_MASK;
 156}
 157
 158/**
 159 * dpaa2_dq_byte_count() - Get the byte count in dequeue response
 160 * @dq: the dequeue result
 161 *
 162 * Return the byte count remaining in the FQ.
 163 */
 164static inline u32 dpaa2_dq_byte_count(const struct dpaa2_dq *dq)
 165{
 166        return le32_to_cpu(dq->dq.fq_byte_cnt);
 167}
 168
 169/**
 170 * dpaa2_dq_frame_count() - Get the frame count in dequeue response
 171 * @dq: the dequeue result
 172 *
 173 * Return the frame count remaining in the FQ.
 174 */
 175static inline u32 dpaa2_dq_frame_count(const struct dpaa2_dq *dq)
 176{
 177        return le32_to_cpu(dq->dq.fq_frm_cnt) & DQ_FRAME_COUNT_MASK;
 178}
 179
 180/**
 181 * dpaa2_dq_fd_ctx() - Get the frame queue context in dequeue response
 182 * @dq: the dequeue result
 183 *
 184 * Return the frame queue context.
 185 */
 186static inline u64 dpaa2_dq_fqd_ctx(const struct dpaa2_dq *dq)
 187{
 188        return le64_to_cpu(dq->dq.fqd_ctx);
 189}
 190
 191/**
 192 * dpaa2_dq_fd() - Get the frame descriptor in dequeue response
 193 * @dq: the dequeue result
 194 *
 195 * Return the frame descriptor.
 196 */
 197static inline const struct dpaa2_fd *dpaa2_dq_fd(const struct dpaa2_dq *dq)
 198{
 199        return (const struct dpaa2_fd *)&dq->dq.fd[0];
 200}
 201
 202#endif /* __FSL_DPAA2_GLOBAL_H */
 203