/* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */1/*2* Copyright 2014-2016 Freescale Semiconductor Inc.3* Copyright 2016 NXP4*5*/6#ifndef __FSL_DPAA2_GLOBAL_H7#define __FSL_DPAA2_GLOBAL_H89#include <linux/types.h>10#include <linux/cpumask.h>11#include "dpaa2-fd.h"1213struct dpaa2_dq {14union {15struct common {16u8 verb;17u8 reserved[63];18} common;19struct dq {20u8 verb;21u8 stat;22__le16 seqnum;23__le16 oprid;24u8 reserved;25u8 tok;26__le32 fqid;27u32 reserved2;28__le32 fq_byte_cnt;29__le32 fq_frm_cnt;30__le64 fqd_ctx;31u8 fd[32];32} dq;33struct scn {34u8 verb;35u8 stat;36u8 state;37u8 reserved;38__le32 rid_tok;39__le64 ctx;40} scn;41};42};4344/* Parsing frame dequeue results */45/* FQ empty */46#define DPAA2_DQ_STAT_FQEMPTY 0x8047/* FQ held active */48#define DPAA2_DQ_STAT_HELDACTIVE 0x4049/* FQ force eligible */50#define DPAA2_DQ_STAT_FORCEELIGIBLE 0x2051/* valid frame */52#define DPAA2_DQ_STAT_VALIDFRAME 0x1053/* FQ ODP enable */54#define DPAA2_DQ_STAT_ODPVALID 0x0455/* volatile dequeue */56#define DPAA2_DQ_STAT_VOLATILE 0x0257/* volatile dequeue command is expired */58#define DPAA2_DQ_STAT_EXPIRED 0x015960#define DQ_FQID_MASK 0x00FFFFFF61#define DQ_FRAME_COUNT_MASK 0x00FFFFFF6263/**64* dpaa2_dq_flags() - Get the stat field of dequeue response65* @dq: the dequeue result.66*/67static inline u32 dpaa2_dq_flags(const struct dpaa2_dq *dq)68{69return dq->dq.stat;70}7172/**73* dpaa2_dq_is_pull() - Check whether the dq response is from a pull74* command.75* @dq: the dequeue result76*77* Return 1 for volatile(pull) dequeue, 0 for static dequeue.78*/79static inline int dpaa2_dq_is_pull(const struct dpaa2_dq *dq)80{81return (int)(dpaa2_dq_flags(dq) & DPAA2_DQ_STAT_VOLATILE);82}8384/**85* dpaa2_dq_is_pull_complete() - Check whether the pull command is completed.86* @dq: the dequeue result87*88* Return boolean.89*/90static inline bool dpaa2_dq_is_pull_complete(const struct dpaa2_dq *dq)91{92return !!(dpaa2_dq_flags(dq) & DPAA2_DQ_STAT_EXPIRED);93}9495/**96* dpaa2_dq_seqnum() - Get the seqnum field in dequeue response97* @dq: the dequeue result98*99* seqnum is valid only if VALIDFRAME flag is TRUE100*101* Return seqnum.102*/103static inline u16 dpaa2_dq_seqnum(const struct dpaa2_dq *dq)104{105return le16_to_cpu(dq->dq.seqnum);106}107108/**109* dpaa2_dq_odpid() - Get the odpid field in dequeue response110* @dq: the dequeue result111*112* odpid is valid only if ODPVALID flag is TRUE.113*114* Return odpid.115*/116static inline u16 dpaa2_dq_odpid(const struct dpaa2_dq *dq)117{118return le16_to_cpu(dq->dq.oprid);119}120121/**122* dpaa2_dq_fqid() - Get the fqid in dequeue response123* @dq: the dequeue result124*125* Return fqid.126*/127static inline u32 dpaa2_dq_fqid(const struct dpaa2_dq *dq)128{129return le32_to_cpu(dq->dq.fqid) & DQ_FQID_MASK;130}131132/**133* dpaa2_dq_byte_count() - Get the byte count in dequeue response134* @dq: the dequeue result135*136* Return the byte count remaining in the FQ.137*/138static inline u32 dpaa2_dq_byte_count(const struct dpaa2_dq *dq)139{140return le32_to_cpu(dq->dq.fq_byte_cnt);141}142143/**144* dpaa2_dq_frame_count() - Get the frame count in dequeue response145* @dq: the dequeue result146*147* Return the frame count remaining in the FQ.148*/149static inline u32 dpaa2_dq_frame_count(const struct dpaa2_dq *dq)150{151return le32_to_cpu(dq->dq.fq_frm_cnt) & DQ_FRAME_COUNT_MASK;152}153154/**155* dpaa2_dq_fd_ctx() - Get the frame queue context in dequeue response156* @dq: the dequeue result157*158* Return the frame queue context.159*/160static inline u64 dpaa2_dq_fqd_ctx(const struct dpaa2_dq *dq)161{162return le64_to_cpu(dq->dq.fqd_ctx);163}164165/**166* dpaa2_dq_fd() - Get the frame descriptor in dequeue response167* @dq: the dequeue result168*169* Return the frame descriptor.170*/171static inline const struct dpaa2_fd *dpaa2_dq_fd(const struct dpaa2_dq *dq)172{173return (const struct dpaa2_fd *)&dq->dq.fd[0];174}175176#define DPAA2_CSCN_SIZE sizeof(struct dpaa2_dq)177#define DPAA2_CSCN_ALIGN 16178#define DPAA2_CSCN_STATE_CG BIT(0)179180/**181* dpaa2_cscn_state_congested() - Check congestion state182* @cscn: congestion SCN (delivered to WQ or memory)183*184i * Return true is congested.185*/186static inline bool dpaa2_cscn_state_congested(struct dpaa2_dq *cscn)187{188return !!(cscn->scn.state & DPAA2_CSCN_STATE_CG);189}190191#endif /* __FSL_DPAA2_GLOBAL_H */192193194