xref: /freebsd/usr.sbin/cxgbetool/tcbshowt4.c (revision ae9b401786f5dc55255b46e031290ae1db937a33)
1*ae9b4017SNavdeep Parhar /*-
2*ae9b4017SNavdeep Parhar  * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3*ae9b4017SNavdeep Parhar  *
4*ae9b4017SNavdeep Parhar  * Copyright (c) 2018 Chelsio Communications, Inc.
5*ae9b4017SNavdeep Parhar  * All rights reserved.
6*ae9b4017SNavdeep Parhar  *
7*ae9b4017SNavdeep Parhar  * Redistribution and use in source and binary forms, with or without
8*ae9b4017SNavdeep Parhar  * modification, are permitted provided that the following conditions
9*ae9b4017SNavdeep Parhar  * are met:
10*ae9b4017SNavdeep Parhar  * 1. Redistributions of source code must retain the above copyright
11*ae9b4017SNavdeep Parhar  *    notice, this list of conditions and the following disclaimer.
12*ae9b4017SNavdeep Parhar  * 2. Redistributions in binary form must reproduce the above copyright
13*ae9b4017SNavdeep Parhar  *    notice, this list of conditions and the following disclaimer in the
14*ae9b4017SNavdeep Parhar  *    documentation and/or other materials provided with the distribution.
15*ae9b4017SNavdeep Parhar  *
16*ae9b4017SNavdeep Parhar  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17*ae9b4017SNavdeep Parhar  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18*ae9b4017SNavdeep Parhar  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19*ae9b4017SNavdeep Parhar  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20*ae9b4017SNavdeep Parhar  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21*ae9b4017SNavdeep Parhar  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22*ae9b4017SNavdeep Parhar  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23*ae9b4017SNavdeep Parhar  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24*ae9b4017SNavdeep Parhar  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25*ae9b4017SNavdeep Parhar  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26*ae9b4017SNavdeep Parhar  * SUCH DAMAGE.
27*ae9b4017SNavdeep Parhar  */
28*ae9b4017SNavdeep Parhar 
29*ae9b4017SNavdeep Parhar #include <sys/cdefs.h>
30*ae9b4017SNavdeep Parhar __FBSDID("$FreeBSD$");
31*ae9b4017SNavdeep Parhar 
32*ae9b4017SNavdeep Parhar /* Auto-generated file.  Avoid direct editing.     */
33*ae9b4017SNavdeep Parhar /* Edits will be lost when file regenerated.       */
34*ae9b4017SNavdeep Parhar #include <stdio.h>
35*ae9b4017SNavdeep Parhar #include "tcb_common.h"
36*ae9b4017SNavdeep Parhar 
37*ae9b4017SNavdeep Parhar void t4_display_tcb_aux_0 (_TCBVAR *tvp, int aux)
38*ae9b4017SNavdeep Parhar {
39*ae9b4017SNavdeep Parhar 
40*ae9b4017SNavdeep Parhar 
41*ae9b4017SNavdeep Parhar 
42*ae9b4017SNavdeep Parhar 
43*ae9b4017SNavdeep Parhar 
44*ae9b4017SNavdeep Parhar 
45*ae9b4017SNavdeep Parhar 
46*ae9b4017SNavdeep Parhar   PR("STATE:\n");
47*ae9b4017SNavdeep Parhar   PR("  %-12s (%-2u), %s, lock_tid %u, init %u\n",
48*ae9b4017SNavdeep Parhar 	      spr_tcp_state(val("t_state")),
49*ae9b4017SNavdeep Parhar 	      val("t_state"),
50*ae9b4017SNavdeep Parhar 	      spr_ip_version(val("ip_version")),
51*ae9b4017SNavdeep Parhar 	      val("lock_tid"),
52*ae9b4017SNavdeep Parhar 	      val("init")
53*ae9b4017SNavdeep Parhar 	     );
54*ae9b4017SNavdeep Parhar   PR("  l2t_ix 0x%x, smac sel 0x%x, tos 0x%x\n",
55*ae9b4017SNavdeep Parhar 	      val("l2t_ix"),
56*ae9b4017SNavdeep Parhar 	      val("smac_sel"),
57*ae9b4017SNavdeep Parhar 	      val("tos")
58*ae9b4017SNavdeep Parhar 	      );
59*ae9b4017SNavdeep Parhar   PR("  maxseg %u, recv_scaleflag %u, recv_tstmp %u, recv_sack %u\n",
60*ae9b4017SNavdeep Parhar 	      val("t_maxseg"),   val("recv_scale"),
61*ae9b4017SNavdeep Parhar 	      val("recv_tstmp"), val("recv_sack"));
62*ae9b4017SNavdeep Parhar 
63*ae9b4017SNavdeep Parhar 
64*ae9b4017SNavdeep Parhar   PR("TIMERS:\n"); /* **************************************** */
65*ae9b4017SNavdeep Parhar   PR("  timer    %u,  dack_timer      %u\n",
66*ae9b4017SNavdeep Parhar 	   val("timer"), val("dack_timer"));
67*ae9b4017SNavdeep Parhar   PR("  mod_schd: tx: %u, rx: %u, reason 0x%1x\n",
68*ae9b4017SNavdeep Parhar 	      val("mod_schd_tx"),
69*ae9b4017SNavdeep Parhar 	      val("mod_schd_rx"),
70*ae9b4017SNavdeep Parhar 	      ((val("mod_schd_reason2")<<2) | (val("mod_schd_reason1")<<1) |
71*ae9b4017SNavdeep Parhar 	       val("mod_schd_reason0"))
72*ae9b4017SNavdeep Parhar 	      );
73*ae9b4017SNavdeep Parhar 
74*ae9b4017SNavdeep Parhar 
75*ae9b4017SNavdeep Parhar   PR("  max_rt   %-2u, rxtshift        %u, keepalive   %u\n",
76*ae9b4017SNavdeep Parhar 	   val("max_rt"),  val("t_rxtshift"),
77*ae9b4017SNavdeep Parhar 	   val("keepalive"));
78*ae9b4017SNavdeep Parhar   PR("  timestamp_offset 0x%x,  timestamp 0x%x\n",
79*ae9b4017SNavdeep Parhar 	   val("timestamp_offset"),val("timestamp"));
80*ae9b4017SNavdeep Parhar 
81*ae9b4017SNavdeep Parhar 
82*ae9b4017SNavdeep Parhar   PR("  t_rtt_ts_recent_age %u  t_rttseq_recent %u\n",
83*ae9b4017SNavdeep Parhar 	   val("t_rtt_ts_recent_age"), val("t_rtseq_recent"));
84*ae9b4017SNavdeep Parhar   PR("  t_srtt %u, t_rttvar %u\n",
85*ae9b4017SNavdeep Parhar 	   val("t_srtt"),val("t_rttvar"));
86*ae9b4017SNavdeep Parhar 
87*ae9b4017SNavdeep Parhar 
88*ae9b4017SNavdeep Parhar 
89*ae9b4017SNavdeep Parhar 
90*ae9b4017SNavdeep Parhar 
91*ae9b4017SNavdeep Parhar 
92*ae9b4017SNavdeep Parhar   PR("TRANSMIT BUFFER:\n");   /* *************************** */
93*ae9b4017SNavdeep Parhar   PR("  snd_una %u, snd_nxt %u, snd_max %u, tx_max %u\n",
94*ae9b4017SNavdeep Parhar 	      val("snd_una"),val("snd_nxt"),
95*ae9b4017SNavdeep Parhar 	      val("snd_max"),val("tx_max"));
96*ae9b4017SNavdeep Parhar   PR("  core_fin %u, tx_hdr_offset %u\n",
97*ae9b4017SNavdeep Parhar 	      val("core_fin"), SEQ_SUB(val("tx_max"),val("snd_una"))
98*ae9b4017SNavdeep Parhar 	     );
99*ae9b4017SNavdeep Parhar   if (val("recv_scale") && !val("active_open")) {
100*ae9b4017SNavdeep Parhar     PR("  rcv_adv    %-5u << %-2u == %u (recv_scaleflag %u rcv_scale %u active open %u)\n",
101*ae9b4017SNavdeep Parhar 		val("rcv_adv"), val("rcv_scale"),
102*ae9b4017SNavdeep Parhar 		val("rcv_adv") << val("rcv_scale"),
103*ae9b4017SNavdeep Parhar 		val("recv_scale"), val("rcv_scale"), val("active_open"));
104*ae9b4017SNavdeep Parhar   } else {
105*ae9b4017SNavdeep Parhar     PR("  rcv_adv    %-5u (rcv_scale %-2u recv_scaleflag %u active_open %u)\n",
106*ae9b4017SNavdeep Parhar 		val("rcv_adv"), val("rcv_scale"),
107*ae9b4017SNavdeep Parhar 		val("recv_scale"), val("active_open"));
108*ae9b4017SNavdeep Parhar   }
109*ae9b4017SNavdeep Parhar 
110*ae9b4017SNavdeep Parhar   PR("  snd_cwnd   %-5u  snd_ssthresh %u  snd_rec %u\n",
111*ae9b4017SNavdeep Parhar 	      val("snd_cwnd")    , val("snd_ssthresh"), val("snd_rec")
112*ae9b4017SNavdeep Parhar 	     );
113*ae9b4017SNavdeep Parhar 
114*ae9b4017SNavdeep Parhar 
115*ae9b4017SNavdeep Parhar 
116*ae9b4017SNavdeep Parhar 
117*ae9b4017SNavdeep Parhar   PR("  cctrl: sel %s, ecn %u, ece %u, cwr %u, rfr %u\n",
118*ae9b4017SNavdeep Parhar 	      spr_cctrl_sel(val("cctrl_sel0"),val("cctrl_sel1")),
119*ae9b4017SNavdeep Parhar 	      val("cctrl_ecn"), val("cctrl_ece"), val("cctrl_cwr"),
120*ae9b4017SNavdeep Parhar 	      val("cctrl_rfr"));
121*ae9b4017SNavdeep Parhar   PR("  t_dupacks %u, dupack_count_odd %u, fast_recovery %u\n",
122*ae9b4017SNavdeep Parhar 	      val("t_dupacks"), val("dupack_count_odd"),val("fast_recovery"));
123*ae9b4017SNavdeep Parhar   PR("  core_more    %u, core_urg,       %u  core_push   %u,",
124*ae9b4017SNavdeep Parhar 	      val("core_more"),val("core_urg"),val("core_push"));
125*ae9b4017SNavdeep Parhar   PR("  core_flush %u\n",val("core_flush"));
126*ae9b4017SNavdeep Parhar   PR("  nagle        %u, ssws_disable    %u, turbo       %u,",
127*ae9b4017SNavdeep Parhar 	      val("nagle"), val("ssws_disabled"), val("turbo"));
128*ae9b4017SNavdeep Parhar   PR("  tx_pdu_out %u\n",val("tx_pdu_out"));
129*ae9b4017SNavdeep Parhar   PR("  tx_pace_auto %u, tx_pace_fixed   %u, tx_queue    %u",
130*ae9b4017SNavdeep Parhar 	      val("tx_pace_auto"),val("tx_pace_fixed"),val("tx_queue"));
131*ae9b4017SNavdeep Parhar 
132*ae9b4017SNavdeep Parhar 
133*ae9b4017SNavdeep Parhar   PR("   tx_quiesce %u\n",val("tx_quiesce"));
134*ae9b4017SNavdeep Parhar   PR("  tx_channel   %u, tx_channel1     %u, tx_channel0 %u\n",
135*ae9b4017SNavdeep Parhar 	      val("tx_channel"),
136*ae9b4017SNavdeep Parhar 	      (val("tx_channel")>>1)&1,
137*ae9b4017SNavdeep Parhar 	      val("tx_channel")&1
138*ae9b4017SNavdeep Parhar 	      );
139*ae9b4017SNavdeep Parhar 
140*ae9b4017SNavdeep Parhar 
141*ae9b4017SNavdeep Parhar 
142*ae9b4017SNavdeep Parhar 
143*ae9b4017SNavdeep Parhar   PR("  tx_hdr_ptr   0x%-6x   tx_last_ptr 0x%-6x  tx_compact %u\n",
144*ae9b4017SNavdeep Parhar 	      val("tx_hdr_ptr"),val("tx_last_ptr"),val("tx_compact"));
145*ae9b4017SNavdeep Parhar 
146*ae9b4017SNavdeep Parhar 
147*ae9b4017SNavdeep Parhar 
148*ae9b4017SNavdeep Parhar 
149*ae9b4017SNavdeep Parhar   PR("RECEIVE BUFFER:\n");  /* *************************** */
150*ae9b4017SNavdeep Parhar   PR("  last_ack_sent %-10u                      rx_compact %u\n",
151*ae9b4017SNavdeep Parhar 	      val("ts_last_ack_sent"),val("rx_compact"));
152*ae9b4017SNavdeep Parhar   PR("  rcv_nxt       %-10u  hdr_off %-10u\n",
153*ae9b4017SNavdeep Parhar 	      val("rcv_nxt"), val("rx_hdr_offset"));
154*ae9b4017SNavdeep Parhar   PR("  frag0_idx     %-10u  length  %-10u  frag0_ptr  0x%-8x\n",
155*ae9b4017SNavdeep Parhar 	      val("rx_frag0_start_idx"),
156*ae9b4017SNavdeep Parhar 	      val("rx_frag0_len"),
157*ae9b4017SNavdeep Parhar 	      val("rx_ptr"));
158*ae9b4017SNavdeep Parhar   PR("  frag1_idx     %-10u  length  %-10u  ",
159*ae9b4017SNavdeep Parhar 	      val("rx_frag1_start_idx_offset"),
160*ae9b4017SNavdeep Parhar 	      val("rx_frag1_len"));
161*ae9b4017SNavdeep Parhar 
162*ae9b4017SNavdeep Parhar 
163*ae9b4017SNavdeep Parhar 
164*ae9b4017SNavdeep Parhar 
165*ae9b4017SNavdeep Parhar   if (val("ulp_type")!=4) { /* RDMA has FRAG1 idx && len, but no ptr?  Should I not display frag1 at all? */
166*ae9b4017SNavdeep Parhar     PR("frag1_ptr  0x%-8x\n",val("rx_frag1_ptr"));
167*ae9b4017SNavdeep Parhar   } else {
168*ae9b4017SNavdeep Parhar     PR("\n");
169*ae9b4017SNavdeep Parhar   }
170*ae9b4017SNavdeep Parhar 
171*ae9b4017SNavdeep Parhar 
172*ae9b4017SNavdeep Parhar   if (val("ulp_type") !=6 && val("ulp_type") != 5 && val("ulp_type") !=4) {
173*ae9b4017SNavdeep Parhar     PR("  frag2_idx     %-10u  length  %-10u  frag2_ptr  0x%-8x\n",
174*ae9b4017SNavdeep Parhar 		val("rx_frag2_start_idx_offset"),
175*ae9b4017SNavdeep Parhar 		val("rx_frag2_len"),
176*ae9b4017SNavdeep Parhar 		val("rx_frag2_ptr"));
177*ae9b4017SNavdeep Parhar     PR("  frag3_idx     %-10u  length  %-10u  frag3_ptr  0x%-8x\n",
178*ae9b4017SNavdeep Parhar 		val("rx_frag3_start_idx_offset"),
179*ae9b4017SNavdeep Parhar 		val("rx_frag3_len"),
180*ae9b4017SNavdeep Parhar 		val("rx_frag3_ptr"));
181*ae9b4017SNavdeep Parhar   }
182*ae9b4017SNavdeep Parhar 
183*ae9b4017SNavdeep Parhar 
184*ae9b4017SNavdeep Parhar 
185*ae9b4017SNavdeep Parhar 
186*ae9b4017SNavdeep Parhar 
187*ae9b4017SNavdeep Parhar 
188*ae9b4017SNavdeep Parhar   PR("  peer_fin %u,   rx_pdu_out %u, pdu_len %u\n",
189*ae9b4017SNavdeep Parhar 	      val("peer_fin"),val("rx_pdu_out"), val("pdu_len"));
190*ae9b4017SNavdeep Parhar 
191*ae9b4017SNavdeep Parhar 
192*ae9b4017SNavdeep Parhar 
193*ae9b4017SNavdeep Parhar 
194*ae9b4017SNavdeep Parhar   if (val("recv_scale")) {
195*ae9b4017SNavdeep Parhar     PR("  rcv_wnd %u >> snd_scale %u == %u, recv_scaleflag = %u\n",
196*ae9b4017SNavdeep Parhar 		val("rcv_wnd"), val("snd_scale"),
197*ae9b4017SNavdeep Parhar 		val("rcv_wnd") >> val("snd_scale"),
198*ae9b4017SNavdeep Parhar 		val("recv_scale"));
199*ae9b4017SNavdeep Parhar   } else {
200*ae9b4017SNavdeep Parhar     PR("  rcv_wnd %u.  (snd_scale %u, recv_scaleflag = %u)\n",
201*ae9b4017SNavdeep Parhar 		val("rcv_wnd"), val("snd_scale"),
202*ae9b4017SNavdeep Parhar 		val("recv_scale"));
203*ae9b4017SNavdeep Parhar   }
204*ae9b4017SNavdeep Parhar 
205*ae9b4017SNavdeep Parhar 
206*ae9b4017SNavdeep Parhar 
207*ae9b4017SNavdeep Parhar 
208*ae9b4017SNavdeep Parhar  PR("  dack_mss   %u dack       %u,  dack_not_acked: %u\n",
209*ae9b4017SNavdeep Parhar 	      val("dack_mss"),val("dack"),val("dack_not_acked"));
210*ae9b4017SNavdeep Parhar   PR("  rcv_coal   %u rcv_co_psh %u rcv_co_last_psh  %u heart %u\n",
211*ae9b4017SNavdeep Parhar 	      val("rcv_coalesce_enable"),
212*ae9b4017SNavdeep Parhar 	      val("rcv_coalesce_push"),
213*ae9b4017SNavdeep Parhar 	      val("rcv_coalesce_last_psh"),
214*ae9b4017SNavdeep Parhar 	      val("rcv_coalesce_heartbeat"));
215*ae9b4017SNavdeep Parhar 
216*ae9b4017SNavdeep Parhar   PR("  rx_channel %u rx_quiesce %u rx_flow_ctrl_dis %u,",
217*ae9b4017SNavdeep Parhar 	      val("rx_channel"), val("rx_quiesce"),
218*ae9b4017SNavdeep Parhar 	      val("rx_flow_control_disable"));
219*ae9b4017SNavdeep Parhar   PR("  rx_flow_ctrl_ddp %u\n",
220*ae9b4017SNavdeep Parhar 	      val("rx_flow_control_ddp"));
221*ae9b4017SNavdeep Parhar 
222*ae9b4017SNavdeep Parhar 
223*ae9b4017SNavdeep Parhar   PR("MISCELANEOUS:\n");  /* *************************** */
224*ae9b4017SNavdeep Parhar   PR("  pend_ctl: 0x%1x, unused_flags: 0x%x,  main_slush: 0x%x\n",
225*ae9b4017SNavdeep Parhar 	      ((val("pend_ctl2")<<2) | (val("pend_ctl1")<<1) |
226*ae9b4017SNavdeep Parhar 	       val("pend_ctl0")),
227*ae9b4017SNavdeep Parhar 	      val("unused"),val("main_slush"));
228*ae9b4017SNavdeep Parhar   PR("  Migrating %u, ask_mode %u, non_offload %u, rss_info %u\n",
229*ae9b4017SNavdeep Parhar 	      val("migrating"),
230*ae9b4017SNavdeep Parhar 	      val("ask_mode"), val("non_offload"), val("rss_info"));
231*ae9b4017SNavdeep Parhar   PR("  ULP: ulp_type %u (%s), ulp_raw %u\n",
232*ae9b4017SNavdeep Parhar 	      val("ulp_type"), spr_ulp_type(val("ulp_type")),val("ulp_raw"));
233*ae9b4017SNavdeep Parhar   PR("  RDMA: error   %u, flm_err %u\n",
234*ae9b4017SNavdeep Parhar 	      val("rdma_error"), val("rdma_flm_error"));
235*ae9b4017SNavdeep Parhar 
236*ae9b4017SNavdeep Parhar 
237*ae9b4017SNavdeep Parhar }
238*ae9b4017SNavdeep Parhar void t4_display_tcb_aux_1 (_TCBVAR *tvp, int aux)
239*ae9b4017SNavdeep Parhar {
240*ae9b4017SNavdeep Parhar 
241*ae9b4017SNavdeep Parhar 
242*ae9b4017SNavdeep Parhar 
243*ae9b4017SNavdeep Parhar   PR("    aux1_slush0: 0x%x aux1_slush1 0x%x\n",
244*ae9b4017SNavdeep Parhar 	      val("aux1_slush0"), val("aux1_slush1"));
245*ae9b4017SNavdeep Parhar   PR("    pdu_hdr_len %u\n",val("pdu_hdr_len"));
246*ae9b4017SNavdeep Parhar 
247*ae9b4017SNavdeep Parhar 
248*ae9b4017SNavdeep Parhar 
249*ae9b4017SNavdeep Parhar }
250*ae9b4017SNavdeep Parhar void t4_display_tcb_aux_2 (_TCBVAR *tvp, int aux)
251*ae9b4017SNavdeep Parhar {
252*ae9b4017SNavdeep Parhar 
253*ae9b4017SNavdeep Parhar 
254*ae9b4017SNavdeep Parhar 
255*ae9b4017SNavdeep Parhar 
256*ae9b4017SNavdeep Parhar   PR("    qp_id %u, pd_id %u, stag %u\n",
257*ae9b4017SNavdeep Parhar 	       val("qp_id"), val("pd_id"),val("stag"));
258*ae9b4017SNavdeep Parhar   PR("    irs_ulp %u, iss_ulp %u\n",
259*ae9b4017SNavdeep Parhar 	      val("irs_ulp"),val("iss_ulp"));
260*ae9b4017SNavdeep Parhar   PR("    tx_pdu_len %u\n",
261*ae9b4017SNavdeep Parhar 	      val("tx_pdu_len"));
262*ae9b4017SNavdeep Parhar   PR("    cq_idx_sq %u, cq_idx_rq %u\n",
263*ae9b4017SNavdeep Parhar 	      val("cq_idx_sq"),val("cq_idx_rq"));
264*ae9b4017SNavdeep Parhar   PR("    rq_start %u, rq_MSN %u, rq_max_off %u, rq_write_ptr %u\n",
265*ae9b4017SNavdeep Parhar 	      val("rq_start"),val("rq_msn"),val("rq_max_offset"),
266*ae9b4017SNavdeep Parhar 	      val("rq_write_ptr"));
267*ae9b4017SNavdeep Parhar   PR("    L_valid %u, rdmap opcode %u\n",
268*ae9b4017SNavdeep Parhar 	      val("ord_l_bit_vld"),val("rdmap_opcode"));
269*ae9b4017SNavdeep Parhar   PR("    tx_flush: %u, tx_oos_rxmt %u, tx_oos_txmt %u\n",
270*ae9b4017SNavdeep Parhar 	      val("tx_flush"),val("tx_oos_rxmt"),val("tx_oos_txmt"));
271*ae9b4017SNavdeep Parhar 
272*ae9b4017SNavdeep Parhar 
273*ae9b4017SNavdeep Parhar 
274*ae9b4017SNavdeep Parhar 
275*ae9b4017SNavdeep Parhar }
276*ae9b4017SNavdeep Parhar void t4_display_tcb_aux_3 (_TCBVAR *tvp, int aux)
277*ae9b4017SNavdeep Parhar {
278*ae9b4017SNavdeep Parhar 
279*ae9b4017SNavdeep Parhar 
280*ae9b4017SNavdeep Parhar 
281*ae9b4017SNavdeep Parhar 
282*ae9b4017SNavdeep Parhar   PR("  aux3_slush: 0x%x, unused: buf0 0x%x, buf1: 0x%x, main: 0x%x\n",
283*ae9b4017SNavdeep Parhar 	      val("aux3_slush"),val("ddp_buf0_unused"),val("ddp_buf1_unused"),
284*ae9b4017SNavdeep Parhar 	      val("ddp_main_unused"));
285*ae9b4017SNavdeep Parhar 
286*ae9b4017SNavdeep Parhar 
287*ae9b4017SNavdeep Parhar 
288*ae9b4017SNavdeep Parhar 
289*ae9b4017SNavdeep Parhar 
290*ae9b4017SNavdeep Parhar   PR("  DDP: DDPOFF  ActBuf  IndOut  WaitFrag  Rx2Tx  BufInf\n");
291*ae9b4017SNavdeep Parhar   PR("         %u       %u       %u        %u        %u      %u\n",
292*ae9b4017SNavdeep Parhar 	      val("ddp_off"),val("ddp_active_buf"),val("ddp_indicate_out"),
293*ae9b4017SNavdeep Parhar 	      val("ddp_wait_frag"),val("ddp_rx2tx"),val("ddp_buf_inf")
294*ae9b4017SNavdeep Parhar 	     );
295*ae9b4017SNavdeep Parhar 
296*ae9b4017SNavdeep Parhar 
297*ae9b4017SNavdeep Parhar 
298*ae9b4017SNavdeep Parhar 
299*ae9b4017SNavdeep Parhar 
300*ae9b4017SNavdeep Parhar   PR("        Ind  PshfEn PushDis Flush NoInvalidate\n");
301*ae9b4017SNavdeep Parhar   PR("   Buf0: %u      %u       %u    %u       %u\n",
302*ae9b4017SNavdeep Parhar 	      val("ddp_buf0_indicate"),
303*ae9b4017SNavdeep Parhar 	      val("ddp_pshf_enable_0"), val("ddp_push_disable_0"),
304*ae9b4017SNavdeep Parhar 	      val("ddp_buf0_flush"),  val("ddp_psh_no_invalidate0")
305*ae9b4017SNavdeep Parhar 	       );
306*ae9b4017SNavdeep Parhar   PR("   Buf1: %u      %u       %u    %u       %u\n",
307*ae9b4017SNavdeep Parhar 	      val("ddp_buf1_indicate"),
308*ae9b4017SNavdeep Parhar 	      val("ddp_pshf_enable_1"), val("ddp_push_disable_1"),
309*ae9b4017SNavdeep Parhar 	      val("ddp_buf1_flush"),  val("ddp_psh_no_invalidate1")
310*ae9b4017SNavdeep Parhar 	       );
311*ae9b4017SNavdeep Parhar 
312*ae9b4017SNavdeep Parhar 
313*ae9b4017SNavdeep Parhar 
314*ae9b4017SNavdeep Parhar 
315*ae9b4017SNavdeep Parhar 
316*ae9b4017SNavdeep Parhar 
317*ae9b4017SNavdeep Parhar 
318*ae9b4017SNavdeep Parhar 
319*ae9b4017SNavdeep Parhar 
320*ae9b4017SNavdeep Parhar 
321*ae9b4017SNavdeep Parhar   PR("        Valid  Offset   Length    Tag\n");
322*ae9b4017SNavdeep Parhar   PR("   Buf0:  %u    0x%6.6x 0x%6.6x  0x%8.8x",
323*ae9b4017SNavdeep Parhar 	      val("ddp_buf0_valid"),val("rx_ddp_buf0_offset"),
324*ae9b4017SNavdeep Parhar 	      val("rx_ddp_buf0_len"),val("rx_ddp_buf0_tag")
325*ae9b4017SNavdeep Parhar 
326*ae9b4017SNavdeep Parhar 
327*ae9b4017SNavdeep Parhar 	       );
328*ae9b4017SNavdeep Parhar   if      (0==val("ddp_off") && 1==val("ddp_buf0_valid") && 0==val("ddp_active_buf")) {
329*ae9b4017SNavdeep Parhar     PR("   (Active)\n");
330*ae9b4017SNavdeep Parhar   } else {
331*ae9b4017SNavdeep Parhar     PR(" (Inactive)\n");
332*ae9b4017SNavdeep Parhar   }
333*ae9b4017SNavdeep Parhar 
334*ae9b4017SNavdeep Parhar 
335*ae9b4017SNavdeep Parhar   PR("   Buf1:  %u    0x%6.6x 0x%6.6x  0x%8.8x",
336*ae9b4017SNavdeep Parhar 	      val("ddp_buf1_valid"),val("rx_ddp_buf1_offset"),
337*ae9b4017SNavdeep Parhar 	      val("rx_ddp_buf1_len"),val("rx_ddp_buf1_tag")
338*ae9b4017SNavdeep Parhar 
339*ae9b4017SNavdeep Parhar 
340*ae9b4017SNavdeep Parhar 	       );
341*ae9b4017SNavdeep Parhar 
342*ae9b4017SNavdeep Parhar 
343*ae9b4017SNavdeep Parhar   if      (0==val("ddp_off") && 1==val("ddp_buf1_valid") && 1==val("ddp_active_buf")) {
344*ae9b4017SNavdeep Parhar     PR("   (Active)\n");
345*ae9b4017SNavdeep Parhar   } else {
346*ae9b4017SNavdeep Parhar     PR(" (Inactive)\n");
347*ae9b4017SNavdeep Parhar   }
348*ae9b4017SNavdeep Parhar 
349*ae9b4017SNavdeep Parhar 
350*ae9b4017SNavdeep Parhar 
351*ae9b4017SNavdeep Parhar 
352*ae9b4017SNavdeep Parhar 
353*ae9b4017SNavdeep Parhar 
354*ae9b4017SNavdeep Parhar   if    (1==val("ddp_off")) {
355*ae9b4017SNavdeep Parhar     PR("   DDP is off (which also disables indicate)\n");
356*ae9b4017SNavdeep Parhar   } else if (1==val("ddp_buf0_valid") && 0==val("ddp_active_buf")) {
357*ae9b4017SNavdeep Parhar     PR("   Data being DDP'ed to buf 0, ");
358*ae9b4017SNavdeep Parhar     PR("which has %u - %u = %u bytes of space left\n",
359*ae9b4017SNavdeep Parhar 		val("rx_ddp_buf0_len"),val("rx_ddp_buf0_offset"),
360*ae9b4017SNavdeep Parhar 		val("rx_ddp_buf0_len")-val("rx_ddp_buf0_offset")
361*ae9b4017SNavdeep Parhar 	       );
362*ae9b4017SNavdeep Parhar     if (1==val("ddp_buf1_valid")) {
363*ae9b4017SNavdeep Parhar       PR("   And buf1, which is also valid, has %u - %u = %u bytes of space left\n",
364*ae9b4017SNavdeep Parhar 		  val("rx_ddp_buf1_len"),val("rx_ddp_buf1_offset"),
365*ae9b4017SNavdeep Parhar 		  val("rx_ddp_buf1_len")-val("rx_ddp_buf1_offset")
366*ae9b4017SNavdeep Parhar 		 );
367*ae9b4017SNavdeep Parhar     }
368*ae9b4017SNavdeep Parhar   } else if (1==val("ddp_buf1_valid") && 1==val("ddp_active_buf")) {
369*ae9b4017SNavdeep Parhar     PR("   Data being DDP'ed to buf 1, ");
370*ae9b4017SNavdeep Parhar     PR("which has %u - %u = %u bytes of space left\n",
371*ae9b4017SNavdeep Parhar 		val("rx_ddp_buf1_len"),val("rx_ddp_buf1_offset"),
372*ae9b4017SNavdeep Parhar 		val("rx_ddp_buf1_len")-val("rx_ddp_buf1_offset")
373*ae9b4017SNavdeep Parhar 	       );
374*ae9b4017SNavdeep Parhar     if (1==val("ddp_buf0_valid")) {
375*ae9b4017SNavdeep Parhar       PR("   And buf0, which is also valid, has %u - %u = %u bytes of space left\n",
376*ae9b4017SNavdeep Parhar 		  val("rx_ddp_buf0_len"),val("rx_ddp_buf0_offset"),
377*ae9b4017SNavdeep Parhar 		  val("rx_ddp_buf0_len")-val("rx_ddp_buf0_offset")
378*ae9b4017SNavdeep Parhar 		 );
379*ae9b4017SNavdeep Parhar     }
380*ae9b4017SNavdeep Parhar   } else if (0==val("ddp_buf0_valid") && 1==val("ddp_buf1_valid") && 0==val("ddp_active_buf")) {
381*ae9b4017SNavdeep Parhar     PR("   !!! Invalid DDP buf 1 valid, but buf 0 active.\n");
382*ae9b4017SNavdeep Parhar   } else if (1==val("ddp_buf0_valid") && 0==val("ddp_buf1_valid") && 1==val("ddp_active_buf")) {
383*ae9b4017SNavdeep Parhar     PR("   !!! Invalid DDP buf 0 valid, but buf 1 active.\n");
384*ae9b4017SNavdeep Parhar   } else {
385*ae9b4017SNavdeep Parhar     PR("   DDP is enabled, but no buffers are active && valid.\n");
386*ae9b4017SNavdeep Parhar 
387*ae9b4017SNavdeep Parhar 
388*ae9b4017SNavdeep Parhar 
389*ae9b4017SNavdeep Parhar 
390*ae9b4017SNavdeep Parhar     if (0==val("ddp_indicate_out")) {
391*ae9b4017SNavdeep Parhar       if (0==val("ddp_buf0_indicate") && 0==val("ddp_buf1_indicate")) {
392*ae9b4017SNavdeep Parhar 	PR("   0 length Indicate buffers ");
393*ae9b4017SNavdeep Parhar 	if (0==val("rx_hdr_offset")) {
394*ae9b4017SNavdeep Parhar 	  PR("will cause new data to be held in PMRX.\n");
395*ae9b4017SNavdeep Parhar 	} else {
396*ae9b4017SNavdeep Parhar 	  PR("is causing %u bytes to be held in PMRX\n",
397*ae9b4017SNavdeep Parhar 		      val("rx_hdr_offset"));
398*ae9b4017SNavdeep Parhar 	}
399*ae9b4017SNavdeep Parhar       } else {
400*ae9b4017SNavdeep Parhar 	PR("   Data being indicated to host\n");
401*ae9b4017SNavdeep Parhar       }
402*ae9b4017SNavdeep Parhar     } else if (1==val("ddp_indicate_out")) {
403*ae9b4017SNavdeep Parhar       PR("   Indicate is off, which ");
404*ae9b4017SNavdeep Parhar       if (0==val("rx_hdr_offset")) {
405*ae9b4017SNavdeep Parhar 	PR("will cause new data to be held in PMRX.\n");
406*ae9b4017SNavdeep Parhar       } else {
407*ae9b4017SNavdeep Parhar 	PR("is causing %u bytes to be held in PMRX\n",
408*ae9b4017SNavdeep Parhar 		    val("rx_hdr_offset"));
409*ae9b4017SNavdeep Parhar       }
410*ae9b4017SNavdeep Parhar     }
411*ae9b4017SNavdeep Parhar   }
412*ae9b4017SNavdeep Parhar 
413*ae9b4017SNavdeep Parhar 
414*ae9b4017SNavdeep Parhar 
415*ae9b4017SNavdeep Parhar 
416*ae9b4017SNavdeep Parhar }
417