123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- /* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */
- /*
- * Copyright 2014-2016 Freescale Semiconductor Inc.
- * Copyright 2016 NXP
- *
- */
- #ifndef __FSL_DPAA2_GLOBAL_H
- #define __FSL_DPAA2_GLOBAL_H
- #include <linux/types.h>
- #include <linux/cpumask.h>
- #include "dpaa2-fd.h"
- struct dpaa2_dq {
- union {
- struct common {
- u8 verb;
- u8 reserved[63];
- } common;
- struct dq {
- u8 verb;
- u8 stat;
- __le16 seqnum;
- __le16 oprid;
- u8 reserved;
- u8 tok;
- __le32 fqid;
- u32 reserved2;
- __le32 fq_byte_cnt;
- __le32 fq_frm_cnt;
- __le64 fqd_ctx;
- u8 fd[32];
- } dq;
- struct scn {
- u8 verb;
- u8 stat;
- u8 state;
- u8 reserved;
- __le32 rid_tok;
- __le64 ctx;
- } scn;
- };
- };
- /* Parsing frame dequeue results */
- /* FQ empty */
- #define DPAA2_DQ_STAT_FQEMPTY 0x80
- /* FQ held active */
- #define DPAA2_DQ_STAT_HELDACTIVE 0x40
- /* FQ force eligible */
- #define DPAA2_DQ_STAT_FORCEELIGIBLE 0x20
- /* valid frame */
- #define DPAA2_DQ_STAT_VALIDFRAME 0x10
- /* FQ ODP enable */
- #define DPAA2_DQ_STAT_ODPVALID 0x04
- /* volatile dequeue */
- #define DPAA2_DQ_STAT_VOLATILE 0x02
- /* volatile dequeue command is expired */
- #define DPAA2_DQ_STAT_EXPIRED 0x01
- #define DQ_FQID_MASK 0x00FFFFFF
- #define DQ_FRAME_COUNT_MASK 0x00FFFFFF
- /**
- * dpaa2_dq_flags() - Get the stat field of dequeue response
- * @dq: the dequeue result.
- */
- static inline u32 dpaa2_dq_flags(const struct dpaa2_dq *dq)
- {
- return dq->dq.stat;
- }
- /**
- * dpaa2_dq_is_pull() - Check whether the dq response is from a pull
- * command.
- * @dq: the dequeue result
- *
- * Return 1 for volatile(pull) dequeue, 0 for static dequeue.
- */
- static inline int dpaa2_dq_is_pull(const struct dpaa2_dq *dq)
- {
- return (int)(dpaa2_dq_flags(dq) & DPAA2_DQ_STAT_VOLATILE);
- }
- /**
- * dpaa2_dq_is_pull_complete() - Check whether the pull command is completed.
- * @dq: the dequeue result
- *
- * Return boolean.
- */
- static inline bool dpaa2_dq_is_pull_complete(const struct dpaa2_dq *dq)
- {
- return !!(dpaa2_dq_flags(dq) & DPAA2_DQ_STAT_EXPIRED);
- }
- /**
- * dpaa2_dq_seqnum() - Get the seqnum field in dequeue response
- * @dq: the dequeue result
- *
- * seqnum is valid only if VALIDFRAME flag is TRUE
- *
- * Return seqnum.
- */
- static inline u16 dpaa2_dq_seqnum(const struct dpaa2_dq *dq)
- {
- return le16_to_cpu(dq->dq.seqnum);
- }
- /**
- * dpaa2_dq_odpid() - Get the odpid field in dequeue response
- * @dq: the dequeue result
- *
- * odpid is valid only if ODPVALID flag is TRUE.
- *
- * Return odpid.
- */
- static inline u16 dpaa2_dq_odpid(const struct dpaa2_dq *dq)
- {
- return le16_to_cpu(dq->dq.oprid);
- }
- /**
- * dpaa2_dq_fqid() - Get the fqid in dequeue response
- * @dq: the dequeue result
- *
- * Return fqid.
- */
- static inline u32 dpaa2_dq_fqid(const struct dpaa2_dq *dq)
- {
- return le32_to_cpu(dq->dq.fqid) & DQ_FQID_MASK;
- }
- /**
- * dpaa2_dq_byte_count() - Get the byte count in dequeue response
- * @dq: the dequeue result
- *
- * Return the byte count remaining in the FQ.
- */
- static inline u32 dpaa2_dq_byte_count(const struct dpaa2_dq *dq)
- {
- return le32_to_cpu(dq->dq.fq_byte_cnt);
- }
- /**
- * dpaa2_dq_frame_count() - Get the frame count in dequeue response
- * @dq: the dequeue result
- *
- * Return the frame count remaining in the FQ.
- */
- static inline u32 dpaa2_dq_frame_count(const struct dpaa2_dq *dq)
- {
- return le32_to_cpu(dq->dq.fq_frm_cnt) & DQ_FRAME_COUNT_MASK;
- }
- /**
- * dpaa2_dq_fd_ctx() - Get the frame queue context in dequeue response
- * @dq: the dequeue result
- *
- * Return the frame queue context.
- */
- static inline u64 dpaa2_dq_fqd_ctx(const struct dpaa2_dq *dq)
- {
- return le64_to_cpu(dq->dq.fqd_ctx);
- }
- /**
- * dpaa2_dq_fd() - Get the frame descriptor in dequeue response
- * @dq: the dequeue result
- *
- * Return the frame descriptor.
- */
- static inline const struct dpaa2_fd *dpaa2_dq_fd(const struct dpaa2_dq *dq)
- {
- return (const struct dpaa2_fd *)&dq->dq.fd[0];
- }
- #endif /* __FSL_DPAA2_GLOBAL_H */
|