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

VxWorks

开发平台:

C/C++

  1. /* scsiTest.c - Program to test SCSI library */
  2. /* Copyright 1994-1996 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 01b,25sep96,dds  added documentation and corrected for wrs coding standards.
  8. 01a,25jan94,ccc  written.
  9. */
  10. /* 
  11. DESCRIPTION
  12. These set of routines are written to test the functionality of the SCSI
  13. library.
  14. */
  15. #include "vxWorks.h"
  16. #include "tickLib.h"
  17. #include "taskLib.h"
  18. #include "ioLib.h"
  19. #include "memLib.h"
  20. #include "usrLib.h"
  21. #include "fppLib.h"
  22. #include "scsiLib.h"
  23. /* defines */
  24. #define FACTOR (0x800 * 512)
  25. #define TOTAL 0x1000000
  26. #define BLOCK (0x400 * 512)
  27. #define LINES (TOTAL / FACTOR)
  28. #define THIS_TASK 0
  29. #define TEST_VERBOSE 
  30. if (testVerbose)
  31.     printf
  32.     
  33. IMPORT errno;
  34. VOID printf ();
  35. VOID bzero ();
  36. IMPORT STATUS scsiTargetOptionsGet ();
  37. IMPORT STATUS scsiTargetOptionsSet ();
  38. IMPORT STATUS scsiTestUnitRdy ();
  39. IMPORT void logMsg ();
  40. IMPORT STATUS scsiTapeModeSense ();
  41. IMPORT STATUS scsiTapeModeSelect ();
  42. IMPORT STATUS scsiReadBlockLimits ();
  43. IMPORT STATUS scsiLoad ();
  44. IMPORT STATUS scsiReserveUnit ();
  45. IMPORT STATUS scsiRewind ();
  46. IMPORT STATUS scsiErase ();
  47. IMPORT STATUS scsiReleaseUnit ();
  48. IMPORT STATUS scsiWrtTape ();
  49. IMPORT STATUS scsiWrtFileMarks ();
  50. IMPORT STATUS scsiSpace ();
  51. IMPORT STATUS scsiRdTape ();
  52. IMPORT STATUS scsiReserve ();
  53. IMPORT STATUS scsiRelease ();
  54. IMPORT STATUS scsiStartStopUnit ();
  55. /* global variables */
  56. BOOL testVerbose;
  57. /* COMMON COMMANDS */
  58. /******************************************************************************
  59. *
  60. * scsiTestTestUnitRdy - run TEST UNIT READY command
  61. *
  62. * This routine executes the TEST UNIT READY command to the specified
  63. * SCSI physical device.
  64. *
  65. * RETURNS: OK if passes, or ERROR if an error is encountered.
  66. */
  67. STATUS scsiTestTestUnitRdy
  68.     (
  69.     SCSI_PHYS_DEV *pScsiPhysDev
  70.     )
  71.     {
  72.     if (scsiTestUnitRdy (pScsiPhysDev) == ERROR)
  73. {
  74. printf ("Failed TEST UNIT READYn");
  75.         return (ERROR);
  76. }
  77.     
  78.     TEST_VERBOSE ("tPass TEST UNIT READYn");
  79.     return (OK);
  80.     }
  81. /******************************************************************************
  82. *
  83. * scsiTestInquiry - run INQUIRY command
  84. *
  85. * This routine executes the INQUIRY command to the specified
  86. * SCSI physical device.
  87. *
  88. * RETURNS: OK if passes, or ERROR if an error is encountered.
  89. */
  90. STATUS scsiTestInquiry
  91.     (
  92.     SCSI_PHYS_DEV *pScsiPhysDev, /* ptr to SCSI physical device */
  93.     char *buffer, /* ptr to data buffer          */
  94.     int  bufLength /* length of buffer in bytes   */
  95.     )
  96.     {
  97.     int i;
  98.     
  99.     if (scsiInquiry (pScsiPhysDev, buffer, bufLength) == ERROR)
  100. {
  101. printf ("Failed INQUIRYn");
  102.         return (ERROR);
  103. }
  104.     
  105.     switch (buffer [0])
  106. {
  107. case 0x00:
  108.     TEST_VERBOSE ("nnDirect-access device (e.g. disk):n");
  109.     break;
  110. case 0x01:
  111.     TEST_VERBOSE ("nnSequential-access device (e.g. tape):n");
  112.     break;
  113. default:
  114.     TEST_VERBOSE ("nnDevice type = 0x%02x:n", buffer [0]);
  115.     break;
  116. }
  117.     
  118.     switch (buffer [2] & 0x07)
  119. {
  120. case 0x00:
  121.     TEST_VERBOSE ("    Pre SCSI-1 standardn");
  122.     break;
  123. case 0x01:
  124.     TEST_VERBOSE ("    SCSI-1 devicen");
  125.     break;
  126. case 0x02:
  127.     TEST_VERBOSE ("    SCSI-2 devicen");
  128.     break;
  129. default:
  130.     TEST_VERBOSE ("    Reserved version numbern");
  131.     break;
  132. }
  133.     
  134.     switch (buffer [7] & 0x60)
  135. {
  136. case 0x40:
  137.     TEST_VERBOSE ("    Supports 32 bit transfersn");
  138.     break;
  139. case 0x20:
  140.     TEST_VERBOSE ("    Supports 16 bit transfersn");
  141.     break;
  142. default:
  143.     TEST_VERBOSE ("    Supports 8 bit transfersn");
  144.     break;
  145. }
  146.     
  147.     if ((buffer [7] & 0x02) == 0x02)
  148. TEST_VERBOSE ("    Supports command queuingn");
  149.     
  150.     TEST_VERBOSE ("ID: ");
  151.     for (i = 8; i < 16; i++)
  152. TEST_VERBOSE ("%c", buffer[i]);
  153.     TEST_VERBOSE ("nn");
  154.     
  155.     TEST_VERBOSE ("tPass INQUIRYn");
  156.     return (OK);
  157.     }
  158. /******************************************************************************
  159. *
  160. * scsiTestReqSense - runs REQUEST SENSE command
  161. *
  162. * This routine executes the REQUEST SENSE command to the specified
  163. * SCSI physical device.
  164. *
  165. * RETURNS: OK if passes, or ERROR if an error is encountered.
  166. */
  167. STATUS scsiTestReqSense
  168.     (
  169.     SCSI_PHYS_DEV *pScsiPhysDev, /* ptr to SCSI physical device */
  170.     char *buffer, /* ptr to data buffer          */
  171.     int  bufLength /* length of buffer in bytes   */
  172.     )
  173.     {
  174.     if (scsiReqSense (pScsiPhysDev, buffer, bufLength) == ERROR)
  175. {
  176. printf ("Failed REQUEST SENSEn");
  177. return (ERROR);
  178. }
  179.     
  180.     TEST_VERBOSE ("tPass REQUEST SENSEn");
  181.     return (OK);
  182.     }
  183. /* SEQUENTIAL COMMANDS */
  184. #if FALSE
  185. /******************************************************************************
  186. *
  187. * scsiTestTapeModeSense - runs tape MODE SENSE command
  188. *
  189. * This routine executes the tape MODE SENSE command to the specified
  190. * SCSI physical device.
  191. *
  192. * RETURNS: OK if passes, or ERROR if an error is encountered.
  193. */
  194. STATUS scsiTestTapeModeSense
  195.     (
  196.     SCSI_PHYS_DEV *pScsiPhysDev, /* ptr to SCSI physical device     */
  197.     int pageControl,                    /* value of the page control field */
  198.     int pageCode,                       /* value of the page code field    */
  199.     char *buffer, /* ptr to data buffer              */
  200.     int  bufLength /* length of buffer in bytes       */
  201.     )
  202.     {
  203.     if (scsiTapeModeSense (pScsiPhysDev, pageControl, pageCode, buffer,
  204.    bufLength) == ERROR)
  205.         {
  206. printf ("Failed tape MODE SENSEn");
  207. return (ERROR);
  208. }
  209.     
  210.     TEST_VERBOSE ("tPass tape MODE SENSEn");
  211.     return (OK);
  212.     }
  213. /******************************************************************************
  214.  *
  215.  * scsiTestTapeModeSelect - runs tape MODE SELECT command
  216.  *
  217.  * This routine executes the tape MODE SELECT command to the specified
  218.  * SCSI physical device.
  219.  *
  220.  * RETURNS: OK if passes, or ERROR if an error is encountered.
  221.  */
  222. STATUS scsiTestTapeModeSelect
  223.     (
  224.     SCSI_PHYS_DEV *pScsiPhysDev, /* ptr to SCSI physical device      */
  225.     int pageFormat,                     /* value of the page format bit     */
  226.     int saveParams,                     /* value of the save parameters bit */
  227.     char *buffer, /* ptr to data buffer               */
  228.     int  bufLength /* length of buffer in bytes        */
  229.     )
  230.     {
  231.     
  232.     if (scsiTapeModeSelect (pScsiPhysDev, pageFormat, saveParams, buffer,
  233.     bufLength) == ERROR)
  234.         {
  235. printf ("Failed tape MODE SELECTn");
  236. return (ERROR);
  237. }
  238.     
  239.     TEST_VERBOSE ("tPass tape MODE SELECTn");
  240.     return (OK);
  241.     
  242.     }
  243. /******************************************************************************
  244. *
  245. * scsiTestReadBlockLimits - runs tape READ BLOCK LIMITS command
  246. *
  247. * This routine executes the tape READ BLOCK LIMITS command to the specified
  248. * SCSI physical device.
  249. *
  250. * RETURNS: OK if passes, or ERROR if an error is encountered.
  251. */
  252. STATUS scsiTestReadBlockLimits
  253.     (
  254.     SCSI_PHYS_DEV *pScsiPhysDev, /* ptr to SCSI physical device          */
  255.     int    *pMaxBlockLength,  /* where to return maximum block length */
  256.     UINT16 *pMinBlockLength      /* where to return minimum block length */
  257.     )
  258.     {
  259.     if (scsiReadBlockLimits (pScsiPhysDev, pMaxBlockLength, 
  260.      pMinBlockLength) == ERROR)
  261.         {
  262. printf ("Failed tape READ BLOCK LIMITSn");
  263. return (ERROR);
  264. }
  265.     
  266.     TEST_VERBOSE ("tPass tape READ BLOCK LIMITSn");
  267.     return (OK);
  268.     }
  269. /******************************************************************************
  270. *
  271. * scsiTestLoad - runs tape LOAD command
  272. *
  273. * This routine executes the tape LOAD command to the specified
  274. * SCSI physical device.
  275. *
  276. * RETURNS: OK if passes, or ERROR if an error is encountered.
  277. */
  278. STATUS scsiTestLoad
  279.     (
  280.     SCSI_PHYS_DEV *pScsiPhysDev /* ptr to SCSI physical device      */
  281.     )
  282.     {
  283.     if (scsiLoad (pScsiPhysDev, TRUE) == ERROR)
  284.         {
  285. printf ("Failed tape LOADn");
  286. return (ERROR);
  287. }
  288.     
  289.     TEST_VERBOSE ("tPass tape LOADn");
  290.     return (OK);
  291.     }
  292. /******************************************************************************
  293. *
  294. * scsiTestUnload - runs tape UNLOAD command
  295. *
  296. * This routine executes the tape UNLOAD command to the specified
  297. * SCSI physical device.
  298. *
  299. * RETURNS: OK if passes, or ERROR if an error is encountered.
  300. */
  301. STATUS scsiTestUnload
  302.     (
  303.     SCSI_PHYS_DEV *pScsiPhysDev /* ptr to SCSI physical device      */
  304.     )
  305.     {
  306.     if (scsiLoad (pScsiPhysDev, FALSE) == ERROR)
  307.         {
  308. printf ("Failed tape UNLOADn");
  309. return (ERROR);
  310. }
  311.     
  312.     TEST_VERBOSE ("tPass tape UNLOADn");
  313.     return (OK);
  314.     }
  315. /******************************************************************************
  316. *
  317. * scsiTestReserveUnit - runs tape RESERVE UNIT command
  318. *
  319. * This routine executes the tape RESERVE UNIT command to the specified
  320. * SCSI physical device.
  321. *
  322. * RETURNS: OK if passes, or ERROR if an error is encountered.
  323. */
  324. STATUS scsiTestReserveUnit
  325.     (
  326.     SCSI_PHYS_DEV *pScsiPhysDev /* ptr to SCSI physical device */
  327.     )
  328.     {
  329.     if (scsiReserveUnit (pScsiPhysDev) == ERROR)
  330.         {
  331. printf ("Failed tape RESERVE UNITn");
  332. return (ERROR);
  333. }
  334.     
  335.     TEST_VERBOSE ("tPass tape RESERVE UNITn");
  336.     return (OK);
  337.     }
  338. /******************************************************************************
  339. *
  340. * scsiTestReleaseUnit - runs tape RELEASE UNIT command
  341. *
  342. * This routine executes the tape RELEASE UNIT command to the specified
  343. * SCSI physical device.
  344. *
  345. * RETURNS: OK if passes, or ERROR if an error is encountered.
  346. */
  347. STATUS scsiTestReleaseUnit
  348.     (
  349.     SCSI_PHYS_DEV *pScsiPhysDev /* ptr to SCSI physical device */
  350.     )
  351.     {
  352.     if (scsiReleaseUnit (pScsiPhysDev) == ERROR)
  353.         {
  354. printf ("Failed tape RELEASE UNITn");
  355. return (ERROR);
  356. }
  357.     
  358.     TEST_VERBOSE ("tPass tape RELEASE UNITn");
  359.     return (OK);
  360.     }
  361. /******************************************************************************
  362. *
  363. * scsiTestRewind - runs tape REWIND command
  364. *
  365. * This routine executes the tape REWIND command to the specified
  366. * SCSI physical device.
  367. *
  368. * RETURNS: OK if passes, or ERROR if an error is encountered.
  369. */
  370. STATUS scsiTestRewind
  371.     (
  372.     SCSI_PHYS_DEV *pScsiPhysDev /* ptr to SCSI physical device */
  373.     )
  374.     {
  375.     if (scsiRewind (pScsiPhysDev) == ERROR)
  376.         {
  377. printf ("Failed tape REWINDn");
  378. return (ERROR);
  379. }
  380.     
  381.     TEST_VERBOSE ("tPass tape REWINDn");
  382.     return (OK);
  383.     }
  384. /******************************************************************************
  385. *
  386. * scsiTestErase - runs tape ERASE command
  387. *
  388. * This routine executes the tape ERASE command to the specified
  389. * SCSI physical device.
  390. *
  391. * RETURNS: OK if passes, or ERROR if an error is encountered.
  392. */
  393. STATUS scsiTestErase
  394.     (
  395.     SCSI_PHYS_DEV *pScsiPhysDev /* ptr to SCSI physical device      */
  396.     )
  397.     {
  398.     if (scsiErase (pScsiPhysDev, TRUE) == ERROR)
  399.         {
  400. printf ("Failed tape ERASEn");
  401. return (ERROR);
  402. }
  403.     
  404.     TEST_VERBOSE ("tPass tape ERASEn");
  405.     return (OK);
  406.     }
  407. /******************************************************************************
  408. *
  409. * scsiTestWrtFileMarks - runs tape WRITE FILE MARKS command
  410. *
  411. * This routine executes the tape WRITE FILE MARKS command to the specified
  412. * SCSI physical device.
  413. *
  414. * RETURNS: OK if passes, or ERROR if an error is encountered.
  415. */
  416. STATUS scsiTestWrtFileMarks
  417.     (
  418.     SCSI_PHYS_DEV *pScsiPhysDev, /* ptr to SCSI physical device   */
  419.     int numMarks,                       /* number of file marks to write */
  420.     BOOL shortMark                      /* TRUE to write short file mark */
  421.     )
  422.     {
  423.     if (scsiWrtFileMarks (pScsiPhysDev, numMarks, shortMark) == ERROR)
  424.         {
  425. printf ("Failed tape WRITE FILE MARKSn");
  426. return (ERROR);
  427. }
  428.     
  429.     TEST_VERBOSE ("tPass tape WRITE FILE MARKSn");
  430.     return (OK);
  431.     }
  432. /******************************************************************************
  433. *
  434. * scsiTestSpace - runs tape SPACE command
  435. *
  436. * This routine executes the tape SPACE command to the specified
  437. * SCSI physical device.
  438. *
  439. * RETURNS: OK if passes, or ERROR if an error is encountered.
  440. */
  441. STATUS scsiTestSpace
  442.    (
  443.     SCSI_PHYS_DEV *pScsiPhysDev,      /* ptr to SCSI physical device */
  444.     int count,                        /* count for space command    */
  445.     int spaceCode                     /* code for the type of space command */
  446.     )
  447.     {
  448.     if (scsiSpace (pScsiPhysDev, count, spaceCode) == ERROR)
  449.         {
  450. printf ("Failed tape SPACEn");
  451. return (ERROR);
  452. }
  453.     
  454.     TEST_VERBOSE ("tPass tape SPACEn");
  455.     return (OK);
  456.     }
  457. /******************************************************************************
  458. *
  459. * scsiTestWrtTapeVar - runs tape WRITE command for variable block size
  460. *
  461. * This routine executes the tape WRITE command to the specified
  462. * SCSI physical device. Data is written using variable block size.
  463. *
  464. * RETURNS: OK if passes, or ERROR if an error is encountered.
  465. */
  466. STATUS scsiTestWrtTapeVar
  467.     (
  468.     SCSI_PHYS_DEV *pScsiPhysDev, /* ptr to SCSI physical device   */
  469.     int numBytes,                       /* total bytes to be written     */
  470.     char *buffer                        /* ptr to input data buffer      */
  471.     )
  472.     {
  473.     if (scsiWrtTape (pScsiPhysDev, numBytes, buffer, FALSE) == ERROR)
  474.         {
  475. printf ("Failed tape WRITE Varn");
  476. return (ERROR);
  477. }
  478.     
  479.     TEST_VERBOSE ("tPass tape WRITE Varn");
  480.     return (OK);
  481.     }
  482. /******************************************************************************
  483. *
  484. * scsiTestRdTapeVar - runs tape READ command for variable block size
  485. *
  486. * This routine executes the tape READ command to the specified
  487. * SCSI physical device. Data is written using variable block size.
  488. *
  489. * RETURNS: OK if passes, or ERROR if an error is encountered.
  490. */
  491. STATUS scsiTestRdTapeVar
  492.     (
  493.     SCSI_PHYS_DEV *pScsiPhysDev, /* ptr to SCSI physical device   */
  494.     int numBytes,                       /* total bytes to be written     */
  495.     char *buffer                        /* ptr to input data buffer      */
  496.     )
  497.     {
  498.     if (scsiRdTape (pScsiPhysDev, numBytes, buffer, FALSE) == ERROR)
  499.         {
  500. printf ("Failed tape READ Varn");
  501. return (ERROR);
  502. }
  503.     
  504.     TEST_VERBOSE ("tPass tape READ Varn");
  505.     return (OK);
  506.     }
  507. /******************************************************************************
  508. *
  509. * scsiTestWrtTapeFixed - runs tape WRITE command for fixed block size
  510. *
  511. * This routine executes the tape WRITE command to the specified
  512. * SCSI physical device. Data is written using fixed block size.
  513. *
  514. * RETURNS: OK if passes, or ERROR if an error is encountered.
  515. */
  516. STATUS scsiTestWrtTapeFixed
  517.     (
  518.     SCSI_PHYS_DEV *pScsiPhysDev, /* ptr to SCSI physical device   */
  519.     int numBytes,                       /* total bytes to be written     */
  520.     char *buffer                        /* ptr to input data buffer      */
  521.     )
  522.     {
  523.     if (scsiWrtTape (pScsiPhysDev, numBytes, buffer, TRUE) == ERROR)
  524.         {
  525. printf ("Failed tape WRITE Fixedn");
  526. return (ERROR);
  527. }
  528.     
  529.     TEST_VERBOSE ("tPass tape WRITE Fixedn");
  530.     return (OK);
  531.     }
  532. /******************************************************************************
  533. *
  534. * scsiTestRdTapeFixed - runs tape READ command for fixed block size
  535. *
  536. * This routine executes the tape READ command to the specified
  537. * SCSI physical device. Data is written using fixed block size.
  538. *
  539. * RETURNS: OK if passes, or ERROR if an error is encountered.
  540. */
  541. STATUS scsiTestRdTapeFixed
  542.     (
  543.     SCSI_PHYS_DEV *pScsiPhysDev, /* ptr to SCSI physical device   */
  544.     int numBytes,                       /* total bytes to be written     */
  545.     char *buffer                        /* ptr to input data buffer      */
  546.     )
  547.     {
  548.     if (scsiRdTape (pScsiPhysDev, numBytes, buffer, TRUE) == ERROR)
  549.         {
  550. printf ("Failed tape READ Fixedn");
  551. return (ERROR);
  552. }
  553.     
  554.     TEST_VERBOSE ("tPass tape READ Fixedn");
  555.     return (OK);
  556.     }
  557. #endif
  558. /*DIRECT ACCESS COMMANDS */
  559. /******************************************************************************
  560. *
  561. * scsiTestModeSense - runs disk MODE SENSE command
  562. *
  563. * This routine executes the disk MODE SENSE command to the specified
  564. * SCSI physical device.
  565. *
  566. * RETURNS: OK if passes, or ERROR if an error is encountered.
  567. */
  568. STATUS scsiTestModeSense
  569.     (
  570.     SCSI_PHYS_DEV *pScsiPhysDev, /* ptr to SCSI physical device     */
  571.     int pageControl,                    /* value of the page control field */
  572.     int pageCode,                       /* value of the page code field    */
  573.     char *buffer, /* ptr to data buffer              */
  574.     int  bufLength /* length of buffer in bytes       */
  575.     )
  576.     {
  577.     if (scsiModeSense (pScsiPhysDev, pageControl, pageCode, buffer,
  578.        bufLength) == ERROR)
  579.         {
  580. printf ("Failed disk MODE SENSEn");
  581. return (ERROR);
  582. }
  583.     
  584.     TEST_VERBOSE ("tPass disk MODE SENSEn");
  585.     return (OK);
  586.     }
  587. /******************************************************************************
  588. *
  589. * scsiTestModeSelect - runs disk MODE SELECT command
  590. *
  591. * This routine executes the disk MODE SELECT command to the specified
  592. * SCSI physical device.
  593. *
  594. * RETURNS: OK if passes, or ERROR if an error is encountered.
  595. */
  596. STATUS scsiTestModeSelect
  597.     (
  598.     SCSI_PHYS_DEV *pScsiPhysDev, /* ptr to SCSI physical device      */
  599.     int pageFormat,                     /* value of the page format bit     */
  600.     int saveParams,                     /* value of the save parameters bit */
  601.     char *buffer, /* ptr to data buffer               */
  602.     int  bufLength /* length of buffer in bytes        */
  603.     )
  604.     {
  605.     if (scsiModeSelect (pScsiPhysDev, pageFormat, saveParams, buffer,
  606. bufLength) == ERROR)
  607.         {
  608. printf ("Failed disk MODE SELECTn");
  609. return (ERROR);
  610. }
  611.     
  612.     TEST_VERBOSE ("tPass disk MODE SELECTn");
  613.     return (OK);
  614.     }
  615. /******************************************************************************
  616. *
  617. * scsiTestReserve - runs disk RESERVE command
  618. *
  619. * This routine executes the disk RESERVE command to the specified
  620. * SCSI physical device.
  621. *
  622. * RETURNS: OK if passes, or ERROR if an error is encountered.
  623. */
  624. STATUS scsiTestReserve
  625.     (
  626.     SCSI_PHYS_DEV *pScsiPhysDev
  627.     )
  628.     {
  629.     if (scsiReserve (pScsiPhysDev) == ERROR)
  630.         {
  631. printf ("Failed disk RESERVEn");
  632. return (ERROR);
  633. }
  634.     
  635.     TEST_VERBOSE ("tPass disk RESERVEn");
  636.     return (OK);
  637.     }
  638. /******************************************************************************
  639. *
  640. * scsiTestRelease - runs disk RELEASE command
  641. *
  642. * This routine executes the disk RELEASE command to the specified
  643. * SCSI physical device.
  644. *
  645. * RETURNS: OK if passes, or ERROR if an error is encountered.
  646. */
  647. STATUS scsiTestRelease
  648.     (
  649.     SCSI_PHYS_DEV *pScsiPhysDev
  650.     )
  651.     {
  652.     if (scsiRelease (pScsiPhysDev) == ERROR)
  653.         {
  654. printf ("Failed disk RELEASEn");
  655. return (ERROR);
  656. }
  657.     
  658.     TEST_VERBOSE ("tPass disk RELEASEn");
  659.     return (OK);
  660.     }
  661. /******************************************************************************
  662. *
  663. * scsiTestReadCapacity - runs disk READ CAPACITY command
  664. *
  665. * This routine executes the disk READ CAPACITY command to the specified
  666. * SCSI physical device.
  667. *
  668. * RETURNS: OK if passes, or ERROR if an error is encountered.
  669. */
  670. STATUS scsiTestReadCapacity
  671.     (
  672.     SCSI_PHYS_DEV *pScsiPhysDev,/* ptr to SCSI physical device */
  673.     int *pLastLBA,              /* last logical block address */
  674.     int *pBlkLength             /* where to return block length */
  675.     )
  676.     {
  677.     if (scsiReadCapacity (pScsiPhysDev, pLastLBA, pBlkLength) == ERROR)
  678.         {
  679. printf ("Failed disk READ CAPACITYn");
  680. return (ERROR);
  681. }
  682.     
  683.     TEST_VERBOSE ("tPass disk READ CAPACITYn");
  684.     return (OK);    
  685.     }
  686. /******************************************************************************
  687. *
  688. * scsiTestRdSecs - runs disk READ command
  689. *
  690. * This routine executes the disk READ command to the specified
  691. * SCSI physical device.
  692. *
  693. * RETURNS: OK if passes, or ERROR if an error is encountered.
  694. */
  695. STATUS scsiTestRdSecs
  696.     (
  697.     SCSI_BLK_DEV *pScsiBlkDev,  /* ptr to SCSI block device info */
  698.     int sector,                 /* sector number to be read */
  699.     int numSecs,                /* total sectors to be read */
  700.     char *buffer                /* ptr to input data buffer */
  701.     )
  702.     {
  703.     if (scsiRdSecs (pScsiBlkDev, sector, numSecs, buffer) == ERROR)
  704.         {
  705. printf ("Failed disk READn");
  706. return (ERROR);
  707. }
  708.     
  709.     TEST_VERBOSE ("tPass disk READn");
  710.     return (OK);
  711.     }
  712. /******************************************************************************
  713. *
  714. * scsiTestWrtSecs - runs disk WRITE command
  715. *
  716. * This routine executes the disk WRITE command to the specified
  717. * SCSI physical device.
  718. *
  719. * RETURNS: OK if passes, or ERROR if an error is encountered.
  720. */
  721. STATUS scsiTestWrtSecs
  722.     (
  723.     SCSI_BLK_DEV *pScsiBlkDev,  /* ptr to SCSI block device info */
  724.     int sector,                 /* sector number to be written */
  725.     int numSecs,                /* total sectors to be written */
  726.     char *buffer                /* ptr to output data buffer */
  727.     )
  728.     {
  729.     if (scsiWrtSecs (pScsiBlkDev, sector, numSecs, buffer) == ERROR)
  730.         {
  731. printf ("Failed disk WRITEn");
  732. return (ERROR);
  733. }
  734.     
  735.     TEST_VERBOSE ("tPass disk WRITEn");
  736.     return (OK);
  737.     }
  738. /******************************************************************************
  739. *
  740. * scsiTestStartStopUnit - runs disk START STOP UNIT command
  741. *
  742. * This routine executes the disk START STOP UNIT command to the specified
  743. * SCSI physical device.
  744. *
  745. * RETURNS: OK if passes, or ERROR if an error is encountered.
  746. */
  747. STATUS scsiTestStartStopUnit
  748.     (
  749.     SCSI_PHYS_DEV *pScsiPhysDev,  /* ptr to SCSI physical device */
  750.     BOOL start                    /* TRUE == start, FALSE == stop */
  751.     )
  752.     {
  753.     if (scsiStartStopUnit (pScsiPhysDev, start) == ERROR)
  754.         {
  755. printf ("Failed disk START STOP UNITn");
  756. return (ERROR);
  757. }
  758.     
  759.     TEST_VERBOSE ("tPass disk START STOP UNITn");
  760.     return (OK);
  761.     }
  762. /******************************************************************************
  763. *
  764. * scsiTestFormatUnit - runs disk FORMAT UNIT command
  765. *
  766. * This routine executes the disk FORMAT UNIT command to the specified
  767. * SCSI physical device.
  768. *
  769. * RETURNS: OK if passes, or ERROR if an error is encountered.
  770. */
  771. STATUS scsiTestFormatUnit
  772.     (
  773.     SCSI_PHYS_DEV *pScsiPhysDev,/* ptr to SCSI physical device */
  774.     BOOL cmpDefectList,         /* whether defect list is complete */
  775.     int defListFormat,          /* defect list format */
  776.     int vendorUnique,           /* vendor unique byte */
  777.     int interleave,             /* interleave factor */
  778.     char *buffer,               /* ptr to input data buffer */
  779.     int bufLength               /* length of buffer in bytes */
  780.     )
  781.     {
  782.     if (scsiFormatUnit (pScsiPhysDev, cmpDefectList, defListFormat, 
  783. vendorUnique, interleave, buffer, bufLength) == ERROR)
  784.         {
  785. printf ("Failed disk FORMAT UNITn");
  786. return (ERROR);
  787. }
  788.     
  789.     TEST_VERBOSE ("tPass disk FORMAT UNITn");
  790.     return (OK);
  791.     }