1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38 #ifndef _CXGB_CPL5_CMD_H_
39 #define _CXGB_CPL5_CMD_H_
40
41 #include <asm/byteorder.h>
42
43 #if !defined(__LITTLE_ENDIAN_BITFIELD) && !defined(__BIG_ENDIAN_BITFIELD)
44 #error "Adjust your <asm/byteorder.h> defines"
45 #endif
46
47 enum CPL_opcode {
48 CPL_PASS_OPEN_REQ = 0x1,
49 CPL_PASS_OPEN_RPL = 0x2,
50 CPL_PASS_ESTABLISH = 0x3,
51 CPL_PASS_ACCEPT_REQ = 0xE,
52 CPL_PASS_ACCEPT_RPL = 0x4,
53 CPL_ACT_OPEN_REQ = 0x5,
54 CPL_ACT_OPEN_RPL = 0x6,
55 CPL_CLOSE_CON_REQ = 0x7,
56 CPL_CLOSE_CON_RPL = 0x8,
57 CPL_CLOSE_LISTSRV_REQ = 0x9,
58 CPL_CLOSE_LISTSRV_RPL = 0xA,
59 CPL_ABORT_REQ = 0xB,
60 CPL_ABORT_RPL = 0xC,
61 CPL_PEER_CLOSE = 0xD,
62 CPL_ACT_ESTABLISH = 0x17,
63
64 CPL_GET_TCB = 0x24,
65 CPL_GET_TCB_RPL = 0x25,
66 CPL_SET_TCB = 0x26,
67 CPL_SET_TCB_FIELD = 0x27,
68 CPL_SET_TCB_RPL = 0x28,
69 CPL_PCMD = 0x29,
70
71 CPL_PCMD_READ = 0x31,
72 CPL_PCMD_READ_RPL = 0x32,
73
74
75 CPL_RX_DATA = 0xA0,
76 CPL_RX_DATA_DDP = 0xA1,
77 CPL_RX_DATA_ACK = 0xA3,
78 CPL_RX_PKT = 0xAD,
79 CPL_RX_ISCSI_HDR = 0xAF,
80 CPL_TX_DATA_ACK = 0xB0,
81 CPL_TX_DATA = 0xB1,
82 CPL_TX_PKT = 0xB2,
83 CPL_TX_PKT_LSO = 0xB6,
84
85 CPL_RTE_DELETE_REQ = 0xC0,
86 CPL_RTE_DELETE_RPL = 0xC1,
87 CPL_RTE_WRITE_REQ = 0xC2,
88 CPL_RTE_WRITE_RPL = 0xD3,
89 CPL_RTE_READ_REQ = 0xC3,
90 CPL_RTE_READ_RPL = 0xC4,
91 CPL_L2T_WRITE_REQ = 0xC5,
92 CPL_L2T_WRITE_RPL = 0xD4,
93 CPL_L2T_READ_REQ = 0xC6,
94 CPL_L2T_READ_RPL = 0xC7,
95 CPL_SMT_WRITE_REQ = 0xC8,
96 CPL_SMT_WRITE_RPL = 0xD5,
97 CPL_SMT_READ_REQ = 0xC9,
98 CPL_SMT_READ_RPL = 0xCA,
99 CPL_ARP_MISS_REQ = 0xCD,
100 CPL_ARP_MISS_RPL = 0xCE,
101 CPL_MIGRATE_C2T_REQ = 0xDC,
102 CPL_MIGRATE_C2T_RPL = 0xDD,
103 CPL_ERROR = 0xD7,
104
105
106 CPL_MSS_CHANGE = 0xE1
107 };
108
109 #define NUM_CPL_CMDS 256
110
111 enum CPL_error {
112 CPL_ERR_NONE = 0,
113 CPL_ERR_TCAM_PARITY = 1,
114 CPL_ERR_TCAM_FULL = 3,
115 CPL_ERR_CONN_RESET = 20,
116 CPL_ERR_CONN_EXIST = 22,
117 CPL_ERR_ARP_MISS = 23,
118 CPL_ERR_BAD_SYN = 24,
119 CPL_ERR_CONN_TIMEDOUT = 30,
120 CPL_ERR_XMIT_TIMEDOUT = 31,
121 CPL_ERR_PERSIST_TIMEDOUT = 32,
122 CPL_ERR_FINWAIT2_TIMEDOUT = 33,
123 CPL_ERR_KEEPALIVE_TIMEDOUT = 34,
124 CPL_ERR_ABORT_FAILED = 42,
125 CPL_ERR_GENERAL = 99
126 };
127
128 enum {
129 CPL_CONN_POLICY_AUTO = 0,
130 CPL_CONN_POLICY_ASK = 1,
131 CPL_CONN_POLICY_DENY = 3
132 };
133
134 enum {
135 ULP_MODE_NONE = 0,
136 ULP_MODE_TCPDDP = 1,
137 ULP_MODE_ISCSI = 2,
138 ULP_MODE_IWARP = 3,
139 ULP_MODE_SSL = 4
140 };
141
142 enum {
143 CPL_PASS_OPEN_ACCEPT,
144 CPL_PASS_OPEN_REJECT
145 };
146
147 enum {
148 CPL_ABORT_SEND_RST = 0,
149 CPL_ABORT_NO_RST,
150 CPL_ABORT_POST_CLOSE_REQ = 2
151 };
152
153 enum {
154 CPL_ETH_II,
155 CPL_ETH_II_VLAN,
156 CPL_ETH_802_3,
157 CPL_ETH_802_3_VLAN
158 };
159
160 union opcode_tid {
161 u32 opcode_tid;
162 u8 opcode;
163 };
164
165 #define S_OPCODE 24
166 #define V_OPCODE(x) ((x) << S_OPCODE)
167 #define G_OPCODE(x) (((x) >> S_OPCODE) & 0xFF)
168 #define G_TID(x) ((x) & 0xFFFFFF)
169
170
171 #define MK_OPCODE_TID(opcode, tid) (V_OPCODE(opcode) | (tid))
172
173 #define OPCODE_TID(cmd) ((cmd)->ot.opcode_tid)
174
175
176 #define GET_TID(cmd) (G_TID(ntohl(OPCODE_TID(cmd))))
177
178 struct tcp_options {
179 u16 mss;
180 u8 wsf;
181 #if defined(__LITTLE_ENDIAN_BITFIELD)
182 u8 rsvd:4;
183 u8 ecn:1;
184 u8 sack:1;
185 u8 tstamp:1;
186 #else
187 u8 tstamp:1;
188 u8 sack:1;
189 u8 ecn:1;
190 u8 rsvd:4;
191 #endif
192 };
193
194 struct cpl_pass_open_req {
195 union opcode_tid ot;
196 u16 local_port;
197 u16 peer_port;
198 u32 local_ip;
199 u32 peer_ip;
200 u32 opt0h;
201 u32 opt0l;
202 u32 peer_netmask;
203 u32 opt1;
204 };
205
206 struct cpl_pass_open_rpl {
207 union opcode_tid ot;
208 u16 local_port;
209 u16 peer_port;
210 u32 local_ip;
211 u32 peer_ip;
212 u8 resvd[7];
213 u8 status;
214 };
215
216 struct cpl_pass_establish {
217 union opcode_tid ot;
218 u16 local_port;
219 u16 peer_port;
220 u32 local_ip;
221 u32 peer_ip;
222 u32 tos_tid;
223 u8 l2t_idx;
224 u8 rsvd[3];
225 u32 snd_isn;
226 u32 rcv_isn;
227 };
228
229 struct cpl_pass_accept_req {
230 union opcode_tid ot;
231 u16 local_port;
232 u16 peer_port;
233 u32 local_ip;
234 u32 peer_ip;
235 u32 tos_tid;
236 struct tcp_options tcp_options;
237 u8 dst_mac[6];
238 u16 vlan_tag;
239 u8 src_mac[6];
240 u8 rsvd[2];
241 u32 rcv_isn;
242 u32 unknown_tcp_options;
243 };
244
245 struct cpl_pass_accept_rpl {
246 union opcode_tid ot;
247 u32 rsvd0;
248 u32 rsvd1;
249 u32 peer_ip;
250 u32 opt0h;
251 union {
252 u32 opt0l;
253 struct {
254 u8 rsvd[3];
255 u8 status;
256 };
257 };
258 };
259
260 struct cpl_act_open_req {
261 union opcode_tid ot;
262 u16 local_port;
263 u16 peer_port;
264 u32 local_ip;
265 u32 peer_ip;
266 u32 opt0h;
267 u32 opt0l;
268 u32 iff_vlantag;
269 u32 rsvd;
270 };
271
272 struct cpl_act_open_rpl {
273 union opcode_tid ot;
274 u16 local_port;
275 u16 peer_port;
276 u32 local_ip;
277 u32 peer_ip;
278 u32 new_tid;
279 u8 rsvd[3];
280 u8 status;
281 };
282
283 struct cpl_act_establish {
284 union opcode_tid ot;
285 u16 local_port;
286 u16 peer_port;
287 u32 local_ip;
288 u32 peer_ip;
289 u32 tos_tid;
290 u32 rsvd;
291 u32 snd_isn;
292 u32 rcv_isn;
293 };
294
295 struct cpl_get_tcb {
296 union opcode_tid ot;
297 u32 rsvd;
298 };
299
300 struct cpl_get_tcb_rpl {
301 union opcode_tid ot;
302 u16 len;
303 u8 rsvd;
304 u8 status;
305 };
306
307 struct cpl_set_tcb {
308 union opcode_tid ot;
309 u16 len;
310 u16 rsvd;
311 };
312
313 struct cpl_set_tcb_field {
314 union opcode_tid ot;
315 u8 rsvd[3];
316 u8 offset;
317 u32 mask;
318 u32 val;
319 };
320
321 struct cpl_set_tcb_rpl {
322 union opcode_tid ot;
323 u8 rsvd[3];
324 u8 status;
325 };
326
327 struct cpl_pcmd {
328 union opcode_tid ot;
329 u16 dlen_in;
330 u16 dlen_out;
331 u32 pcmd_parm[2];
332 };
333
334 struct cpl_pcmd_read {
335 union opcode_tid ot;
336 u32 rsvd1;
337 u16 rsvd2;
338 u32 addr;
339 u16 len;
340 };
341
342 struct cpl_pcmd_read_rpl {
343 union opcode_tid ot;
344 u16 len;
345 };
346
347 struct cpl_close_con_req {
348 union opcode_tid ot;
349 u32 rsvd;
350 };
351
352 struct cpl_close_con_rpl {
353 union opcode_tid ot;
354 u8 rsvd[3];
355 u8 status;
356 u32 snd_nxt;
357 u32 rcv_nxt;
358 };
359
360 struct cpl_close_listserv_req {
361 union opcode_tid ot;
362 u32 rsvd;
363 };
364
365 struct cpl_close_listserv_rpl {
366 union opcode_tid ot;
367 u8 rsvd[3];
368 u8 status;
369 };
370
371 struct cpl_abort_req {
372 union opcode_tid ot;
373 u32 rsvd0;
374 u8 rsvd1;
375 u8 cmd;
376 u8 rsvd2[6];
377 };
378
379 struct cpl_abort_rpl {
380 union opcode_tid ot;
381 u32 rsvd0;
382 u8 rsvd1;
383 u8 status;
384 u8 rsvd2[6];
385 };
386
387 struct cpl_peer_close {
388 union opcode_tid ot;
389 u32 rsvd;
390 };
391
392 struct cpl_tx_data {
393 union opcode_tid ot;
394 u32 len;
395 u32 rsvd0;
396 u16 urg;
397 u16 flags;
398 };
399
400 struct cpl_tx_data_ack {
401 union opcode_tid ot;
402 u32 ack_seq;
403 };
404
405 struct cpl_rx_data {
406 union opcode_tid ot;
407 u32 len;
408 u32 seq;
409 u16 urg;
410 u8 rsvd;
411 u8 status;
412 };
413
414 struct cpl_rx_data_ack {
415 union opcode_tid ot;
416 u32 credit;
417 };
418
419 struct cpl_rx_data_ddp {
420 union opcode_tid ot;
421 u32 len;
422 u32 seq;
423 u32 nxt_seq;
424 u32 ulp_crc;
425 u16 ddp_status;
426 u8 rsvd;
427 u8 status;
428 };
429
430
431
432
433
434
435 struct cpl_tx_pkt {
436 u8 opcode;
437 #if defined(__LITTLE_ENDIAN_BITFIELD)
438 u8 iff:4;
439 u8 ip_csum_dis:1;
440 u8 l4_csum_dis:1;
441 u8 vlan_valid:1;
442 u8 rsvd:1;
443 #else
444 u8 rsvd:1;
445 u8 vlan_valid:1;
446 u8 l4_csum_dis:1;
447 u8 ip_csum_dis:1;
448 u8 iff:4;
449 #endif
450 u16 vlan;
451 u16 len_hi;
452 u16 len_lo;
453 };
454
455 struct cpl_tx_pkt_lso {
456 u8 opcode;
457 #if defined(__LITTLE_ENDIAN_BITFIELD)
458 u8 iff:4;
459 u8 ip_csum_dis:1;
460 u8 l4_csum_dis:1;
461 u8 vlan_valid:1;
462 u8 :1;
463 #else
464 u8 :1;
465 u8 vlan_valid:1;
466 u8 l4_csum_dis:1;
467 u8 ip_csum_dis:1;
468 u8 iff:4;
469 #endif
470 u16 vlan;
471 __be32 len;
472
473 u8 rsvd[5];
474 #if defined(__LITTLE_ENDIAN_BITFIELD)
475 u8 tcp_hdr_words:4;
476 u8 ip_hdr_words:4;
477 #else
478 u8 ip_hdr_words:4;
479 u8 tcp_hdr_words:4;
480 #endif
481 __be16 eth_type_mss;
482 };
483
484 struct cpl_rx_pkt {
485 u8 opcode;
486 #if defined(__LITTLE_ENDIAN_BITFIELD)
487 u8 iff:4;
488 u8 csum_valid:1;
489 u8 bad_pkt:1;
490 u8 vlan_valid:1;
491 u8 rsvd:1;
492 #else
493 u8 rsvd:1;
494 u8 vlan_valid:1;
495 u8 bad_pkt:1;
496 u8 csum_valid:1;
497 u8 iff:4;
498 #endif
499 u16 csum;
500 u16 vlan;
501 u16 len;
502 };
503
504 struct cpl_l2t_write_req {
505 union opcode_tid ot;
506 u32 params;
507 u8 rsvd1[2];
508 u8 dst_mac[6];
509 };
510
511 struct cpl_l2t_write_rpl {
512 union opcode_tid ot;
513 u8 status;
514 u8 rsvd[3];
515 };
516
517 struct cpl_l2t_read_req {
518 union opcode_tid ot;
519 u8 rsvd[3];
520 u8 l2t_idx;
521 };
522
523 struct cpl_l2t_read_rpl {
524 union opcode_tid ot;
525 u32 params;
526 u8 rsvd1[2];
527 u8 dst_mac[6];
528 };
529
530 struct cpl_smt_write_req {
531 union opcode_tid ot;
532 u8 rsvd0;
533 #if defined(__LITTLE_ENDIAN_BITFIELD)
534 u8 rsvd1:1;
535 u8 mtu_idx:3;
536 u8 iff:4;
537 #else
538 u8 iff:4;
539 u8 mtu_idx:3;
540 u8 rsvd1:1;
541 #endif
542 u16 rsvd2;
543 u16 rsvd3;
544 u8 src_mac1[6];
545 u16 rsvd4;
546 u8 src_mac0[6];
547 };
548
549 struct cpl_smt_write_rpl {
550 union opcode_tid ot;
551 u8 status;
552 u8 rsvd[3];
553 };
554
555 struct cpl_smt_read_req {
556 union opcode_tid ot;
557 u8 rsvd0;
558 #if defined(__LITTLE_ENDIAN_BITFIELD)
559 u8 rsvd1:4;
560 u8 iff:4;
561 #else
562 u8 iff:4;
563 u8 rsvd1:4;
564 #endif
565 u16 rsvd2;
566 };
567
568 struct cpl_smt_read_rpl {
569 union opcode_tid ot;
570 u8 status;
571 #if defined(__LITTLE_ENDIAN_BITFIELD)
572 u8 rsvd1:1;
573 u8 mtu_idx:3;
574 u8 rsvd0:4;
575 #else
576 u8 rsvd0:4;
577 u8 mtu_idx:3;
578 u8 rsvd1:1;
579 #endif
580 u16 rsvd2;
581 u16 rsvd3;
582 u8 src_mac1[6];
583 u16 rsvd4;
584 u8 src_mac0[6];
585 };
586
587 struct cpl_rte_delete_req {
588 union opcode_tid ot;
589 u32 params;
590 };
591
592 struct cpl_rte_delete_rpl {
593 union opcode_tid ot;
594 u8 status;
595 u8 rsvd[3];
596 };
597
598 struct cpl_rte_write_req {
599 union opcode_tid ot;
600 u32 params;
601 u32 netmask;
602 u32 faddr;
603 };
604
605 struct cpl_rte_write_rpl {
606 union opcode_tid ot;
607 u8 status;
608 u8 rsvd[3];
609 };
610
611 struct cpl_rte_read_req {
612 union opcode_tid ot;
613 u32 params;
614 };
615
616 struct cpl_rte_read_rpl {
617 union opcode_tid ot;
618 u8 status;
619 u8 rsvd0[2];
620 u8 l2t_idx;
621 #if defined(__LITTLE_ENDIAN_BITFIELD)
622 u8 rsvd1:7;
623 u8 select:1;
624 #else
625 u8 select:1;
626 u8 rsvd1:7;
627 #endif
628 u8 rsvd2[3];
629 u32 addr;
630 };
631
632 struct cpl_mss_change {
633 union opcode_tid ot;
634 u32 mss;
635 };
636
637 #endif
638