ip2stat.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:4k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*******************************************************************************
  2. *
  3. *   (c) 1998 by Computone Corporation
  4. *
  5. ********************************************************************************
  6. *
  7. *
  8. *   PACKAGE:     Linux tty Device Driver for IntelliPort family of multiport
  9. *                serial I/O controllers.
  10. *
  11. *   DESCRIPTION: Status display utility
  12. *
  13. *******************************************************************************/
  14. #include <sys/time.h>
  15. #include <sys/types.h>
  16. #include <unistd.h>
  17. #include <stdio.h>
  18. #include <signal.h>
  19. #include <sys/stat.h>
  20. #include <fcntl.h>
  21. #include <ctype.h>
  22. #include <linux/timer.h>
  23. #include <linux/termios.h>
  24. #include "i2ellis.h"
  25. #include "i2lib.h"
  26. i2eBordStr Board[2];
  27. i2ChanStr  Port[2];
  28. struct driver_stats
  29. {
  30. ULONG ref_count;
  31. ULONG irq_counter;
  32. ULONG bh_counter;
  33. } Driver;
  34. char devname[20];
  35. int main (int argc, char *argv[])
  36. {
  37.    int   fd;
  38.    int   dev, i;
  39. i2eBordStrPtr pB  = Board;
  40. i2ChanStrPtr  pCh = Port;
  41. if ( argc != 2 ) 
  42. {
  43. printf ( "Usage: %s <port>n", argv[0] );
  44. exit(1);
  45. }
  46. i = sscanf ( argv[1], "/dev/ttyF%d", &dev );
  47. if ( i != 1 ) exit(1);
  48. //printf("%s: board %d, port %dn", argv[1], dev / 64, dev % 64 );
  49. sprintf ( devname, "/dev/ip2stat%d", dev / 64 );
  50. if( 0 > ( fd = open ( devname, O_RDONLY ) ) ) {
  51. // Conventional name failed - try devfs name
  52. sprintf ( devname, "/dev/ip2/stat%d", dev / 64 );
  53. if( 0 > ( fd = open ( devname, O_RDONLY ) ) ) {
  54. // Where is our board???
  55. printf( "Unable to open board %d to retrieve statsn",
  56. dev / 64 );
  57. exit( 255 );
  58. }
  59. }
  60. ioctl ( fd,  64, &Driver );
  61. ioctl ( fd,  65, Board );
  62. ioctl ( fd,  dev % 64, Port );
  63. printf ( "Driver statistics:-n" );
  64. printf ( " Reference Count:  %dn", Driver.ref_count );
  65. printf ( " Interrupts to date:   %ldn", Driver.irq_counter );
  66. printf ( " Bottom half to date:  %ldn", Driver.bh_counter );
  67. printf ( "Board statistics(%d):-n",dev/64 );
  68. printf ( "FIFO: remains = %d%sn", pB->i2eFifoRemains, 
  69. pB->i2eWaitingForEmptyFifo ? ", busy" : "" );
  70. printf ( "Mail: out mail = %02xn", pB->i2eOutMailWaiting ); 
  71. printf ( "  Input interrupts : %dn", pB->i2eFifoInInts );
  72. printf ( "  Output interrupts: %dn", pB->i2eFifoOutInts );
  73. printf ( "  Flow queued      : %ldn", pB->debugFlowQueued );
  74. printf ( "  Bypass queued    : %ldn", pB->debugBypassQueued );
  75. printf ( "  Inline queued    : %ldn", pB->debugInlineQueued );
  76. printf ( "  Data queued      : %ldn", pB->debugDataQueued );
  77. printf ( "  Flow packets     : %ldn", pB->debugFlowCount );
  78. printf ( "  Bypass packets   : %ldn", pB->debugBypassCount );
  79. printf ( "  Inline packets   : %ldn", pB->debugInlineCount );
  80. printf ( "  Mail status      : %xn",  pB->i2eStatus );
  81. printf ( "  Output mail      : %xn",  pB->i2eOutMailWaiting );
  82. printf ( "  Fatal flag       : %dn",  pB->i2eFatal );
  83. printf ( "Channel statistics(%s:%d):-n",argv[1],dev%64 );
  84. printf ( "ibuf: stuff = %d strip = %dn", pCh->Ibuf_stuff, pCh->Ibuf_strip );
  85. printf ( "obuf: stuff = %d strip = %dn", pCh->Obuf_stuff, pCh->Obuf_strip );
  86. printf ( "pbuf: stuff = %dn", pCh->Pbuf_stuff );
  87. printf ( "cbuf: stuff = %d strip = %dn", pCh->Cbuf_stuff, pCh->Cbuf_strip );
  88. printf ( "infl: count = %d room = %dn", pCh->infl.asof, pCh->infl.room );
  89. printf ( "outfl: count = %d room = %dn", pCh->outfl.asof, pCh->outfl.room );
  90. printf ( "throttled = %d ",pCh->throttled);
  91. printf ( "bookmarks = %d ",pCh->bookMarks);
  92. printf ( "flush_flags = %xn",pCh->flush_flags);
  93. printf ( "needs: ");
  94. if (pCh->channelNeeds & NEED_FLOW)   printf("FLOW ");
  95. if (pCh->channelNeeds & NEED_INLINE) printf("INLINE ");
  96. if (pCh->channelNeeds & NEED_BYPASS) printf("BYPASS ");
  97. if (pCh->channelNeeds & NEED_CREDIT) printf("CREDIT ");
  98. printf ( "n");
  99. printf ( "dss: in = %x, out = %xn",pCh->dataSetIn,pCh->dataSetOut);
  100. }