home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.0 / NeXTSTEP3.0.iso / NextDeveloper / Examples / UNIX / SCSI_CD / scsi_commands.h < prev    next >
Text File  |  1992-07-24  |  3KB  |  141 lines

  1. /*
  2.  * scsi_commands.h: header file for scsi_command.c
  3.  *
  4.  * History
  5.  * -------
  6.  * Tue Sep  3 15:00:13 PDT 1991 James C. Lee at NeXT
  7.  *  Created (copied a lot of data structures & functions calls from
  8.  *   perftest.c by Mike DeMoney)
  9.  */
  10.  
  11. #ifndef SCSI_COMMANDS
  12. #define SCSI_COMMANDS
  13.  
  14. #import <sys/time.h>
  15. #import <nextdev/disk.h>
  16. #import <sys/types.h>
  17. #import <nextdev/scsireg.h>
  18.  
  19. #define version "0.00"
  20.  
  21.  
  22. struct mode_sense_cmd {
  23.     u_int    msc_opcode:8,
  24.         msc_lun:$        msc_mbz1:5,
  25.         msc_pcf:2,
  26.         msc_page:6,
  27.         msc_mbz2:8;
  28.     u_char    msc_len;
  29.     u_char    msc_ctrl;
  30. };
  31.  
  32. struct param_list_header {
  33.     u_char    plh_len;
  34.     u_char    plh_medium;
  35.     u_char    plh_wp:1,
  36.         plh_reserved:7;
  37.     u_char    plh_blkdesclen;
  38. };
  39.  
  40. struct block_descriptor {
  41.     u_int    bd_density:8,
  42.         bd_nblk:24;
  43.     u_int    bd_reserved:8,
  44.         bd_blklen:24;
  45. };
  46.  
  47. struct device_format_params {
  48.     u_char    dfp_savable:1,
  49.         dfp_reserved:1,
  50.         dfp_pagecode:6;
  51.     u_char    dfp_pagelen;
  52.     u_short    dfp_trkszone;
  53.     u_short    dfp_altsecszone;
  54.     u_short    dfp_alttrkszone;
  55.     u_short    dfp_alttrksvol;
  56.     u_short    dfp_sectors;
  57.     u_short    dfp_bytessector;
  58.     u_short    dfp_interleave;
  59.     u_short    dfp_trkskew;
  60.     u_short    dfp_cylskew;
  61.     u_char    dfp_ssec:1,
  62.         dfp_hsec:1,
  63.         dfp_rmb:1,
  64.         dfp_surf:1,
  65.         dfp_reserved2:4;
  66.     u_char    dfp_reserved3;
  67.     u_char    dfp_reserved4;
  68.     u_char    dfp_reserved5;
  69. };
  70.  
  71. struct rigid_drive_params {
  72.     u_char    rdp_savable:1,
  73.         rdp_reserved:1,
  74.         rdp_pagecode:6;
  75.     u_char    rdp_pagelen;
  76.  
  77.     u_char    rdp_maxcylmsb;
  78.     u_char    rdp_maxcylinb;
  79.     u_char    rdp_maxcyllsb;
  80.  
  81.     u_char    rdp_maxheads;
  82.  
  83.     u_char    rdp_wpstartmsb;
  84.     u_char    rdp_wpstartinb;
  85.     u_char    rdp_wpstartlsb;
  86.  
  87.     u_char    rdp_rwcstartmsb;
  88.     u_char    rdp_rwcstartinb;
  89.     u_char    rdp_rwcstartlsb;
  90.  
  91.     u_char    rdp_stepratemsb;
  92.     u_char    rdp_stepratelsb;
  93.  
  94.     u_char    rdp_landcylmsb;
  95.     u_char    rdp_landcylinb;
  96.     u_char    rdp_landcyllsb;
  97.  
  98.     u_char    rdp_reserved2;
  99.     u_char    rdp_reserved3;
  100.     u_char    rdp_reserved4;
  101. };
  102.  
  103. #define    THREE_BYTE(x)    \
  104.         (((x##msb)<<16)|((x##inb)<<8)|(x##lsb))
  105.  
  106. #define    TWO_BYTE(x)    \
  107.         (((x##msb)<<8)|(x##lsb))
  108.  
  109. struct mode_sense_reply {
  110.     struct param_list_header msr_plh;
  111.     struct block_descriptor msr_bd;
  112.     union {
  113.         struct device_format_params u_msr_dfp;
  114.         struct rigid_drive_params u_msr_rdp;
  115.     }u;
  116. };
  117.  
  118.  
  119. /* C functions */
  120. void fatal(const char *msg, ...);
  121. int do_inquiry(int fd, struct inquiry_reply *irp, struct esense_reply *erp);
  122. int do_testunitready(int fd, struct timeval *tvp, struct esense_reply *erp);
  123. int do_modesense(int fd, struct mode_sense_reply *msrp, int page,
  124.     struct esense_reply *erp);
  125. int do_readcapacity(int fd, struct capacity_reply *crp,
  126.     struct esense_reply *erp);
  127. int do_seek(int fd, int lba, struct timeval *tvp, struct esense_reply *erp);
  128. int do_read(int fd, int lba, int nblks, struct timeval *tvp,
  129.     struct esense_reply *erp);
  130. int do_write(int fd, int lba, int nblks, struct timeval *tvp,
  131.     struct esense_reply *erp);
  132. int do_readbuffer(int fd, int alloc_len, int *$    l_len, struct timeval *tvp,
  133.     struct esense_reply *erp);
  134. int do_writebuffer(int fd, int alloc_len, struct timeval *tvp,
  135.     struct esense_reply *erp);
  136.  
  137. void sprint_er(char *string, struct esense_reply *er);
  138. void fprint_er(int fd, struct esense_reply *erp);
  139.  
  140. #endif    /* #ifndef SCSI_COMMANDS */
  141.