1ae9b4017SNavdeep Parhar /*-
24d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause
3ae9b4017SNavdeep Parhar *
4ae9b4017SNavdeep Parhar * Copyright (c) 2018 Chelsio Communications, Inc.
5ae9b4017SNavdeep Parhar * All rights reserved.
6ae9b4017SNavdeep Parhar *
7ae9b4017SNavdeep Parhar * Redistribution and use in source and binary forms, with or without
8ae9b4017SNavdeep Parhar * modification, are permitted provided that the following conditions
9ae9b4017SNavdeep Parhar * are met:
10ae9b4017SNavdeep Parhar * 1. Redistributions of source code must retain the above copyright
11ae9b4017SNavdeep Parhar * notice, this list of conditions and the following disclaimer.
12ae9b4017SNavdeep Parhar * 2. Redistributions in binary form must reproduce the above copyright
13ae9b4017SNavdeep Parhar * notice, this list of conditions and the following disclaimer in the
14ae9b4017SNavdeep Parhar * documentation and/or other materials provided with the distribution.
15ae9b4017SNavdeep Parhar *
16ae9b4017SNavdeep Parhar * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17ae9b4017SNavdeep Parhar * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18ae9b4017SNavdeep Parhar * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19ae9b4017SNavdeep Parhar * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20ae9b4017SNavdeep Parhar * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21ae9b4017SNavdeep Parhar * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22ae9b4017SNavdeep Parhar * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23ae9b4017SNavdeep Parhar * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24ae9b4017SNavdeep Parhar * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25ae9b4017SNavdeep Parhar * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26ae9b4017SNavdeep Parhar * SUCH DAMAGE.
27ae9b4017SNavdeep Parhar */
28ae9b4017SNavdeep Parhar
29ae9b4017SNavdeep Parhar #include <sys/cdefs.h>
30ae9b4017SNavdeep Parhar #include "tcb_common.h"
31ae9b4017SNavdeep Parhar
32ae9b4017SNavdeep Parhar /***:-----------------------------------------------------------------------
33ae9b4017SNavdeep Parhar ***: externals
34ae9b4017SNavdeep Parhar ***:-----------------------------------------------------------------------
35ae9b4017SNavdeep Parhar */
36ae9b4017SNavdeep Parhar
37ae9b4017SNavdeep Parhar extern _TCBVAR g_tcb_info4[];
38ae9b4017SNavdeep Parhar extern _TCBVAR g_scb_info4[];
39ae9b4017SNavdeep Parhar extern _TCBVAR g_fcb_info4[];
40ae9b4017SNavdeep Parhar extern void t4_display_tcb_aux_0(_TCBVAR *tvp,int aux);
41ae9b4017SNavdeep Parhar extern void t4_display_tcb_aux_1(_TCBVAR *tvp,int aux);
42ae9b4017SNavdeep Parhar extern void t4_display_tcb_aux_2(_TCBVAR *tvp,int aux);
43ae9b4017SNavdeep Parhar extern void t4_display_tcb_aux_3(_TCBVAR *tvp,int aux);
44ae9b4017SNavdeep Parhar
45ae9b4017SNavdeep Parhar extern _TCBVAR g_tcb_info5[];
46ae9b4017SNavdeep Parhar extern _TCBVAR g_scb_info5[];
47ae9b4017SNavdeep Parhar extern _TCBVAR g_fcb_info5[];
48ae9b4017SNavdeep Parhar extern void t5_display_tcb_aux_0(_TCBVAR *tvp,int aux);
49ae9b4017SNavdeep Parhar extern void t5_display_tcb_aux_1(_TCBVAR *tvp,int aux);
50ae9b4017SNavdeep Parhar extern void t5_display_tcb_aux_2(_TCBVAR *tvp,int aux);
51ae9b4017SNavdeep Parhar extern void t5_display_tcb_aux_3(_TCBVAR *tvp,int aux);
52ae9b4017SNavdeep Parhar
53ae9b4017SNavdeep Parhar extern _TCBVAR g_tcb_info6[];
54ae9b4017SNavdeep Parhar extern _TCBVAR g_scb_info6[];
55ae9b4017SNavdeep Parhar extern _TCBVAR g_fcb_info6[];
56ae9b4017SNavdeep Parhar extern void t6_display_tcb_aux_0(_TCBVAR *tvp,int aux);
57ae9b4017SNavdeep Parhar extern void t6_display_tcb_aux_1(_TCBVAR *tvp,int aux);
58ae9b4017SNavdeep Parhar extern void t6_display_tcb_aux_2(_TCBVAR *tvp,int aux);
59ae9b4017SNavdeep Parhar extern void t6_display_tcb_aux_3(_TCBVAR *tvp,int aux);
60ae9b4017SNavdeep Parhar extern void t6_display_tcb_aux_4(_TCBVAR *tvp,int aux);
61ae9b4017SNavdeep Parhar
62ae9b4017SNavdeep Parhar /***:-----------------------------------------------------------------------
63ae9b4017SNavdeep Parhar ***: globals
64ae9b4017SNavdeep Parhar ***:-----------------------------------------------------------------------
65ae9b4017SNavdeep Parhar */
66ae9b4017SNavdeep Parhar
67ae9b4017SNavdeep Parhar _TCBVAR *g_tcb_info=g_tcb_info5;
68ae9b4017SNavdeep Parhar _TCBVAR *g_scb_info=g_scb_info5;
69ae9b4017SNavdeep Parhar _TCBVAR *g_fcb_info=g_fcb_info5;
70ae9b4017SNavdeep Parhar static int g_tN=0;
71ae9b4017SNavdeep Parhar
72ae9b4017SNavdeep Parhar static int g_prntstyl=PRNTSTYL_COMP;
73ae9b4017SNavdeep Parhar
74ae9b4017SNavdeep Parhar static int g_got_scb=0;
75ae9b4017SNavdeep Parhar static int g_got_fcb=0;
76ae9b4017SNavdeep Parhar
77ae9b4017SNavdeep Parhar
78ae9b4017SNavdeep Parhar /***:-----------------------------------------------------------------------
79ae9b4017SNavdeep Parhar ***: error exit functions
80ae9b4017SNavdeep Parhar ***:-----------------------------------------------------------------------
81ae9b4017SNavdeep Parhar */
82ae9b4017SNavdeep Parhar
83ae9b4017SNavdeep Parhar /**: err_exit functions
84ae9b4017SNavdeep Parhar *: ------------------
85ae9b4017SNavdeep Parhar */
86ae9b4017SNavdeep Parhar
tcb_prflush(void)87ae9b4017SNavdeep Parhar void tcb_prflush(void)
88ae9b4017SNavdeep Parhar {
89ae9b4017SNavdeep Parhar fflush(stdout);
90ae9b4017SNavdeep Parhar fflush(stderr);
91ae9b4017SNavdeep Parhar }
92ae9b4017SNavdeep Parhar
93ae9b4017SNavdeep Parhar
tcb_code_err_exit(char * fmt,...)94ae9b4017SNavdeep Parhar void tcb_code_err_exit(char *fmt, ...)
95ae9b4017SNavdeep Parhar {
96ae9b4017SNavdeep Parhar va_list args;
97ae9b4017SNavdeep Parhar va_start(args, fmt);
98ae9b4017SNavdeep Parhar printf("Coding Error in: ");
99ae9b4017SNavdeep Parhar vprintf(fmt, args);
100ae9b4017SNavdeep Parhar printf("\n");
101ae9b4017SNavdeep Parhar tcb_prflush();
102ae9b4017SNavdeep Parhar va_end(args);
103ae9b4017SNavdeep Parhar exit(1);
104ae9b4017SNavdeep Parhar }
105ae9b4017SNavdeep Parhar
106ae9b4017SNavdeep Parhar /***:-----------------------------------------------------------------------
107ae9b4017SNavdeep Parhar ***: tcb_hexdump functions
108ae9b4017SNavdeep Parhar ***:-----------------------------------------------------------------------
109ae9b4017SNavdeep Parhar */
110ae9b4017SNavdeep Parhar
111ae9b4017SNavdeep Parhar void
tcb_hexdump(unsigned base,unsigned char * buf,unsigned int size)112ae9b4017SNavdeep Parhar tcb_hexdump(unsigned base, unsigned char *buf, unsigned int size)
113ae9b4017SNavdeep Parhar {
114ae9b4017SNavdeep Parhar unsigned offset;
115ae9b4017SNavdeep Parhar
116ae9b4017SNavdeep Parhar for (offset = 0; offset < size; ++offset) {
117ae9b4017SNavdeep Parhar if (!(offset % 16)) printf("\n0x%4.4x: ", base + offset);
118ae9b4017SNavdeep Parhar else if (!(offset % 8)) printf(" ");
119ae9b4017SNavdeep Parhar printf("%2.2x ", (unsigned char)buf[offset]);
120ae9b4017SNavdeep Parhar }
121ae9b4017SNavdeep Parhar }
122ae9b4017SNavdeep Parhar
tcb_strmatch_nc(char * cs,char * ct)123ae9b4017SNavdeep Parhar int tcb_strmatch_nc(char *cs, char *ct) {
124ae9b4017SNavdeep Parhar while (*cs)
125ae9b4017SNavdeep Parhar if (tolower(*cs++) != tolower(*ct++)) return (FALSE);
126ae9b4017SNavdeep Parhar return (!(*ct)); /*return TRUE if *ct NULL at same time as *cs==NULL*/
127ae9b4017SNavdeep Parhar }
128ae9b4017SNavdeep Parhar
129ae9b4017SNavdeep Parhar
130ae9b4017SNavdeep Parhar /*: -------------------------------------------------------------------------
131ae9b4017SNavdeep Parhar string functions
132ae9b4017SNavdeep Parhar tcb_strmatch_nc: Similar to exact match, but case insensitive.
133ae9b4017SNavdeep Parhar */
134ae9b4017SNavdeep Parhar
135ae9b4017SNavdeep Parhar
136ae9b4017SNavdeep Parhar int
tcb_strncmp_nc(char * cs,char * ct,int n)137ae9b4017SNavdeep Parhar tcb_strncmp_nc(char *cs, char *ct, int n)
138ae9b4017SNavdeep Parhar {
139ae9b4017SNavdeep Parhar /*case insensitive version of the standard strncmp() function */
140ae9b4017SNavdeep Parhar int i = 0;
141ae9b4017SNavdeep Parhar int ret;
142ae9b4017SNavdeep Parhar
143ae9b4017SNavdeep Parhar
144ae9b4017SNavdeep Parhar ret = 0;
145ae9b4017SNavdeep Parhar for (i = 0; i < n && 0 == ret && !(EOS == *cs && EOS == *ct); ++i) {
146ae9b4017SNavdeep Parhar /* this is weird, but it matched GCC linux when strings don't
147ae9b4017SNavdeep Parhar * have any upper case characters.
148ae9b4017SNavdeep Parhar */
149ae9b4017SNavdeep Parhar ret = tolower(*cs++) - tolower(*ct++);
150ae9b4017SNavdeep Parhar }
151ae9b4017SNavdeep Parhar return ret;
152ae9b4017SNavdeep Parhar }
153ae9b4017SNavdeep Parhar
154ae9b4017SNavdeep Parhar int
tcb_startswith_nc(char * cs,char * ct)155ae9b4017SNavdeep Parhar tcb_startswith_nc(char *cs, char *ct)
156ae9b4017SNavdeep Parhar { /* return true if cs start with ct */
157ae9b4017SNavdeep Parhar return (0 == tcb_strncmp_nc(cs, ct, (int)strlen(ct)));
158ae9b4017SNavdeep Parhar }
159ae9b4017SNavdeep Parhar
160ae9b4017SNavdeep Parhar
161ae9b4017SNavdeep Parhar
162ae9b4017SNavdeep Parhar
163ae9b4017SNavdeep Parhar /***:-----------------------------------------------------------------------
164ae9b4017SNavdeep Parhar ***: START OF WINDOWS FUNCTIONS
165ae9b4017SNavdeep Parhar ***:-----------------------------------------------------------------------
166ae9b4017SNavdeep Parhar */
167ae9b4017SNavdeep Parhar
168ae9b4017SNavdeep Parhar
169ae9b4017SNavdeep Parhar /***:-----------------------------------------------------------------------
17025611bc0SEd Maste ***: print utilities
171ae9b4017SNavdeep Parhar ***:-----------------------------------------------------------------------
172ae9b4017SNavdeep Parhar */
173ae9b4017SNavdeep Parhar
174ae9b4017SNavdeep Parhar static int g_PR_indent=1;
175ae9b4017SNavdeep Parhar
PR(char * fmt,...)176ae9b4017SNavdeep Parhar void PR(char *fmt, ...)
177ae9b4017SNavdeep Parhar {
178ae9b4017SNavdeep Parhar int fmt_len;
179ae9b4017SNavdeep Parhar va_list args;
180ae9b4017SNavdeep Parhar va_start(args,fmt);
181ae9b4017SNavdeep Parhar
182ae9b4017SNavdeep Parhar if (g_PR_indent) printf(" ");
183ae9b4017SNavdeep Parhar g_PR_indent=0;
184ae9b4017SNavdeep Parhar fmt_len=(int) strlen(fmt);
185ae9b4017SNavdeep Parhar if (fmt_len>0 && fmt[fmt_len-1]=='\n') g_PR_indent=1;
186ae9b4017SNavdeep Parhar
187ae9b4017SNavdeep Parhar vprintf(fmt,args);
188ae9b4017SNavdeep Parhar tcb_prflush();
189ae9b4017SNavdeep Parhar va_end(args);
190ae9b4017SNavdeep Parhar }
191ae9b4017SNavdeep Parhar
192ae9b4017SNavdeep Parhar
193ae9b4017SNavdeep Parhar /***:-----------------------------------------------------------------------
194ae9b4017SNavdeep Parhar ***: val()
195ae9b4017SNavdeep Parhar ***:-----------------------------------------------------------------------
196ae9b4017SNavdeep Parhar */
197ae9b4017SNavdeep Parhar
198ae9b4017SNavdeep Parhar _TCBVAR *
lu_tcbvar(char * name)199ae9b4017SNavdeep Parhar lu_tcbvar(char *name)
200ae9b4017SNavdeep Parhar {
201ae9b4017SNavdeep Parhar _TCBVAR *tvp=g_tcb_info;
202ae9b4017SNavdeep Parhar
203ae9b4017SNavdeep Parhar while (tvp->name!=NULL) {
204ae9b4017SNavdeep Parhar if (tcb_strmatch_nc(name,tvp->name)) return tvp;
205ae9b4017SNavdeep Parhar else if (tcb_strmatch_nc(name,tvp->aka )) return tvp;
206ae9b4017SNavdeep Parhar tvp+=1;
207ae9b4017SNavdeep Parhar }
208ae9b4017SNavdeep Parhar tcb_code_err_exit("lu_tcbvar: bad name %s\n",name);
209ae9b4017SNavdeep Parhar return NULL;
210ae9b4017SNavdeep Parhar }
211ae9b4017SNavdeep Parhar
212ae9b4017SNavdeep Parhar unsigned
val(char * name)213ae9b4017SNavdeep Parhar val(char *name)
214ae9b4017SNavdeep Parhar {
215ae9b4017SNavdeep Parhar _TCBVAR *tvp;
216ae9b4017SNavdeep Parhar
217ae9b4017SNavdeep Parhar tvp=lu_tcbvar(name);
218ae9b4017SNavdeep Parhar return tvp->val;
219ae9b4017SNavdeep Parhar }
220ae9b4017SNavdeep Parhar
221ae9b4017SNavdeep Parhar ui64
val64(char * name)222ae9b4017SNavdeep Parhar val64(char *name)
223ae9b4017SNavdeep Parhar {
224ae9b4017SNavdeep Parhar _TCBVAR *tvp;
225ae9b4017SNavdeep Parhar
226ae9b4017SNavdeep Parhar tvp=lu_tcbvar(name);
227ae9b4017SNavdeep Parhar return tvp->rawval;
228ae9b4017SNavdeep Parhar }
229ae9b4017SNavdeep Parhar
230ae9b4017SNavdeep Parhar
231ae9b4017SNavdeep Parhar
232ae9b4017SNavdeep Parhar /***:-----------------------------------------------------------------------
233ae9b4017SNavdeep Parhar ***: get_tcb_bits
234ae9b4017SNavdeep Parhar ***:-----------------------------------------------------------------------
235ae9b4017SNavdeep Parhar */
236ae9b4017SNavdeep Parhar
237ae9b4017SNavdeep Parhar
238ae9b4017SNavdeep Parhar static int
get_tcb_bit(unsigned char * A,int bit)239ae9b4017SNavdeep Parhar get_tcb_bit(unsigned char *A, int bit)
240ae9b4017SNavdeep Parhar {
241ae9b4017SNavdeep Parhar int ret=0;
242ae9b4017SNavdeep Parhar int ix,shift;
243ae9b4017SNavdeep Parhar
244ae9b4017SNavdeep Parhar ix = 127 - (bit>>3);
245ae9b4017SNavdeep Parhar shift=bit&0x7;
246ae9b4017SNavdeep Parhar /* prdbg(" ix: %u, shift=%u\n",ix,shift); */
247ae9b4017SNavdeep Parhar ret=(A[ix] >> shift) & 1;
248ae9b4017SNavdeep Parhar return ret;
249ae9b4017SNavdeep Parhar }
250ae9b4017SNavdeep Parhar
251ae9b4017SNavdeep Parhar static ui64
get_tcb_bits(unsigned char * A,int hi,int lo)252ae9b4017SNavdeep Parhar get_tcb_bits (unsigned char *A, int hi, int lo)
253ae9b4017SNavdeep Parhar {
254ae9b4017SNavdeep Parhar ui64 ret=0;
255ae9b4017SNavdeep Parhar
256ae9b4017SNavdeep Parhar if (lo>hi) {
257ae9b4017SNavdeep Parhar int temp=lo;
258ae9b4017SNavdeep Parhar lo=hi;
259ae9b4017SNavdeep Parhar hi=temp;
260ae9b4017SNavdeep Parhar }
261ae9b4017SNavdeep Parhar
262ae9b4017SNavdeep Parhar while (hi>=lo) {
263ae9b4017SNavdeep Parhar ret = (ret<<1) | get_tcb_bit(A,hi);
264ae9b4017SNavdeep Parhar --hi;
265ae9b4017SNavdeep Parhar }
266ae9b4017SNavdeep Parhar
267ae9b4017SNavdeep Parhar return ret;
268ae9b4017SNavdeep Parhar }
269ae9b4017SNavdeep Parhar
270ae9b4017SNavdeep Parhar
271ae9b4017SNavdeep Parhar void
decompress_val(_TCBVAR * tvp,unsigned ulp_type,unsigned tx_max,unsigned rcv_nxt,unsigned rx_frag0_start_idx_raw)272ae9b4017SNavdeep Parhar decompress_val(_TCBVAR *tvp,unsigned ulp_type,unsigned tx_max,
273ae9b4017SNavdeep Parhar unsigned rcv_nxt,unsigned rx_frag0_start_idx_raw)
274ae9b4017SNavdeep Parhar {
275ae9b4017SNavdeep Parhar unsigned rawval=(unsigned) tvp->rawval;
276ae9b4017SNavdeep Parhar
277ae9b4017SNavdeep Parhar switch(tvp->comp) {
278ae9b4017SNavdeep Parhar case COMP_NONE: tvp->val=rawval; break;
279ae9b4017SNavdeep Parhar case COMP_ULP: tvp->val=rawval; break;
280ae9b4017SNavdeep Parhar case COMP_TX_MAX:
281ae9b4017SNavdeep Parhar tvp->val=(tx_max - rawval) & 0xFFFFFFFF;
282ae9b4017SNavdeep Parhar break;
283ae9b4017SNavdeep Parhar case COMP_RCV_NXT:
284ae9b4017SNavdeep Parhar if (tcb_startswith_nc(tvp->name,"rx_frag")) {
285ae9b4017SNavdeep Parhar unsigned fragx=0;
286ae9b4017SNavdeep Parhar if (!tcb_strmatch_nc(tvp->name,"rx_frag0_start_idx_raw"))
287ae9b4017SNavdeep Parhar fragx=rawval;
288ae9b4017SNavdeep Parhar tvp->val=(rcv_nxt+rx_frag0_start_idx_raw+fragx) & 0xFFFFFFFF;
289ae9b4017SNavdeep Parhar } else {
290ae9b4017SNavdeep Parhar tvp->val=(rcv_nxt - rawval) & 0xFFFFFFFF;
291ae9b4017SNavdeep Parhar }
292ae9b4017SNavdeep Parhar break;
293ae9b4017SNavdeep Parhar case COMP_PTR: tvp->val=rawval; break;
294ae9b4017SNavdeep Parhar case COMP_LEN:
295ae9b4017SNavdeep Parhar {
296ae9b4017SNavdeep Parhar tvp->val=rawval;
297ae9b4017SNavdeep Parhar if (PM_MODE_RDDP==ulp_type || PM_MODE_DDP==ulp_type ||
298ae9b4017SNavdeep Parhar PM_MODE_IANDP==ulp_type) {
299ae9b4017SNavdeep Parhar /* TP does this internally. Not sure if I should show the
300ae9b4017SNavdeep Parhar * unaltered value or the raw value. For now I
301*34181db8SElyes Haouas * will display the raw value. For now I've added the code
302ae9b4017SNavdeep Parhar * mainly to stop windows compiler from warning about ulp_type
303ae9b4017SNavdeep Parhar * being an unreferenced parameter.
304ae9b4017SNavdeep Parhar */
305ae9b4017SNavdeep Parhar tvp->val=0;
306ae9b4017SNavdeep Parhar tvp->val=rawval; /* comment this out to display altered value */
307ae9b4017SNavdeep Parhar }
308ae9b4017SNavdeep Parhar }
309ae9b4017SNavdeep Parhar break;
310ae9b4017SNavdeep Parhar default:
311ae9b4017SNavdeep Parhar tcb_code_err_exit("decompress_val, bad switch: %d",tvp->comp);
312ae9b4017SNavdeep Parhar break;
313ae9b4017SNavdeep Parhar }
314ae9b4017SNavdeep Parhar
315ae9b4017SNavdeep Parhar
316ae9b4017SNavdeep Parhar
317ae9b4017SNavdeep Parhar }
318ae9b4017SNavdeep Parhar
319ae9b4017SNavdeep Parhar
320ae9b4017SNavdeep Parhar void
get_tcb_field(_TCBVAR * tvp,unsigned char * buf)321ae9b4017SNavdeep Parhar get_tcb_field(_TCBVAR *tvp,unsigned char *buf)
322ae9b4017SNavdeep Parhar {
323ae9b4017SNavdeep Parhar assert(tvp->hi-tvp->lo+1<=64);
324ae9b4017SNavdeep Parhar assert(tvp->hi>=tvp->lo);
325ae9b4017SNavdeep Parhar
326ae9b4017SNavdeep Parhar tvp->rawval=get_tcb_bits(buf,tvp->lo,tvp->hi);
327ae9b4017SNavdeep Parhar /* assume no compression and 32-bit value for now */
328ae9b4017SNavdeep Parhar tvp->val=(unsigned) (tvp->rawval & 0xFFFFFFFF);
329ae9b4017SNavdeep Parhar
330ae9b4017SNavdeep Parhar
331ae9b4017SNavdeep Parhar }
332ae9b4017SNavdeep Parhar
333ae9b4017SNavdeep Parhar
334ae9b4017SNavdeep Parhar /***:-----------------------------------------------------------------------
335ae9b4017SNavdeep Parhar ***: spr_* functions
336ae9b4017SNavdeep Parhar ***:-----------------------------------------------------------------------
337ae9b4017SNavdeep Parhar */
338ae9b4017SNavdeep Parhar
339ae9b4017SNavdeep Parhar char *
spr_tcp_state(unsigned state)340ae9b4017SNavdeep Parhar spr_tcp_state (unsigned state)
341ae9b4017SNavdeep Parhar {
342ae9b4017SNavdeep Parhar char *ret="UNKNOWN";
343ae9b4017SNavdeep Parhar
344ae9b4017SNavdeep Parhar if ( 0 == state) {ret = "CLOSED";}
345ae9b4017SNavdeep Parhar else if ( 1 == state) {ret = "LISTEN";}
346ae9b4017SNavdeep Parhar else if ( 2 == state) {ret = "SYN_SENT";}
347ae9b4017SNavdeep Parhar else if ( 3 == state) {ret = "SYN_RCVD";}
348ae9b4017SNavdeep Parhar else if ( 4 == state) {ret = "ESTABLISHED";}
349ae9b4017SNavdeep Parhar else if ( 5 == state) {ret = "CLOSE_WAIT";}
350ae9b4017SNavdeep Parhar else if ( 6 == state) {ret = "FIN_WAIT_1";}
351ae9b4017SNavdeep Parhar else if ( 7 == state) {ret = "CLOSING";}
352ae9b4017SNavdeep Parhar else if ( 8 == state) {ret = "LAST_ACK";}
353ae9b4017SNavdeep Parhar else if ( 9 == state) {ret = "FIN_WAIT_2";}
354ae9b4017SNavdeep Parhar else if (10 == state) {ret = "TIME_WAIT";}
355ae9b4017SNavdeep Parhar else if (11 == state) {ret = "ESTABLISHED_RX";}
356ae9b4017SNavdeep Parhar else if (12 == state) {ret = "ESTABLISHED_TX";}
357ae9b4017SNavdeep Parhar else if (13 == state) {ret = "SYN_PEND";}
358ae9b4017SNavdeep Parhar else if (14 == state) {ret = "ESC_1_STATE";}
359ae9b4017SNavdeep Parhar else if (15 == state) {ret = "ESC_2_STATE";}
360ae9b4017SNavdeep Parhar
361ae9b4017SNavdeep Parhar return ret;
362ae9b4017SNavdeep Parhar }
363ae9b4017SNavdeep Parhar
364ae9b4017SNavdeep Parhar char *
spr_cctrl_sel(unsigned sel0,unsigned sel1)365ae9b4017SNavdeep Parhar spr_cctrl_sel(unsigned sel0,unsigned sel1)
366ae9b4017SNavdeep Parhar {
367ae9b4017SNavdeep Parhar unsigned sel=(sel1<<1) | sel0;
368ae9b4017SNavdeep Parhar char *ret="UNKNOWN";
369ae9b4017SNavdeep Parhar
370ae9b4017SNavdeep Parhar if ( 0 == sel) {ret = "Reno";}
371ae9b4017SNavdeep Parhar else if ( 1 == sel) {ret = "Tahoe";}
372ae9b4017SNavdeep Parhar else if ( 2 == sel) {ret = "NewReno";}
373ae9b4017SNavdeep Parhar else if ( 3 == sel) {ret = "HighSpeed";}
374ae9b4017SNavdeep Parhar
375ae9b4017SNavdeep Parhar return ret;
376ae9b4017SNavdeep Parhar }
377ae9b4017SNavdeep Parhar
378ae9b4017SNavdeep Parhar
379ae9b4017SNavdeep Parhar char *
spr_ulp_type(unsigned ulp_type)380ae9b4017SNavdeep Parhar spr_ulp_type(unsigned ulp_type)
381ae9b4017SNavdeep Parhar {
382ae9b4017SNavdeep Parhar char *ret="UNKNOWN";
383ae9b4017SNavdeep Parhar
384ae9b4017SNavdeep Parhar /*The tp.h PM_MODE_XXX call 1 DDP and 5 IANDP, but external
385ae9b4017SNavdeep Parhar * documentation (tcb.h" calls 5 ddp, and doesn't mention 1 or 3.
386ae9b4017SNavdeep Parhar */
387ae9b4017SNavdeep Parhar
388ae9b4017SNavdeep Parhar if ( PM_MODE_PASS == ulp_type) {ret = "TOE";}
389ae9b4017SNavdeep Parhar else if ( PM_MODE_DDP == ulp_type) {ret = "DDP";}
390ae9b4017SNavdeep Parhar else if ( PM_MODE_ISCSI == ulp_type) {ret = "ISCSI";}
391ae9b4017SNavdeep Parhar else if ( PM_MODE_IWARP == ulp_type) {ret = "IWARP";}
392ae9b4017SNavdeep Parhar else if ( PM_MODE_RDDP == ulp_type) {ret = "RDMA";}
393ae9b4017SNavdeep Parhar else if ( PM_MODE_IANDP == ulp_type) {ret = "IANDP_DDP";}
394ae9b4017SNavdeep Parhar else if ( PM_MODE_FCOE == ulp_type) {ret = "FCoE";}
395ae9b4017SNavdeep Parhar else if ( PM_MODE_USER == ulp_type) {ret = "USER";}
396ae9b4017SNavdeep Parhar else if ( PM_MODE_TLS == ulp_type) {ret = "TLS";}
397ae9b4017SNavdeep Parhar else if ( PM_MODE_DTLS == ulp_type) {ret = "DTLS";}
398ae9b4017SNavdeep Parhar
399ae9b4017SNavdeep Parhar return ret;
400ae9b4017SNavdeep Parhar }
401ae9b4017SNavdeep Parhar
402ae9b4017SNavdeep Parhar char *
spr_ip_version(unsigned ip_version)403ae9b4017SNavdeep Parhar spr_ip_version(unsigned ip_version)
404ae9b4017SNavdeep Parhar {
405ae9b4017SNavdeep Parhar char *ret="UNKNOWN";
406ae9b4017SNavdeep Parhar
407ae9b4017SNavdeep Parhar if ( 0 == ip_version) {ret = "IPv4";}
408ae9b4017SNavdeep Parhar else if ( 1 == ip_version) {ret = "IPv6";}
409ae9b4017SNavdeep Parhar
410ae9b4017SNavdeep Parhar return ret;
411ae9b4017SNavdeep Parhar }
412ae9b4017SNavdeep Parhar
413ae9b4017SNavdeep Parhar
414ae9b4017SNavdeep Parhar
415ae9b4017SNavdeep Parhar /***:-----------------------------------------------------------------------
416ae9b4017SNavdeep Parhar ***: display_tcb()
417ae9b4017SNavdeep Parhar ***:-----------------------------------------------------------------------
418ae9b4017SNavdeep Parhar */
419ae9b4017SNavdeep Parhar
420ae9b4017SNavdeep Parhar void
display_tcb_compressed(_TCBVAR * tvp,int aux)421ae9b4017SNavdeep Parhar display_tcb_compressed(_TCBVAR *tvp,int aux)
422ae9b4017SNavdeep Parhar {
423ae9b4017SNavdeep Parhar
424ae9b4017SNavdeep Parhar if (g_tN==4) {
425ae9b4017SNavdeep Parhar t4_display_tcb_aux_0(tvp,aux);
426ae9b4017SNavdeep Parhar if (1==aux) t4_display_tcb_aux_1(tvp,aux);
427ae9b4017SNavdeep Parhar else if (2==aux) t4_display_tcb_aux_2(tvp,aux);
428ae9b4017SNavdeep Parhar else if (3==aux) t4_display_tcb_aux_3(tvp,aux);
429ae9b4017SNavdeep Parhar
430ae9b4017SNavdeep Parhar } else if (g_tN==5) {
431ae9b4017SNavdeep Parhar t5_display_tcb_aux_0(tvp,aux);
432ae9b4017SNavdeep Parhar if (1==aux) t5_display_tcb_aux_1(tvp,aux);
433ae9b4017SNavdeep Parhar else if (2==aux) t5_display_tcb_aux_2(tvp,aux);
434ae9b4017SNavdeep Parhar else if (3==aux) t5_display_tcb_aux_3(tvp,aux);
435ae9b4017SNavdeep Parhar } else if (g_tN==6) {
436ae9b4017SNavdeep Parhar t6_display_tcb_aux_0(tvp,aux);
437ae9b4017SNavdeep Parhar if (1==aux) t6_display_tcb_aux_1(tvp,aux);
438ae9b4017SNavdeep Parhar else if (2==aux) t6_display_tcb_aux_2(tvp,aux);
439ae9b4017SNavdeep Parhar else if (3==aux) t6_display_tcb_aux_3(tvp,aux);
440ae9b4017SNavdeep Parhar else if (4==aux) t6_display_tcb_aux_4(tvp,aux);
441ae9b4017SNavdeep Parhar }
442ae9b4017SNavdeep Parhar }
443ae9b4017SNavdeep Parhar
444ae9b4017SNavdeep Parhar
445ae9b4017SNavdeep Parhar
446ae9b4017SNavdeep Parhar
447ae9b4017SNavdeep Parhar /***:-----------------------------------------------------------------------
448ae9b4017SNavdeep Parhar ***: parse_n_decode_tcb
449ae9b4017SNavdeep Parhar ***:-----------------------------------------------------------------------
450ae9b4017SNavdeep Parhar */
451ae9b4017SNavdeep Parhar
452ae9b4017SNavdeep Parhar
453ae9b4017SNavdeep Parhar unsigned
parse_tcb(_TCBVAR * base_tvp,unsigned char * buf)454ae9b4017SNavdeep Parhar parse_tcb( _TCBVAR *base_tvp, unsigned char *buf)
455ae9b4017SNavdeep Parhar { /* parse the TCB */
456ae9b4017SNavdeep Parhar _TCBVAR *tvp=base_tvp;
457ae9b4017SNavdeep Parhar unsigned ulp_type;
458ae9b4017SNavdeep Parhar int aux=1; /* assume TOE or iSCSI */
459ae9b4017SNavdeep Parhar unsigned tx_max=0, rcv_nxt=0, rx_frag0_start_idx_raw=0;
460ae9b4017SNavdeep Parhar int got_tx_max=0, got_rcv_nxt=0, got_rx_frag0_start_idx_raw=0;
461ae9b4017SNavdeep Parhar
462ae9b4017SNavdeep Parhar
463ae9b4017SNavdeep Parhar /* parse the TCB */
464ae9b4017SNavdeep Parhar while (tvp->name!=NULL) {
465ae9b4017SNavdeep Parhar get_tcb_field(tvp,buf);
466ae9b4017SNavdeep Parhar if (!got_tx_max && tcb_strmatch_nc("tx_max",tvp->name)) {
467ae9b4017SNavdeep Parhar tx_max=tvp->val;
468ae9b4017SNavdeep Parhar got_tx_max=1;
469ae9b4017SNavdeep Parhar }
470ae9b4017SNavdeep Parhar if (!got_rcv_nxt && tcb_strmatch_nc("rcv_nxt",tvp->name)) {
471ae9b4017SNavdeep Parhar rcv_nxt=tvp->val;
472ae9b4017SNavdeep Parhar got_rcv_nxt=1;
473ae9b4017SNavdeep Parhar }
474ae9b4017SNavdeep Parhar if (!got_rx_frag0_start_idx_raw &&
475ae9b4017SNavdeep Parhar tcb_strmatch_nc("rx_frag0_start_idx_raw",tvp->name)) {
476ae9b4017SNavdeep Parhar rx_frag0_start_idx_raw=tvp->val;
477ae9b4017SNavdeep Parhar got_rx_frag0_start_idx_raw=1;
478ae9b4017SNavdeep Parhar }
479ae9b4017SNavdeep Parhar tvp+=1;
480ae9b4017SNavdeep Parhar }
481ae9b4017SNavdeep Parhar
482ae9b4017SNavdeep Parhar tvp=base_tvp;
483ae9b4017SNavdeep Parhar ulp_type=tvp->val; /* ULP type is always first variable in TCB */
484ae9b4017SNavdeep Parhar if (PM_MODE_IANDP==ulp_type || PM_MODE_FCOE==ulp_type) aux=3;
485ae9b4017SNavdeep Parhar else if (PM_MODE_RDDP==ulp_type) aux=2;
486ae9b4017SNavdeep Parhar else if (6==g_tN && (PM_MODE_TLS==ulp_type || PM_MODE_DTLS==ulp_type)) aux=4;
487ae9b4017SNavdeep Parhar else aux=1;
488ae9b4017SNavdeep Parhar
489ae9b4017SNavdeep Parhar assert(got_tx_max && got_rcv_nxt && got_rx_frag0_start_idx_raw);
490ae9b4017SNavdeep Parhar
491ae9b4017SNavdeep Parhar /* decompress the compressed values */
492ae9b4017SNavdeep Parhar tvp=base_tvp;
493ae9b4017SNavdeep Parhar while (tvp->name!=NULL) {
494ae9b4017SNavdeep Parhar decompress_val(tvp,ulp_type,tx_max,rcv_nxt,rx_frag0_start_idx_raw);
495ae9b4017SNavdeep Parhar tvp+=1;
496ae9b4017SNavdeep Parhar }
497ae9b4017SNavdeep Parhar
498ae9b4017SNavdeep Parhar return aux;
499ae9b4017SNavdeep Parhar }
500ae9b4017SNavdeep Parhar
501ae9b4017SNavdeep Parhar
502ae9b4017SNavdeep Parhar
503ae9b4017SNavdeep Parhar void
parse_scb(_TCBVAR * base_tvp,unsigned char * buf)504ae9b4017SNavdeep Parhar parse_scb( _TCBVAR *base_tvp, unsigned char *buf)
505ae9b4017SNavdeep Parhar { /* parse the SCB */
506ae9b4017SNavdeep Parhar _TCBVAR *tvp=base_tvp;
507ae9b4017SNavdeep Parhar
508ae9b4017SNavdeep Parhar while (tvp->name!=NULL) {
509ae9b4017SNavdeep Parhar if (tcb_strmatch_nc("scb_slush",tvp->name)) {
510ae9b4017SNavdeep Parhar /* the scb_slush field is all of remaining memory */
511ae9b4017SNavdeep Parhar tvp->rawval=0;
512ae9b4017SNavdeep Parhar tvp->val=0;
513ae9b4017SNavdeep Parhar } else {
514ae9b4017SNavdeep Parhar get_tcb_field(tvp,buf);
515ae9b4017SNavdeep Parhar }
516ae9b4017SNavdeep Parhar tvp+=1;
517ae9b4017SNavdeep Parhar }
518ae9b4017SNavdeep Parhar }
519ae9b4017SNavdeep Parhar
520ae9b4017SNavdeep Parhar
521ae9b4017SNavdeep Parhar void
parse_fcb(_TCBVAR * base_tvp,unsigned char * buf)522ae9b4017SNavdeep Parhar parse_fcb( _TCBVAR *base_tvp, unsigned char *buf)
523ae9b4017SNavdeep Parhar { /* parse the FCB */
524ae9b4017SNavdeep Parhar _TCBVAR *tvp=base_tvp;
525ae9b4017SNavdeep Parhar
526ae9b4017SNavdeep Parhar while (tvp->name!=NULL) {
527ae9b4017SNavdeep Parhar get_tcb_field(tvp,buf);
528ae9b4017SNavdeep Parhar tvp+=1;
529ae9b4017SNavdeep Parhar }
530ae9b4017SNavdeep Parhar }
531ae9b4017SNavdeep Parhar
532ae9b4017SNavdeep Parhar
533ae9b4017SNavdeep Parhar void
display_list_tcb(_TCBVAR * base_tvp,int aux)534ae9b4017SNavdeep Parhar display_list_tcb(_TCBVAR *base_tvp,int aux)
535ae9b4017SNavdeep Parhar {
536ae9b4017SNavdeep Parhar _TCBVAR *tvp=base_tvp;
537ae9b4017SNavdeep Parhar while (tvp->name!=NULL) {
538ae9b4017SNavdeep Parhar if (tvp->aux==0 || tvp->aux==aux) {
539ae9b4017SNavdeep Parhar if (tvp->hi-tvp->lo+1<=32) {
540ae9b4017SNavdeep Parhar printf(" %4d:%4d %31s: %10u (0x%1x)",tvp->lo,tvp->hi,tvp->name,
541ae9b4017SNavdeep Parhar (unsigned) tvp->rawval,(unsigned) tvp->rawval);
542ae9b4017SNavdeep Parhar if (COMP_TX_MAX==tvp->comp || COMP_RCV_NXT==tvp->comp)
543ae9b4017SNavdeep Parhar printf(" -> %1u (0x%x)", tvp->val,tvp->val);
544ae9b4017SNavdeep Parhar } else {
545ae9b4017SNavdeep Parhar printf(" %4d:%4d %31s: 0x%1llx",tvp->lo,tvp->hi,tvp->name,
546ae9b4017SNavdeep Parhar tvp->rawval);
547ae9b4017SNavdeep Parhar }
548ae9b4017SNavdeep Parhar printf("\n");
549ae9b4017SNavdeep Parhar }
550ae9b4017SNavdeep Parhar tvp+=1;
551ae9b4017SNavdeep Parhar }
552ae9b4017SNavdeep Parhar }
553ae9b4017SNavdeep Parhar
554ae9b4017SNavdeep Parhar void
display_tcb(_TCBVAR * tvp,unsigned char * buf,int aux)555ae9b4017SNavdeep Parhar display_tcb(_TCBVAR *tvp,unsigned char *buf,int aux)
556ae9b4017SNavdeep Parhar {
557ae9b4017SNavdeep Parhar if (g_prntstyl==PRNTSTYL_VERBOSE ||
558ae9b4017SNavdeep Parhar g_prntstyl==PRNTSTYL_RAW) {
559ae9b4017SNavdeep Parhar tcb_hexdump(0,buf,128);
560ae9b4017SNavdeep Parhar printf("\n");
561ae9b4017SNavdeep Parhar }
562ae9b4017SNavdeep Parhar
563ae9b4017SNavdeep Parhar if (g_prntstyl==PRNTSTYL_VERBOSE ||
564ae9b4017SNavdeep Parhar g_prntstyl==PRNTSTYL_LIST) {
565ae9b4017SNavdeep Parhar display_list_tcb(tvp,aux);
566ae9b4017SNavdeep Parhar }
567ae9b4017SNavdeep Parhar
568ae9b4017SNavdeep Parhar if (g_prntstyl==PRNTSTYL_VERBOSE ||
569ae9b4017SNavdeep Parhar g_prntstyl==PRNTSTYL_COMP) {
570ae9b4017SNavdeep Parhar display_tcb_compressed(tvp,aux);
571ae9b4017SNavdeep Parhar }
572ae9b4017SNavdeep Parhar
573ae9b4017SNavdeep Parhar }
574ae9b4017SNavdeep Parhar
575ae9b4017SNavdeep Parhar void
parse_n_display_tcb(unsigned char * buf)576ae9b4017SNavdeep Parhar parse_n_display_tcb(unsigned char *buf)
577ae9b4017SNavdeep Parhar {
578ae9b4017SNavdeep Parhar _TCBVAR *tvp=g_tcb_info;
579ae9b4017SNavdeep Parhar int aux;
580ae9b4017SNavdeep Parhar
581ae9b4017SNavdeep Parhar aux=parse_tcb(tvp,buf);
582ae9b4017SNavdeep Parhar display_tcb(tvp,buf,aux);
583ae9b4017SNavdeep Parhar }
584ae9b4017SNavdeep Parhar
585ae9b4017SNavdeep Parhar void
parse_n_display_scb(unsigned char * buf)586ae9b4017SNavdeep Parhar parse_n_display_scb(unsigned char *buf)
587ae9b4017SNavdeep Parhar {
588ae9b4017SNavdeep Parhar _TCBVAR *tvp=g_scb_info;
589ae9b4017SNavdeep Parhar
590ae9b4017SNavdeep Parhar parse_scb(tvp,buf);
591ae9b4017SNavdeep Parhar if (g_prntstyl==PRNTSTYL_VERBOSE ||
592ae9b4017SNavdeep Parhar g_prntstyl==PRNTSTYL_RAW) {
593ae9b4017SNavdeep Parhar tcb_hexdump(0,buf,128);
594ae9b4017SNavdeep Parhar printf("\n");
595ae9b4017SNavdeep Parhar }
596ae9b4017SNavdeep Parhar if (g_prntstyl==PRNTSTYL_VERBOSE ||
597ae9b4017SNavdeep Parhar g_prntstyl==PRNTSTYL_LIST ||
598ae9b4017SNavdeep Parhar g_prntstyl==PRNTSTYL_COMP) {
599ae9b4017SNavdeep Parhar display_list_tcb(tvp,0);
600ae9b4017SNavdeep Parhar }
601ae9b4017SNavdeep Parhar }
602ae9b4017SNavdeep Parhar
603ae9b4017SNavdeep Parhar void
parse_n_display_fcb(unsigned char * buf)604ae9b4017SNavdeep Parhar parse_n_display_fcb(unsigned char *buf)
605ae9b4017SNavdeep Parhar {
606ae9b4017SNavdeep Parhar _TCBVAR *tvp=g_fcb_info;
607ae9b4017SNavdeep Parhar
608ae9b4017SNavdeep Parhar parse_fcb(tvp,buf);
609ae9b4017SNavdeep Parhar if (g_prntstyl==PRNTSTYL_VERBOSE ||
610ae9b4017SNavdeep Parhar g_prntstyl==PRNTSTYL_RAW) {
611ae9b4017SNavdeep Parhar tcb_hexdump(0,buf,128);
612ae9b4017SNavdeep Parhar printf("\n");
613ae9b4017SNavdeep Parhar }
614ae9b4017SNavdeep Parhar
615ae9b4017SNavdeep Parhar if (g_prntstyl==PRNTSTYL_VERBOSE ||
616ae9b4017SNavdeep Parhar g_prntstyl==PRNTSTYL_LIST ||
617ae9b4017SNavdeep Parhar g_prntstyl==PRNTSTYL_COMP) {
618ae9b4017SNavdeep Parhar display_list_tcb(tvp,0);
619ae9b4017SNavdeep Parhar }
620ae9b4017SNavdeep Parhar }
621ae9b4017SNavdeep Parhar
622ae9b4017SNavdeep Parhar void
parse_n_display_xcb(unsigned char * buf)623ae9b4017SNavdeep Parhar parse_n_display_xcb(unsigned char *buf)
624ae9b4017SNavdeep Parhar {
625ae9b4017SNavdeep Parhar if (g_got_scb) parse_n_display_scb(buf);
626ae9b4017SNavdeep Parhar else if (g_got_fcb) parse_n_display_fcb(buf);
627ae9b4017SNavdeep Parhar else parse_n_display_tcb(buf);
628ae9b4017SNavdeep Parhar }
629ae9b4017SNavdeep Parhar
630ae9b4017SNavdeep Parhar /***:-----------------------------------------------------------------------
631ae9b4017SNavdeep Parhar ***: swizzle_tcb
632ae9b4017SNavdeep Parhar ***:-----------------------------------------------------------------------
633ae9b4017SNavdeep Parhar */
634ae9b4017SNavdeep Parhar
635ae9b4017SNavdeep Parhar void
swizzle_tcb(unsigned char * buf)636ae9b4017SNavdeep Parhar swizzle_tcb(unsigned char *buf)
637ae9b4017SNavdeep Parhar {
638ae9b4017SNavdeep Parhar int i,j,k;
639ae9b4017SNavdeep Parhar
640ae9b4017SNavdeep Parhar for (i=0, j=128-16 ; i<j ; i+=16, j-=16) {
641ae9b4017SNavdeep Parhar unsigned char temp;
642ae9b4017SNavdeep Parhar for (k=0; k<16; ++k) {
643ae9b4017SNavdeep Parhar temp=buf[i+k];
644ae9b4017SNavdeep Parhar buf[i+k]=buf[j+k];
645ae9b4017SNavdeep Parhar buf[j+k]=temp;
646ae9b4017SNavdeep Parhar }
647ae9b4017SNavdeep Parhar }
648ae9b4017SNavdeep Parhar }
649ae9b4017SNavdeep Parhar
650ae9b4017SNavdeep Parhar
651ae9b4017SNavdeep Parhar /***:-----------------------------------------------------------------------
652ae9b4017SNavdeep Parhar ***: END OF WINDOWS FUNCTIONS
653ae9b4017SNavdeep Parhar ***:-----------------------------------------------------------------------
654ae9b4017SNavdeep Parhar */
655ae9b4017SNavdeep Parhar
set_tidtype(unsigned int tidtype)656ae9b4017SNavdeep Parhar void set_tidtype(unsigned int tidtype)
657ae9b4017SNavdeep Parhar {
658ae9b4017SNavdeep Parhar if (tidtype == TIDTYPE_SCB)
659ae9b4017SNavdeep Parhar {
660ae9b4017SNavdeep Parhar g_got_scb = 1;
661ae9b4017SNavdeep Parhar }
662ae9b4017SNavdeep Parhar else if (tidtype == TIDTYPE_FCB)
663ae9b4017SNavdeep Parhar {
664ae9b4017SNavdeep Parhar g_got_fcb = 1;
665ae9b4017SNavdeep Parhar }
666ae9b4017SNavdeep Parhar else
667ae9b4017SNavdeep Parhar {
668ae9b4017SNavdeep Parhar g_got_scb = 0;
669ae9b4017SNavdeep Parhar g_got_fcb = 0;
670ae9b4017SNavdeep Parhar }
671ae9b4017SNavdeep Parhar
672ae9b4017SNavdeep Parhar }
673ae9b4017SNavdeep Parhar
674ae9b4017SNavdeep Parhar void
set_tcb_info(unsigned int tidtype,unsigned int cardtype)675ae9b4017SNavdeep Parhar set_tcb_info(unsigned int tidtype, unsigned int cardtype)
676ae9b4017SNavdeep Parhar {
677ae9b4017SNavdeep Parhar set_tidtype(tidtype);
678ae9b4017SNavdeep Parhar
679ae9b4017SNavdeep Parhar g_tN = cardtype;
680ae9b4017SNavdeep Parhar if (4 == g_tN) {
681ae9b4017SNavdeep Parhar g_tcb_info = g_tcb_info4;
682ae9b4017SNavdeep Parhar g_scb_info = g_scb_info4;
683ae9b4017SNavdeep Parhar g_fcb_info = g_fcb_info4;
684ae9b4017SNavdeep Parhar }
685ae9b4017SNavdeep Parhar else if (5 == g_tN) {
686ae9b4017SNavdeep Parhar g_tcb_info = g_tcb_info5;
687ae9b4017SNavdeep Parhar g_scb_info = g_scb_info5;
688ae9b4017SNavdeep Parhar g_fcb_info = g_fcb_info5;
689ae9b4017SNavdeep Parhar }
690ae9b4017SNavdeep Parhar else if (6 == g_tN) {
691ae9b4017SNavdeep Parhar g_tcb_info = g_tcb_info6;
692ae9b4017SNavdeep Parhar g_scb_info = g_scb_info6;
693ae9b4017SNavdeep Parhar g_fcb_info = g_fcb_info6;
694ae9b4017SNavdeep Parhar }
695ae9b4017SNavdeep Parhar }
696ae9b4017SNavdeep Parhar
697ae9b4017SNavdeep Parhar void
set_print_style(unsigned int prntstyl)698ae9b4017SNavdeep Parhar set_print_style(unsigned int prntstyl)
699ae9b4017SNavdeep Parhar {
700ae9b4017SNavdeep Parhar g_prntstyl=prntstyl;
701ae9b4017SNavdeep Parhar }
702