@@ -56,6 +56,64 @@ enum idpf_rss_hash {
56
56
BIT_ULL(IDPF_HASH_NONF_UNICAST_IPV6_UDP) | \
57
57
BIT_ULL(IDPF_HASH_NONF_MULTICAST_IPV6_UDP))
58
58
59
+ #define IDPF_TXD_CTX_QW1_MSS_S 50
60
+ #define IDPF_TXD_CTX_QW1_MSS_M GENMASK_ULL(63, 50)
61
+ #define IDPF_TXD_CTX_QW1_TSO_LEN_S 30
62
+ #define IDPF_TXD_CTX_QW1_TSO_LEN_M GENMASK_ULL(47, 30)
63
+ #define IDPF_TXD_CTX_QW1_CMD_S 4
64
+ #define IDPF_TXD_CTX_QW1_CMD_M GENMASK_ULL(15, 4)
65
+ #define IDPF_TXD_CTX_QW1_DTYPE_S 0
66
+ #define IDPF_TXD_CTX_QW1_DTYPE_M GENMASK_ULL(3, 0)
67
+ #define IDPF_TXD_QW1_L2TAG1_S 48
68
+ #define IDPF_TXD_QW1_L2TAG1_M GENMASK_ULL(63, 48)
69
+ #define IDPF_TXD_QW1_TX_BUF_SZ_S 34
70
+ #define IDPF_TXD_QW1_TX_BUF_SZ_M GENMASK_ULL(47, 34)
71
+ #define IDPF_TXD_QW1_OFFSET_S 16
72
+ #define IDPF_TXD_QW1_OFFSET_M GENMASK_ULL(33, 16)
73
+ #define IDPF_TXD_QW1_CMD_S 4
74
+ #define IDPF_TXD_QW1_CMD_M GENMASK_ULL(15, 4)
75
+ #define IDPF_TXD_QW1_DTYPE_S 0
76
+ #define IDPF_TXD_QW1_DTYPE_M GENMASK_ULL(3, 0)
77
+
78
+ enum idpf_tx_desc_dtype_value {
79
+ IDPF_TX_DESC_DTYPE_DATA = 0 ,
80
+ IDPF_TX_DESC_DTYPE_CTX = 1 ,
81
+ /* DTYPE 2 is reserved
82
+ * DTYPE 3 is free for future use
83
+ * DTYPE 4 is reserved
84
+ */
85
+ IDPF_TX_DESC_DTYPE_FLEX_TSO_CTX = 5 ,
86
+ /* DTYPE 6 is reserved */
87
+ IDPF_TX_DESC_DTYPE_FLEX_L2TAG1_L2TAG2 = 7 ,
88
+ /* DTYPE 8, 9 are free for future use
89
+ * DTYPE 10 is reserved
90
+ * DTYPE 11 is free for future use
91
+ */
92
+ IDPF_TX_DESC_DTYPE_FLEX_FLOW_SCHE = 12 ,
93
+ /* DTYPE 13, 14 are free for future use */
94
+
95
+ /* DESC_DONE - HW has completed write-back of descriptor */
96
+ IDPF_TX_DESC_DTYPE_DESC_DONE = 15 ,
97
+ };
98
+
99
+ enum idpf_tx_base_desc_cmd_bits {
100
+ IDPF_TX_DESC_CMD_EOP = BIT (0 ),
101
+ IDPF_TX_DESC_CMD_RS = BIT (1 ),
102
+ /* only on VFs else RSVD */
103
+ IDPF_TX_DESC_CMD_ICRC = BIT (2 ),
104
+ IDPF_TX_DESC_CMD_IL2TAG1 = BIT (3 ),
105
+ IDPF_TX_DESC_CMD_RSVD1 = BIT (4 ),
106
+ IDPF_TX_DESC_CMD_IIPT_IPV6 = BIT (5 ),
107
+ IDPF_TX_DESC_CMD_IIPT_IPV4 = BIT (6 ),
108
+ IDPF_TX_DESC_CMD_IIPT_IPV4_CSUM = GENMASK (6 , 5 ),
109
+ IDPF_TX_DESC_CMD_RSVD2 = BIT (7 ),
110
+ IDPF_TX_DESC_CMD_L4T_EOFT_TCP = BIT (8 ),
111
+ IDPF_TX_DESC_CMD_L4T_EOFT_SCTP = BIT (9 ),
112
+ IDPF_TX_DESC_CMD_L4T_EOFT_UDP = GENMASK (9 , 8 ),
113
+ IDPF_TX_DESC_CMD_RSVD3 = BIT (10 ),
114
+ IDPF_TX_DESC_CMD_RSVD4 = BIT (11 ),
115
+ };
116
+
59
117
/* Transmit descriptors */
60
118
/* splitq tx buf, singleq tx buf and singleq compl desc */
61
119
struct idpf_base_tx_desc {
@@ -74,4 +132,89 @@ struct idpf_splitq_tx_compl_desc {
74
132
u8 rsvd ; /* Reserved */
75
133
}; /* writeback used with completion queues */
76
134
135
+ /* Common cmd field defines for all desc except Flex Flow Scheduler (0x0C) */
136
+ enum idpf_tx_flex_desc_cmd_bits {
137
+ IDPF_TX_FLEX_DESC_CMD_EOP = BIT (0 ),
138
+ IDPF_TX_FLEX_DESC_CMD_RS = BIT (1 ),
139
+ IDPF_TX_FLEX_DESC_CMD_RE = BIT (2 ),
140
+ IDPF_TX_FLEX_DESC_CMD_IL2TAG1 = BIT (3 ),
141
+ IDPF_TX_FLEX_DESC_CMD_DUMMY = BIT (4 ),
142
+ IDPF_TX_FLEX_DESC_CMD_CS_EN = BIT (5 ),
143
+ IDPF_TX_FLEX_DESC_CMD_FILT_AU_EN = BIT (6 ),
144
+ IDPF_TX_FLEX_DESC_CMD_FILT_AU_EVICT = BIT (7 ),
145
+ };
146
+
147
+ struct idpf_flex_tx_desc {
148
+ __le64 buf_addr ; /* Packet buffer address */
149
+ struct {
150
+ #define IDPF_FLEX_TXD_QW1_DTYPE_S 0
151
+ #define IDPF_FLEX_TXD_QW1_DTYPE_M GENMASK(4, 0)
152
+ #define IDPF_FLEX_TXD_QW1_CMD_S 5
153
+ #define IDPF_FLEX_TXD_QW1_CMD_M GENMASK(15, 5)
154
+ __le16 cmd_dtype ;
155
+ /* DTYPE=IDPF_TX_DESC_DTYPE_FLEX_L2TAG1_L2TAG2 (0x07) */
156
+ struct {
157
+ __le16 l2tag1 ;
158
+ __le16 l2tag2 ;
159
+ } l2tags ;
160
+ __le16 buf_size ;
161
+ } qw1 ;
162
+ };
163
+
164
+ struct idpf_flex_tx_sched_desc {
165
+ __le64 buf_addr ; /* Packet buffer address */
166
+
167
+ /* DTYPE = IDPF_TX_DESC_DTYPE_FLEX_FLOW_SCHE_16B (0x0C) */
168
+ struct {
169
+ u8 cmd_dtype ;
170
+ #define IDPF_TXD_FLEX_FLOW_DTYPE_M GENMASK(4, 0)
171
+ #define IDPF_TXD_FLEX_FLOW_CMD_EOP BIT(5)
172
+ #define IDPF_TXD_FLEX_FLOW_CMD_CS_EN BIT(6)
173
+ #define IDPF_TXD_FLEX_FLOW_CMD_RE BIT(7)
174
+
175
+ /* [23:23] Horizon Overflow bit, [22:0] timestamp */
176
+ u8 ts [3 ];
177
+ #define IDPF_TXD_FLOW_SCH_HORIZON_OVERFLOW_M BIT(7)
178
+
179
+ __le16 compl_tag ;
180
+ __le16 rxr_bufsize ;
181
+ #define IDPF_TXD_FLEX_FLOW_RXR BIT(14)
182
+ #define IDPF_TXD_FLEX_FLOW_BUFSIZE_M GENMASK(13, 0)
183
+ } qw1 ;
184
+ };
185
+
186
+ /* Common cmd fields for all flex context descriptors
187
+ * Note: these defines already account for the 5 bit dtype in the cmd_dtype
188
+ * field
189
+ */
190
+ enum idpf_tx_flex_ctx_desc_cmd_bits {
191
+ IDPF_TX_FLEX_CTX_DESC_CMD_TSO = BIT (5 ),
192
+ IDPF_TX_FLEX_CTX_DESC_CMD_TSYN_EN = BIT (6 ),
193
+ IDPF_TX_FLEX_CTX_DESC_CMD_L2TAG2 = BIT (7 ),
194
+ IDPF_TX_FLEX_CTX_DESC_CMD_SWTCH_UPLNK = BIT (9 ),
195
+ IDPF_TX_FLEX_CTX_DESC_CMD_SWTCH_LOCAL = BIT (10 ),
196
+ IDPF_TX_FLEX_CTX_DESC_CMD_SWTCH_TARGETVSI = GENMASK (10 , 9 ),
197
+ };
198
+
199
+ /* Standard flex descriptor TSO context quad word */
200
+ struct idpf_flex_tx_tso_ctx_qw {
201
+ __le32 flex_tlen ;
202
+ #define IDPF_TXD_FLEX_CTX_TLEN_M GENMASK(17, 0)
203
+ #define IDPF_TXD_FLEX_TSO_CTX_FLEX_S 24
204
+ __le16 mss_rt ;
205
+ #define IDPF_TXD_FLEX_CTX_MSS_RT_M GENMASK(13, 0)
206
+ u8 hdr_len ;
207
+ u8 flex ;
208
+ };
209
+
210
+ struct idpf_flex_tx_ctx_desc {
211
+ /* DTYPE = IDPF_TX_DESC_DTYPE_FLEX_TSO_CTX (0x05) */
212
+ struct {
213
+ struct idpf_flex_tx_tso_ctx_qw qw0 ;
214
+ struct {
215
+ __le16 cmd_dtype ;
216
+ u8 flex [6 ];
217
+ } qw1 ;
218
+ } tso ;
219
+ };
77
220
#endif /* _IDPF_LAN_TXRX_H_ */
0 commit comments