brintos

brintos / linux-shallow public Read only

0
0
Text · 4.2 KiB · 2bfc379 Raw
193 lines · c
1/* SPDX-License-Identifier: (GPL-2.0+ OR BSD-3-Clause) */2/*3 * Copyright 2014-2016 Freescale Semiconductor Inc.4 * Copyright 2016 NXP5 *6 */7#ifndef __FSL_DPAA2_GLOBAL_H8#define __FSL_DPAA2_GLOBAL_H9 10#include <linux/types.h>11#include <linux/cpumask.h>12#include "dpaa2-fd.h"13 14struct 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       0x8048/* FQ held active */49#define DPAA2_DQ_STAT_HELDACTIVE    0x4050/* FQ force eligible */51#define DPAA2_DQ_STAT_FORCEELIGIBLE 0x2052/* valid frame */53#define DPAA2_DQ_STAT_VALIDFRAME    0x1054/* FQ ODP enable */55#define DPAA2_DQ_STAT_ODPVALID      0x0456/* volatile dequeue */57#define DPAA2_DQ_STAT_VOLATILE      0x0258/* volatile dequeue command is expired */59#define DPAA2_DQ_STAT_EXPIRED       0x0160 61#define DQ_FQID_MASK		0x00FFFFFF62#define DQ_FRAME_COUNT_MASK	0x00FFFFFF63 64/**65 * dpaa2_dq_flags() - Get the stat field of dequeue response66 * @dq: the dequeue result.67 */68static 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 pull75 *                      command.76 * @dq: the dequeue result77 *78 * Return 1 for volatile(pull) dequeue, 0 for static dequeue.79 */80static 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 result88 *89 * Return boolean.90 */91static 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 response98 * @dq: the dequeue result99 *100 * seqnum is valid only if VALIDFRAME flag is TRUE101 *102 * Return seqnum.103 */104static 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 response111 * @dq: the dequeue result112 *113 * odpid is valid only if ODPVALID flag is TRUE.114 *115 * Return odpid.116 */117static 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 response124 * @dq: the dequeue result125 *126 * Return fqid.127 */128static 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 response135 * @dq: the dequeue result136 *137 * Return the byte count remaining in the FQ.138 */139static 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 response146 * @dq: the dequeue result147 *148 * Return the frame count remaining in the FQ.149 */150static 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 response157 * @dq: the dequeue result158 *159 * Return the frame queue context.160 */161static 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 response168 * @dq: the dequeue result169 *170 * Return the frame descriptor.171 */172static 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	16179#define DPAA2_CSCN_STATE_CG	BIT(0)180 181/**182 * dpaa2_cscn_state_congested() - Check congestion state183 * @cscn: congestion SCN (delivered to WQ or memory)184 *185i * Return true is congested.186 */187static 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 */193