xref: /freebsd/usr.sbin/cxgbetool/tcb_common.c (revision 1d386b48a555f61cb7325543adbbb5c3f3407a66)
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