This is scsi_commands.h in view mode; [Download] [Up]
/*
* scsi_commands.h: header file for scsi_command.c
*
* History
* -------
* Tue Sep 3 15:00:13 PDT 1991 James C. Lee at NeXT
* Created (copied a lot of data structures & functions calls from
* perftest.c by Mike DeMoney)
*/
#ifndef SCSI_COMMANDS
#define SCSI_COMMANDS
#import <sys/time.h>
#import <bsd/dev/disk.h>
#import <sys/types.h>
/* I use a copy of the NS-3.1 version of bsd/dev/scsireg.h, because
* at some point I think I want to split it apart into "field values"
* (such as #define DEVTYPE_DISK), and actual structure definitions.
*/
/* #import <bsd/dev/scsireg.h> */
#import "scsireg_31.h" /* garance... */
#define Version "0.00"
struct mode_sense_cmd {
u_int msc_opcode:8,
msc_lun:3,
msc_mbz1:5,
msc_pcf:2,
msc_page:6,
msc_mbz2:8;
u_char msc_len;
u_char msc_ctrl;
};
struct param_list_header {
u_char plh_len;
u_char plh_medium;
u_char plh_wp:1,
plh_reserved:7;
u_char plh_blkdesclen;
};
struct block_descriptor {
u_int bd_density:8,
bd_nblk:24;
u_int bd_reserved:8,
bd_blklen:24;
};
struct device_format_params {
u_char dfp_savable:1,
dfp_reserved:1,
dfp_pagecode:6;
u_char dfp_pagelen;
u_short dfp_trkszone;
u_short dfp_altsecszone;
u_short dfp_alttrkszone;
u_short dfp_alttrksvol;
u_short dfp_sectors;
u_short dfp_bytessector;
u_short dfp_interleave;
u_short dfp_trkskew;
u_short dfp_cylskew;
u_char dfp_ssec:1,
dfp_hsec:1,
dfp_rmb:1,
dfp_surf:1,
dfp_reserved2:4;
u_char dfp_reserved3;
u_char dfp_reserved4;
u_char dfp_reserved5;
};
struct rigid_drive_params {
u_char rdp_savable:1,
rdp_reserved:1,
rdp_pagecode:6;
u_char rdp_pagelen;
u_char rdp_maxcylmsb;
u_char rdp_maxcylinb;
u_char rdp_maxcyllsb;
u_char rdp_maxheads;
u_char rdp_wpstartmsb;
u_char rdp_wpstartinb;
u_char rdp_wpstartlsb;
u_char rdp_rwcstartmsb;
u_char rdp_rwcstartinb;
u_char rdp_rwcstartlsb;
u_char rdp_stepratemsb;
u_char rdp_stepratelsb;
u_char rdp_landcylmsb;
u_char rdp_landcylinb;
u_char rdp_landcyllsb;
u_char rdp_reserved2;
u_char rdp_reserved3;
u_char rdp_reserved4;
};
#define THREE_BYTE(x) \
(((x##msb)<<16)|((x##inb)<<8)|(x##lsb))
#define TWO_BYTE(x) \
(((x##msb)<<8)|(x##lsb))
struct mode_sense_reply {
struct param_list_header msr_plh;
struct block_descriptor msr_bd;
union {
struct device_format_params u_msr_dfp;
struct rigid_drive_params u_msr_rdp;
}u;
};
/* two variables for about the same thing, just so references to
* the number are clear about which number they really mean.
*/
#define INQ_ALL_MAX_SCSI_ID 7 /* SCSI ID's are 0 to 7 */
#define INQ_ALL_MAX_SCSI_CNT 8 /* so there are 8 of them */
struct inquiry_all_entry {
int devIoStat; /* copy of sr_io_status */
int deviceNumber; /* ie, the 0 in "sd0" */
struct inquiry_reply inqResult;
};
struct inquiry_all_reply {
int maxScsiCount; /* note: max scsi count */
struct inquiry_all_entry scsiArray[INQ_ALL_MAX_SCSI_CNT];
};
/* C functions */
void fatal(const char *msg, ...);
int do_inquiry(int fd, struct inquiry_reply *irp, struct esense_reply *erp);
int do_inquiryall(int replyCount, struct inquiry_all_reply *all,
struct esense_reply *erp);
int do_testunitready(int fd, struct timeval *tvp, struct esense_reply *erp);
int do_modesense(int fd, struct mode_sense_reply *msrp, int page,
struct esense_reply *erp);
int do_readcapacity(int fd, struct capacity_reply *crp,
struct esense_reply *erp);
int do_seek(int fd, int lba, struct timeval *tvp, struct esense_reply *erp);
int do_read(int fd, int lba, int nblks, struct timeval *tvp,
struct esense_reply *erp);
int do_write(int fd, int lba, int nblks, struct timeval *tvp,
struct esense_reply *erp);
#endif /* #ifndef SCSI_COMMANDS */
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.