File:  [NeXTSTEP 3.3 examples] / Examples / UNIX / SCSI_CD / scsi_commands.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 17:48:25 2018 UTC (8 years, 1 month ago) by root
Branches: NeXT, MAIN
CVS tags: NeXTSTEP33, HEAD
Sample Programs from NeXSTEP 3.3

/*
 * 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>
#import <bsd/dev/scsireg.h>

#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;
};


/* C functions */
void fatal(const char *msg, ...);
int do_inquiry(int fd, struct inquiry_reply *irp, 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);
int do_readbuffer(int fd, int alloc_len, int *avail_len, struct timeval *tvp,
	struct esense_reply *erp);
int do_writebuffer(int fd, int alloc_len, struct timeval *tvp,
	struct esense_reply *erp);

void sprint_er(char *string, struct esense_reply *er);
void fprint_er(int fd, struct esense_reply *erp);

#endif	/* #ifndef SCSI_COMMANDS */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.