root/include/soc/fsl/dpaa2-global.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. dpaa2_dq_flags
  2. dpaa2_dq_is_pull
  3. dpaa2_dq_is_pull_complete
  4. dpaa2_dq_seqnum
  5. dpaa2_dq_odpid
  6. dpaa2_dq_fqid
  7. dpaa2_dq_byte_count
  8. dpaa2_dq_frame_count
  9. dpaa2_dq_fqd_ctx
  10. dpaa2_dq_fd
  11. dpaa2_cscn_state_congested

   1 /* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */
   2 /*
   3  * Copyright 2014-2016 Freescale Semiconductor Inc.
   4  * Copyright 2016 NXP
   5  *
   6  */
   7 #ifndef __FSL_DPAA2_GLOBAL_H
   8 #define __FSL_DPAA2_GLOBAL_H
   9 
  10 #include <linux/types.h>
  11 #include <linux/cpumask.h>
  12 #include "dpaa2-fd.h"
  13 
  14 struct dpaa2_dq {
  15         union {
  16                 struct common {
  17                         u8 verb;
  18                         u8 reserved[63];
  19                 } common;
  20                 struct dq {
  21                         u8 verb;
  22                         u8 stat;
  23                         __le16 seqnum;
  24                         __le16 oprid;
  25                         u8 reserved;
  26                         u8 tok;
  27                         __le32 fqid;
  28                         u32 reserved2;
  29                         __le32 fq_byte_cnt;
  30                         __le32 fq_frm_cnt;
  31                         __le64 fqd_ctx;
  32                         u8 fd[32];
  33                 } dq;
  34                 struct scn {
  35                         u8 verb;
  36                         u8 stat;
  37                         u8 state;
  38                         u8 reserved;
  39                         __le32 rid_tok;
  40                         __le64 ctx;
  41                 } scn;
  42         };
  43 };
  44 
  45 /* Parsing frame dequeue results */
  46 /* FQ empty */
  47 #define DPAA2_DQ_STAT_FQEMPTY       0x80
  48 /* FQ held active */
  49 #define DPAA2_DQ_STAT_HELDACTIVE    0x40
  50 /* FQ force eligible */
  51 #define DPAA2_DQ_STAT_FORCEELIGIBLE 0x20
  52 /* valid frame */
  53 #define DPAA2_DQ_STAT_VALIDFRAME    0x10
  54 /* FQ ODP enable */
  55 #define DPAA2_DQ_STAT_ODPVALID      0x04
  56 /* volatile dequeue */
  57 #define DPAA2_DQ_STAT_VOLATILE      0x02
  58 /* volatile dequeue command is expired */
  59 #define DPAA2_DQ_STAT_EXPIRED       0x01
  60 
  61 #define DQ_FQID_MASK            0x00FFFFFF
  62 #define DQ_FRAME_COUNT_MASK     0x00FFFFFF
  63 
  64 /**
  65  * dpaa2_dq_flags() - Get the stat field of dequeue response
  66  * @dq: the dequeue result.
  67  */
  68 static inline u32 dpaa2_dq_flags(const struct dpaa2_dq *dq)
  69 {
  70         return dq->dq.stat;
  71 }
  72 
  73 /**
  74  * dpaa2_dq_is_pull() - Check whether the dq response is from a pull
  75  *                      command.
  76  * @dq: the dequeue result
  77  *
  78  * Return 1 for volatile(pull) dequeue, 0 for static dequeue.
  79  */
  80 static inline int dpaa2_dq_is_pull(const struct dpaa2_dq *dq)
  81 {
  82         return (int)(dpaa2_dq_flags(dq) & DPAA2_DQ_STAT_VOLATILE);
  83 }
  84 
  85 /**
  86  * dpaa2_dq_is_pull_complete() - Check whether the pull command is completed.
  87  * @dq: the dequeue result
  88  *
  89  * Return boolean.
  90  */
  91 static inline bool dpaa2_dq_is_pull_complete(const struct dpaa2_dq *dq)
  92 {
  93         return !!(dpaa2_dq_flags(dq) & DPAA2_DQ_STAT_EXPIRED);
  94 }
  95 
  96 /**
  97  * dpaa2_dq_seqnum() - Get the seqnum field in dequeue response
  98  * @dq: the dequeue result
  99  *
 100  * seqnum is valid only if VALIDFRAME flag is TRUE
 101  *
 102  * Return seqnum.
 103  */
 104 static inline u16 dpaa2_dq_seqnum(const struct dpaa2_dq *dq)
 105 {
 106         return le16_to_cpu(dq->dq.seqnum);
 107 }
 108 
 109 /**
 110  * dpaa2_dq_odpid() - Get the odpid field in dequeue response
 111  * @dq: the dequeue result
 112  *
 113  * odpid is valid only if ODPVALID flag is TRUE.
 114  *
 115  * Return odpid.
 116  */
 117 static inline u16 dpaa2_dq_odpid(const struct dpaa2_dq *dq)
 118 {
 119         return le16_to_cpu(dq->dq.oprid);
 120 }
 121 
 122 /**
 123  * dpaa2_dq_fqid() - Get the fqid in dequeue response
 124  * @dq: the dequeue result
 125  *
 126  * Return fqid.
 127  */
 128 static inline u32 dpaa2_dq_fqid(const struct dpaa2_dq *dq)
 129 {
 130         return le32_to_cpu(dq->dq.fqid) & DQ_FQID_MASK;
 131 }
 132 
 133 /**
 134  * dpaa2_dq_byte_count() - Get the byte count in dequeue response
 135  * @dq: the dequeue result
 136  *
 137  * Return the byte count remaining in the FQ.
 138  */
 139 static inline u32 dpaa2_dq_byte_count(const struct dpaa2_dq *dq)
 140 {
 141         return le32_to_cpu(dq->dq.fq_byte_cnt);
 142 }
 143 
 144 /**
 145  * dpaa2_dq_frame_count() - Get the frame count in dequeue response
 146  * @dq: the dequeue result
 147  *
 148  * Return the frame count remaining in the FQ.
 149  */
 150 static inline u32 dpaa2_dq_frame_count(const struct dpaa2_dq *dq)
 151 {
 152         return le32_to_cpu(dq->dq.fq_frm_cnt) & DQ_FRAME_COUNT_MASK;
 153 }
 154 
 155 /**
 156  * dpaa2_dq_fd_ctx() - Get the frame queue context in dequeue response
 157  * @dq: the dequeue result
 158  *
 159  * Return the frame queue context.
 160  */
 161 static inline u64 dpaa2_dq_fqd_ctx(const struct dpaa2_dq *dq)
 162 {
 163         return le64_to_cpu(dq->dq.fqd_ctx);
 164 }
 165 
 166 /**
 167  * dpaa2_dq_fd() - Get the frame descriptor in dequeue response
 168  * @dq: the dequeue result
 169  *
 170  * Return the frame descriptor.
 171  */
 172 static inline const struct dpaa2_fd *dpaa2_dq_fd(const struct dpaa2_dq *dq)
 173 {
 174         return (const struct dpaa2_fd *)&dq->dq.fd[0];
 175 }
 176 
 177 #define DPAA2_CSCN_SIZE         sizeof(struct dpaa2_dq)
 178 #define DPAA2_CSCN_ALIGN        16
 179 #define DPAA2_CSCN_STATE_CG     BIT(0)
 180 
 181 /**
 182  * dpaa2_cscn_state_congested() - Check congestion state
 183  * @cscn: congestion SCN (delivered to WQ or memory)
 184  *
 185 i * Return true is congested.
 186  */
 187 static inline bool dpaa2_cscn_state_congested(struct dpaa2_dq *cscn)
 188 {
 189         return !!(cscn->scn.state & DPAA2_CSCN_STATE_CG);
 190 }
 191 
 192 #endif /* __FSL_DPAA2_GLOBAL_H */

/* [<][>][^][v][top][bottom][index][help] */