tcicShow.c
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:11k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* tcicShow.c - Databook TCIC/2 PCMCIA host bus adaptor chip show library */
  2. /* Copyright 1984-1996 Wind River Systems, Inc. */
  3. /* Copyright (c) 1994 David A. Hinds -- All Rights Reserved */
  4. #include "copyright_wrs.h"
  5. /*
  6. modification history
  7. --------------------
  8. 01c,28mar96,jdi  doc: cleaned up language and format.
  9. 01b,22feb96,hdn  cleaned up
  10. 01a,04oct95,hdn  written based on David Hinds's version 2.2.3.
  11. */
  12. /*
  13. DESCRIPTION
  14. This is a driver show routine for the Databook DB86082 PCMCIA chip.
  15. tcicShow() is the only global function and is installed in the 
  16. PCMCIA chip table `pcmciaAdapter' in pcmciaShowInit().
  17. */
  18. #include "vxWorks.h"
  19. #include "stdio.h"
  20. #include "dllLib.h"
  21. #include "drv/pcmcia/pcmciaLib.h"
  22. #include "drv/pcmcia/tcic.h"
  23. /* defines */
  24. #define TCIC_GETB(reg) sysInByte  (tcicBase+reg)
  25. #define TCIC_GETW(reg) sysInWord  (tcicBase+reg)
  26. #define TCIC_SETB(reg, value) sysOutByte (tcicBase+reg, value)
  27. #define TCIC_SETW(reg, value) sysOutWord (tcicBase+reg, value)
  28. /* imports */
  29. IMPORT PCMCIA_CTRL pcmciaCtrl;
  30. IMPORT int tcicBase;
  31. /* globals */
  32. /* locals */
  33. /* forward declarations */
  34. LOCAL STATUS tcicProbe (void);
  35. LOCAL void tcicShowStatus (int sock);
  36. LOCAL void tcicShowPower (int sock);
  37. LOCAL void tcicShowIcsr (int sock);
  38. LOCAL void tcicShowIena (int sock);
  39. LOCAL void tcicShowScf1 (int sock);
  40. LOCAL void tcicShowScf2 (int sock);
  41. LOCAL void tcicShowMemwin (int sock, int win);
  42. LOCAL void tcicShowIowin (int sock, int win);
  43. LOCAL void tcicSetl (int reg, long value);
  44. /*******************************************************************************
  45. *
  46. * tcicShow - show all configurations of the TCIC chip
  47. *
  48. * This routine shows all configurations of the TCIC chip.
  49. *
  50. * RETURNS: N/A
  51. */
  52. void tcicShow
  53.     (
  54.     int sock /* socket no. */
  55.     )
  56.     {
  57.     int ix;
  58.     if (tcicProbe () != OK)
  59. return;
  60.     tcicShowStatus (sock);
  61.     tcicShowPower (sock);
  62.     tcicShowIcsr (sock);
  63.     tcicShowIena (sock);
  64.     tcicShowScf1 (sock);
  65.     tcicShowScf2 (sock);
  66.     for (ix = 0; ix < TCIC_MEM_WINDOWS; ix++)
  67. tcicShowMemwin (sock, ix);
  68.     for (ix = 0; ix < TCIC_IO_WINDOWS; ix++)
  69. tcicShowIowin (sock, ix);
  70.     printf("n");
  71.     }
  72. /*******************************************************************************
  73. *
  74. * tcicProbe - probe the TCIC chip
  75. *
  76. * This routine probes the TCIC chip.
  77. *
  78. * RETURNS: OK, or ERROR if it could not find the TCIC chip.
  79. */
  80. LOCAL STATUS tcicProbe (void)
  81.     {
  82.     int sock;
  83.     printf ("Databook TCIC/2 probe: ");
  84.     sock = 0;
  85.     TCIC_SETW (TCIC_ADDR, 0);
  86.     if (TCIC_GETW (TCIC_ADDR) == 0)
  87. {
  88. TCIC_SETW (TCIC_ADDR, 0xc3a5);
  89. if (TCIC_GETW (TCIC_ADDR) == 0xc3a5)
  90.     sock = 2;
  91.         }
  92.     
  93.     if (sock == 0)
  94. {
  95. printf ("not found.n");
  96. return (ERROR);
  97.         }
  98.     
  99.     printf ("%d socketsn", sock);
  100.     return (OK);
  101.     }
  102. /*******************************************************************************
  103. *
  104. * tcicShowStatus - show status of the TCIC chip
  105. *
  106. * This routine shows status of the TCIC chip.
  107. *
  108. * RETURNS: N/A
  109. */
  110. LOCAL void tcicShowStatus
  111.     (
  112.     int sock /* socket no. */
  113.     )
  114.     {
  115.     char value;
  116.     tcicSetl (TCIC_ADDR, (sock << TCIC_ADDR_SS_SHFT));
  117.     value = TCIC_GETB (TCIC_SSTAT);
  118.     printf("  Socket status = %#2.2xn", value);
  119.     printf("   ");
  120.     if (value & TCIC_SSTAT_CD)
  121. printf(" [CD]");
  122.     if (value & TCIC_SSTAT_WP)
  123. printf(" [WP]");
  124.     if (value & TCIC_SSTAT_RDY)
  125. printf(" [RDY]");
  126.     if (value & TCIC_SSTAT_LBAT1)
  127. printf(" [LBAT1]");
  128.     if (value & TCIC_SSTAT_LBAT2)
  129. printf(" [LBAT2]");
  130.     if (value & TCIC_SSTAT_PROGTIME)
  131. printf(" [PROGTIME]");
  132.     if (value & TCIC_SSTAT_10US)
  133. printf(" [10us]");
  134.     if (value & TCIC_SSTAT_6US)
  135. printf(" [6us]");
  136.     printf("n");
  137.     }
  138. /*******************************************************************************
  139. *
  140. * tcicShowPower - show power configuration of the TCIC chip
  141. *
  142. * This routine shows power configuration of the TCIC chip.
  143. *
  144. * RETURNS: N/A
  145. */
  146. LOCAL void tcicShowPower
  147.     (
  148.     int sock /* socket no. */
  149.     )
  150.     {
  151.     char value = TCIC_GETB (TCIC_PWR);
  152.     printf ("  Power control = %#2.2xn", value);
  153.     printf ("   ");
  154.     printf (value & TCIC_PWR_VCC(sock) ? " [Vcc ON]" : " [Vcc OFF]");
  155.     printf (value & TCIC_PWR_VPP(sock) ? " [Vpp ON]" : " [Vpp OFF]");
  156.     if (value & TCIC_PWR_CLIMENA)
  157. printf (" [CLIMENA]");
  158.     if (value & TCIC_PWR_CLIMSTAT)
  159. printf (" [CLIMSTAT]");
  160.     printf ("n");
  161.     }
  162. /*******************************************************************************
  163. *
  164. * tcicShowIcsr - show interrupt control/status of the TCIC chip
  165. *
  166. * This routine shows interrupt control/status of the TCIC chip.
  167. *
  168. * RETURNS: N/A
  169. */
  170. LOCAL void tcicShowIcsr
  171.     (
  172.     int sock /* socket no. */
  173.     )
  174.     {
  175.     char value;
  176.     tcicSetl (TCIC_ADDR, (sock << TCIC_ADDR_SS_SHFT));
  177.     value = TCIC_GETB (TCIC_ICSR);
  178.     printf ("  Interrupt control status = %#2.2xn", value);
  179.     printf ("   ");
  180.     if (value & TCIC_ICSR_IOCHK)
  181. printf(" [IOCHK]");
  182.     if (value & TCIC_ICSR_CDCHG)
  183. printf(" [CDCHG]");
  184.     if (value & TCIC_ICSR_ERR)
  185. printf(" [ERR]");
  186.     if (value & TCIC_ICSR_PROGTIME)
  187. printf(" [PROGTIME]");
  188.     if (value & TCIC_ICSR_ILOCK)
  189. printf(" [ILOCK]");
  190.     if (value & TCIC_ICSR_STOPCPU)
  191. printf(" [STOPCPU]");
  192.     printf("n");
  193.     }
  194. /*******************************************************************************
  195. *
  196. * tcicShowIena - show interrupt enable of the TCIC chip
  197. *
  198. * This routine shows interrupt enable of the TCIC chip.
  199. *
  200. * RETURNS: N/A
  201. */
  202. LOCAL void tcicShowIena
  203.     (
  204.     int sock /* socket no. */
  205.     )
  206.     {
  207.     char value;
  208.     tcicSetl (TCIC_ADDR, (sock << TCIC_ADDR_SS_SHFT));
  209.     value = TCIC_GETB (TCIC_IENA);
  210.     printf ("  Interrupt enable = %#2.2xn", value);
  211.     printf ("   ");
  212.     switch (value & TCIC_IENA_CFG_MASK)
  213. {
  214.         case TCIC_IENA_CFG_OFF:
  215.     printf(" [OFF]");
  216.     break;
  217.         case TCIC_IENA_CFG_OD:
  218.     printf(" [OD]");
  219.     break;
  220.         case TCIC_IENA_CFG_LOW:
  221.     printf(" [LOW]");
  222.     break;
  223.         case TCIC_IENA_CFG_HIGH:
  224.     printf(" [HIGH]");
  225.     break;
  226.         }
  227.     if (value & TCIC_IENA_ILOCK)
  228. printf(" [ILOCK]");
  229.     if (value & TCIC_IENA_PROGTIME)
  230. printf(" [PROGTIME]");
  231.     if (value & TCIC_IENA_ERR)
  232. printf(" [ERR]");
  233.     if (value & TCIC_IENA_CDCHG)
  234. printf(" [CDCHG]");
  235.     printf("n");
  236.     }
  237. /*******************************************************************************
  238. *
  239. * tcicShowScf1 - show socket configuration of the TCIC chip
  240. *
  241. * This routine shows socket configuration of the TCIC chip.
  242. *
  243. * RETURNS: N/A
  244. */
  245. LOCAL void tcicShowScf1
  246.     (
  247.     int sock /* socket no. */
  248.     )
  249.     {
  250.     short value;
  251.     tcicSetl (TCIC_ADDR, (sock << TCIC_ADDR_SS_SHFT)
  252.       | TCIC_ADDR_INDREG | TCIC_SCF1(sock));
  253.     value = TCIC_GETW (TCIC_DATA);
  254.     printf("  Socket config register 1: %#4.4xn", value);
  255.     printf("   ");
  256.     if (value & TCIC_SCF1_HD7IDE)
  257. printf(" [HD7IDE]");
  258.     if (value & TCIC_SCF1_DELWR)
  259. printf(" [DELWR]");
  260.     if (value & TCIC_SCF1_FINPACK)
  261. printf(" [FINPACK]");
  262.     if (value & TCIC_SCF1_SPKR)
  263. printf(" [SPKR]");
  264.     if (value & TCIC_SCF1_IOSTS)
  265. printf(" [IOSTS]");
  266.     if (value & TCIC_SCF1_ATA)
  267. printf(" [ATA]");
  268.     if (value & TCIC_SCF1_IRDY)
  269. printf(" [IRDY]");
  270.     if (value & TCIC_SCF1_PCVT)
  271. printf(" [PCVT]");
  272.     if (value & TCIC_SCF1_IRQOC)
  273. printf(" [IRQOC]");
  274.     printf(" [irq = %d]n", value & TCIC_SCF1_IRQ_MASK);
  275.     }
  276. /*******************************************************************************
  277. *
  278. * tcicShowScf2 - show socket configuration of the TCIC chip
  279. *
  280. * This routine shows socket configuration of the TCIC chip.
  281. *
  282. * RETURNS: N/A
  283. */
  284. LOCAL void tcicShowScf2
  285.     (
  286.     int sock /* socket no. */
  287.     )
  288.     {
  289.     short value;
  290.     tcicSetl (TCIC_ADDR, (sock << TCIC_ADDR_SS_SHFT)
  291.       | TCIC_ADDR_INDREG | TCIC_SCF2(sock));
  292.     value = TCIC_GETW (TCIC_DATA);
  293.     printf ("  Socket config register 2: %#4.4xn", value);
  294.     printf ("   ");
  295.     if (value & TCIC_SCF2_RI)
  296. printf(" [RI]");
  297.     if (value & TCIC_SCF2_IDBR)
  298. printf(" [IDBR]");
  299.     if (value & TCIC_SCF2_MDBR)
  300. printf(" [MDBR]");
  301.     if (value & TCIC_SCF2_MLBAT1)
  302. printf(" [MLBAT1]");
  303.     if (value & TCIC_SCF2_MLBAT2)
  304. printf(" [MLBAT2]");
  305.     if (value & TCIC_SCF2_MRDY)
  306. printf(" [MRDY]");
  307.     if (value & TCIC_SCF2_MWP)
  308. printf(" [MWP]");
  309.     if (value & TCIC_SCF2_MCD)
  310. printf(" [MCD]");
  311.     printf("n");
  312.     }
  313. /*******************************************************************************
  314. *
  315. * tcicShowMemwin - show memory window of the TCIC chip
  316. *
  317. * This routine shows memory window of the TCIC chip.
  318. *
  319. * RETURNS: N/A
  320. */
  321. LOCAL void tcicShowMemwin
  322.     (
  323.     int sock, /* socket no. */
  324.     int win /* memory window no. */
  325.     )
  326.     {
  327.     short base;
  328.     short mmap;
  329.     short ctl;
  330.     printf ("  Memory window %d:", win);
  331.     TCIC_SETW (TCIC_ADDR+2, TCIC_ADR2_INDREG | (sock << TCIC_SS_SHFT));
  332.     
  333.     TCIC_SETW (TCIC_ADDR, TCIC_MWIN(sock, win) + TCIC_MCTL_X);
  334.     ctl = TCIC_GETW (TCIC_DATA);
  335.     printf (ctl & TCIC_MCTL_ENA ? " [ON]" : " [OFF]");
  336.     printf (ctl & TCIC_MCTL_B8 ? " [8 Bit]" : " [16 Bit]");
  337.     if (ctl & TCIC_MCTL_QUIET)
  338. printf (" [QUIET]");
  339.     if (ctl & TCIC_MCTL_WP)
  340. printf (" [WP]");
  341.     if (ctl & TCIC_MCTL_ACC)
  342. printf (" [ACC]");
  343.     if (ctl & TCIC_MCTL_KE)
  344. printf (" [KE]");
  345.     if (ctl & TCIC_MCTL_EDC)
  346. printf (" [EDC]");
  347.     printf (ctl & TCIC_MCTL_WCLK ? " [BCLK]" : " [CCLK]");
  348.     printf (" [ws = %d]", ctl & TCIC_MCTL_WSCNT_MASK);
  349.     
  350.     TCIC_SETW (TCIC_ADDR, TCIC_MWIN(sock, win) + TCIC_MBASE_X);
  351.     base = TCIC_GETW (TCIC_DATA);
  352.     if (base & TCIC_MBASE_4K_BIT)
  353. printf (" [4K]");
  354.     
  355.     TCIC_SETW (TCIC_ADDR, TCIC_MWIN(sock, win) + TCIC_MMAP_X);
  356.     mmap = TCIC_GETW (TCIC_DATA);
  357.     if (mmap & TCIC_MMAP_REG)
  358. printf (" [REG]");
  359.     printf ("n    base = %#4.4x, mmap = %4.4x, ctl = %4.4xn",
  360.    base, mmap, ctl);
  361.     }
  362. /*******************************************************************************
  363. *
  364. * tcicShowIowin - show IO window of the TCIC chip
  365. *
  366. * This routine shows IO window of the TCIC chip.
  367. *
  368. * RETURNS: N/A
  369. */
  370. LOCAL void tcicShowIowin
  371.     (
  372.     int sock, /* socket no. */
  373.     int win /* IO window no. */
  374.     )
  375.     {
  376.     short base;
  377.     short ctl;
  378.     printf ("  IO window %d:", win);
  379.     TCIC_SETW (TCIC_ADDR+2, TCIC_ADR2_INDREG | (sock << TCIC_SS_SHFT));
  380.     
  381.     TCIC_SETW (TCIC_ADDR, TCIC_IWIN(sock, win) + TCIC_IBASE_X);
  382.     base = TCIC_GETW (TCIC_DATA);
  383.     base &= (base-1);
  384.     
  385.     TCIC_SETW (TCIC_ADDR, TCIC_IWIN(sock, win) + TCIC_ICTL_X);
  386.     ctl = TCIC_GETW (TCIC_DATA);
  387.     printf (ctl & TCIC_ICTL_ENA ? " [ON]" : " [OFF]");
  388.     if (ctl & TCIC_ICTL_1K)
  389. printf (" [1K]");
  390.     if (ctl & TCIC_ICTL_PASS16)
  391. printf (" [PASS16]");
  392.     if (ctl & TCIC_ICTL_ACC)
  393. printf (" [ACC]");
  394.     if (ctl & TCIC_ICTL_TINY)
  395. printf (" [TINY]");
  396.     switch (ctl & TCIC_ICTL_BW_MASK)
  397. {
  398.         case TCIC_ICTL_BW_DYN:
  399.     printf (" [BW_DYN]");
  400.     break;
  401.         case TCIC_ICTL_BW_8:
  402.     printf (" [BW_8]");
  403.     break;
  404.         case TCIC_ICTL_BW_16:
  405.     printf (" [BW_16]");
  406.     break;
  407.         case TCIC_ICTL_BW_ATA:
  408.     printf (" [BW_ATA]");
  409.     break;
  410.         }
  411.     printf (" [ws = %d]", ctl & TCIC_ICTL_WSCNT_MASK);
  412.     printf ("n    base = %#4.4x, ctl = %#4.4xn", base, ctl);
  413.     }
  414. /*******************************************************************************
  415. *
  416. * tcicSetl - set long word value to the register
  417. *
  418. * This routine sets long word value to the register.
  419. *
  420. * RETURNS: N/A
  421. */
  422. LOCAL void tcicSetl
  423.     (
  424.     int  reg, /* register no. */
  425.     long value /* value to set */
  426.     )
  427.     {
  428.     sysOutWord (tcicBase+reg, value & 0xffff);
  429.     sysOutWord (tcicBase+reg+2, value >> 16);
  430.     }