1 /*******************************************************************************
3 * (c) 1998 by Computone Corporation
5 ********************************************************************************
8 * PACKAGE: Linux tty Device Driver for IntelliPort family of multiport
9 * serial I/O controllers.
11 * DESCRIPTION: Interpretive trace dump utility
13 *******************************************************************************/
16 #include <sys/types.h>
25 unsigned long namebuf[100];
34 unsigned long buf[1000];
39 typedef enum { kChar, kInt, kAddr, kHex } eFormat;
42 void quit() { active = 0; }
44 int main (int argc, char *argv[])
46 int fd = open ( "/dev/ip2trace", O_RDONLY );
49 struct timeval timeout;
50 union ip2breadcrumb bc;
55 printf ( "Can't open device /dev/ip2trace\n" );
59 act.sa_handler = quit;
61 sigemptyset(&act.sa_mask);
63 act.sa_restorer = NULL;
65 sigaction ( SIGTERM, &act, NULL );
67 ioctl ( fd, 1, namebuf );
69 printf ( "iiSendPendingMail %p\n", namebuf[0] );
70 printf ( "i2InitChannels %p\n", namebuf[1] );
71 printf ( "i2QueueNeeds %p\n", namebuf[2] );
72 printf ( "i2QueueCommands %p\n", namebuf[3] );
73 printf ( "i2GetStatus %p\n", namebuf[4] );
74 printf ( "i2Input %p\n", namebuf[5] );
75 printf ( "i2InputFlush %p\n", namebuf[6] );
76 printf ( "i2Output %p\n", namebuf[7] );
77 printf ( "i2FlushOutput %p\n", namebuf[8] );
78 printf ( "i2DrainWakeup %p\n", namebuf[9] );
79 printf ( "i2DrainOutput %p\n", namebuf[10] );
80 printf ( "i2OutputFree %p\n", namebuf[11] );
81 printf ( "i2StripFifo %p\n", namebuf[12] );
82 printf ( "i2StuffFifoBypass %p\n", namebuf[13] );
83 printf ( "i2StuffFifoFlow %p\n", namebuf[14] );
84 printf ( "i2StuffFifoInline %p\n", namebuf[15] );
85 printf ( "i2ServiceBoard %p\n", namebuf[16] );
86 printf ( "serviceOutgoingFifo %p\n", namebuf[17] );
87 printf ( "ip2_init %p\n", namebuf[18] );
88 printf ( "ip2_init_board %p\n", namebuf[19] );
89 printf ( "find_eisa_board %p\n", namebuf[20] );
90 printf ( "set_irq %p\n", namebuf[21] );
91 printf ( "ex_details %p\n", namebuf[22] );
92 printf ( "ip2_interrupt %p\n", namebuf[23] );
93 printf ( "ip2_poll %p\n", namebuf[24] );
94 printf ( "service_all_boards %p\n", namebuf[25] );
95 printf ( "do_input %p\n", namebuf[27] );
96 printf ( "do_status %p\n", namebuf[26] );
97 printf ( "open_sanity_check %p\n", namebuf[27] );
98 printf ( "open_block_til_ready %p\n", namebuf[28] );
99 printf ( "ip2_open %p\n", namebuf[29] );
100 printf ( "ip2_close %p\n", namebuf[30] );
101 printf ( "ip2_hangup %p\n", namebuf[31] );
102 printf ( "ip2_write %p\n", namebuf[32] );
103 printf ( "ip2_putchar %p\n", namebuf[33] );
104 printf ( "ip2_flush_chars %p\n", namebuf[34] );
105 printf ( "ip2_write_room %p\n", namebuf[35] );
106 printf ( "ip2_chars_in_buf %p\n", namebuf[36] );
107 printf ( "ip2_flush_buffer %p\n", namebuf[37] );
108 //printf ( "ip2_wait_until_sent %p\n", namebuf[38] );
109 printf ( "ip2_throttle %p\n", namebuf[39] );
110 printf ( "ip2_unthrottle %p\n", namebuf[40] );
111 printf ( "ip2_ioctl %p\n", namebuf[41] );
112 printf ( "get_modem_info %p\n", namebuf[42] );
113 printf ( "set_modem_info %p\n", namebuf[43] );
114 printf ( "get_serial_info %p\n", namebuf[44] );
115 printf ( "set_serial_info %p\n", namebuf[45] );
116 printf ( "ip2_set_termios %p\n", namebuf[46] );
117 printf ( "ip2_set_line_discipline %p\n", namebuf[47] );
118 printf ( "set_line_characteristics %p\n", namebuf[48] );
120 printf("\n-------------------------\n");
121 printf("Start of trace\n");
124 cnt = read ( fd, &tbuf, sizeof tbuf );
128 printf ( "\nTrace buffer: wrap=%d, strip=%d, stuff=%d\n",
129 tbuf.wrap, tbuf.strip, tbuf.stuff );
131 for ( i = 0, bc.value = 0; i < cnt; ++i ) {
132 if ( !bc.hdr.codes ) {
133 td = tbuf.buf[i] - ts;
135 bc.value = tbuf.buf[i];
137 printf ( "\n(%d) Port %3d ", ts, bc.hdr.port );
141 switch ( bc.hdr.cat )
144 printf ( "Init %d: ", bc.hdr.label );
148 printf ( "Open %d: ", bc.hdr.label );
152 printf ( "Close %d: ", bc.hdr.label );
156 printf ( "Drain %d: ", bc.hdr.label );
161 printf ( "Ioctl %d: ", bc.hdr.label );
165 printf ( "Flush %d: ", bc.hdr.label );
169 printf ( "GetS %d: ", bc.hdr.label );
173 printf ( "Hangup %d: ", bc.hdr.label );
177 printf ( "*Intr %d: ", bc.hdr.label );
181 printf ( "SFlow %d: ", bc.hdr.label );
186 printf ( "Bypass CMD %d: ", bc.hdr.label );
191 printf ( "Inline CMD %d: ", bc.hdr.label );
196 printf ( "Modem %d: ", bc.hdr.label );
200 printf ( "Input %d: ", bc.hdr.label );
204 printf ( "Output %d: ", bc.hdr.label );
209 printf ( "Put char %d: ", bc.hdr.label );
214 printf ( "Queue CMD %d: ", bc.hdr.label );
219 printf ( "Stat Flow %d: ", bc.hdr.label );
224 printf ( "SFifo %d: ", bc.hdr.label );
228 printf ( "Verfy %d: ", bc.hdr.label );
233 printf ( "Write %d: ", bc.hdr.label );
238 printf ( "ERROR %d: ", bc.hdr.label );
243 printf ( "%08x ", tbuf.buf[i] );
253 printf ( "%c (0x%02x) ",
254 isprint ( tbuf.buf[i] ) ? tbuf.buf[i] : '.', tbuf.buf[i] );
257 printf ( "%d ", tbuf.buf[i] );
262 printf ( "0x%x ", tbuf.buf[i] );
270 timeout.tv_usec = 250;
271 select ( 0, NULL, NULL, NULL, &timeout );
274 printf("\n-------------------------\n");
275 printf("End of trace\n");