Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/include/soc/fsl/dpaa2-global.h
26288 views
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 */
193
194