home *** CD-ROM | disk | FTP | other *** search
/ NeXTSTEP 3.3 (Developer) / NeXT_Developer-3.3.iso / NextDeveloper / Examples / UNIX / SCSI_CD / scsi_commands.h < prev   
Encoding:
C/C++ Source or Header  |  1995-02-10  |  3.0 KB  |  142 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 <bsd/dev/disk.h>
  16. #import <sys/types.h>
  17. #import <bsd/dev/scsireg.h>
  18.  
  19. #define Version "0.00"
  20.  
  21.  
  22. struct mode_sense_cmd {
  23.     u_int    msc_opcode:8,
  24.         msc_lun:3,
  25.         msc_mbz1:5,
  26.         msc_pcf:2,
  27.         msc_page:6,
  28.         msc_mbz2:8;
  29.     u_char    msc_len;
  30.     u_char    msc_ctrl;
  31. };
  32.  
  33. struct param_list_header {
  34.     u_char    plh_len;
  35.     u_char    plh_medium;
  36.     u_char    plh_wp:1,
  37.         plh_reserved:7;
  38.     u_char    plh_blkdesclen;
  39. };
  40.  
  41. struct block_descriptor {
  42.     u_int    bd_density:8,
  43.         bd_nblk:24;
  44.     u_int    bd_reserved:8,
  45.         bd_blklen:24;
  46. };
  47.  
  48. struct device_format_params {
  49.     u_char    dfp_savable:1,
  50.         dfp_reserved:1,
  51.         dfp_pagecode:6;
  52.     u_char    dfp_pagelen;
  53.     u_short    dfp_trkszone;
  54.     u_short    dfp_altsecszone;
  55.     u_short    dfp_alttrkszone;
  56.     u_short    dfp_alttrksvol;
  57.     u_short    dfp_sectors;
  58.     u_short    dfp_bytessector;
  59.     u_short    dfp_interleave;
  60.     u_short    dfp_trkskew;
  61.     u_short    dfp_cylskew;
  62.     u_char    dfp_ssec:1,
  63.         dfp_hsec:1,
  64.         dfp_rmb:1,
  65.         dfp_surf:1,
  66.         dfp_reserved2:4;
  67.     u_char    dfp_reserved3;
  68.     u_char    dfp_reserved4;
  69.     u_char    dfp_reserved5;
  70. };
  71.  
  72. struct rigid_drive_params {
  73.     u_char    rdp_savable:1,
  74.         rdp_reserved:1,
  75.         rdp_pagecode:6;
  76.     u_char    rdp_pagelen;
  77.  
  78.     u_char    rdp_maxcylmsb;
  79.     u_char    rdp_maxcylinb;
  80.     u_char    rdp_maxcyllsb;
  81.  
  82.     u_char    rdp_maxheads;
  83.  
  84.     u_char    rdp_wpstartmsb;
  85.     u_char    rdp_wpstartinb;
  86.     u_char    rdp_wpstartlsb;
  87.  
  88.     u_char    rdp_rwcstartmsb;
  89.     u_char    rdp_rwcstartinb;
  90.     u_char    rdp_rwcstartlsb;
  91.  
  92.     u_char    rdp_stepratemsb;
  93.     u_char    rdp_stepratelsb;
  94.  
  95.     u_char    rdp_landcylmsb;
  96.     u_char    rdp_landcylinb;
  97.     u_char    rdp_landcyllsb;
  98.  
  99.     u_char    rdp_reserved2;
  100.     u_char    rdp_reserved3;
  101.     u_char    rdp_reserved4;
  102. };
  103.  
  104. #define    THREE_BYTE(x)    \
  105.         (((x##msb)<<16)|((x##inb)<<8)|(x##lsb))
  106.  
  107. #define    TWO_BYTE(x)    \
  108.         (((x##msb)<<8)|(x##lsb))
  109.  
  110. struct mode_sense_reply {
  111.     struct param_list_header msr_plh;
  112.     struct block_descriptor msr_bd;
  113.     union {
  114.         struct device_format_params u_msr_dfp;
  115.         struct rigid_drive_params u_msr_rdp;
  116.     }u;
  117. };
  118.  
  119.  
  120. /* C functions */
  121. void fatal(const char *msg, ...);
  122. int do_inquiry(int fd, struct inquiry_reply *irp, struct esense_reply *erp);
  123. int do_testunitready(int fd, struct timeval *tvp, struct esense_reply *erp);
  124. int do_modesense(int fd, struct mode_sense_reply *msrp, int page,
  125.     struct esense_reply *erp);
  126. int do_readcapacity(int fd, struct capacity_reply *crp,
  127.     struct esense_reply *erp);
  128. int do_seek(int fd, int lba, struct timeval *tvp, struct esense_reply *erp);
  129. int do_read(int fd, int lba, int nblks, struct timeval *tvp,
  130.     struct esense_reply *erp);
  131. int do_write(int fd, int lba, int nblks, struct timeval *tvp,
  132.     struct esense_reply *erp);
  133. int do_readbuffer(int fd, int alloc_len, int *avail_len, struct timeval *tvp,
  134.     struct esense_reply *erp);
  135. int do_writebuffer(int fd, int alloc_len, struct timeval *tvp,
  136.     struct esense_reply *erp);
  137.  
  138. void sprint_er(char *string, struct esense_reply *er);
  139. void fprint_er(int fd, struct esense_reply *erp);
  140.  
  141. #endif    /* #ifndef SCSI_COMMANDS */
  142.