Files
seta75D 2e8a93c394 Init
2021-10-11 18:20:23 -03:00

147 lines
4.1 KiB
C

/* @(#)sfdef.h 1.1 92/07/30 Copyr 1987 Sun Micro */
/************************************************************************
* *
* Defines for SCSI direct access devices *
* Specifically for SCSI floppies. *
* *
***********************************************************************/
#include <scsi/targets/sddef.h>
/*
* Compile options
*/
/*
* SCSI disk controller specific stuff.
*/
#define CTYPE_NCR 4
#define CTYPE_SMS 5
/************************************************************************
* *
* Floppy Direct Access device mode sense/mode select paramters *
* *
************************************************************************/
#define FLOPPY_PARMS 0x5
/*
* Mode select header
*/
/*
* Page 5 - Floppy parameters
*/
struct ccs_modesel_flexible {
u_char page_code;
u_char page_length; /* length of page */
u_char xfer_rate[2]; /* transfer rate */
u_char nhead; /* number of heads */
u_char sec_trk; /* sectors per track */
u_char data_bytes[2]; /* date bytes per sector */
u_char ncyl[2];
u_char start_cyl[2];
u_char start_cyl1[2];
u_char step[2]; /* drive step rate */
u_char pulse;
u_char head_settle[2];
u_char motor_on_delay;
u_char motor_off_delay;
u_char true_ready :1,
ssn :1,
mo :1,
/*reserved*/ :5;
u_char step_pulse;
u_char write_precomp;
u_char hload_delay;
u_char huload_delay;
u_char pins; /* how pins on the interface are used */
u_char pins1;
u_char reserved[4];
};
#define SS8SPT 0xFE /* single sided 8 sectors per track */
#define DS8SPT 0xFF /* double sided 8 sectors per track */
#define SS9SPT 0xFC /* single sided 9 sectors per track */
#define DS9SPT 0xFD /* double sided 9 sectors per track */
#define DSHSPT 0xF9 /* High density */
#define MSIZE (sizeof (struct ccs_modesel_head) +\
sizeof (struct ccs_modesel_flexible))
#define MOFF (sizeof (struct ccs_modesel_head) - 1)
#define MSTOC(x,a) \
(a)[0] = ((((short)(x))>>8)&0xff), (a)[1] = (((short)(x))&0xff)
struct sf_mode {
struct ccs_modesel_head h;
struct ccs_modesel_flexible s;
};
/*
* sf specific SCSI commands
*/
#define SCMD_INIT_CHARACTERISTICS 0x0c /* initialize drive characteristics */
/************************************************************************
* *
* Private info for scsi floppies. Pointed to by the un_private pointer *
* of one of the SCSI_DEVICE structures. *
* *
************************************************************************/
struct scsi_floppy {
struct scsi_device *un_sd; /* back pointer to SCSI_DEVICE */
struct scsi_pkt *un_rqs; /* ptr to request sense command pkt */
struct sf_drivetype *un_dp; /* drive type table */
long un_capacity; /* capacity of drive */
long un_lbasize; /* logical block size */
struct buf *un_rbufp; /* for use in raw io */
struct buf *un_sbufp; /* for use in special io */
caddr_t un_mode; /* ptr to mode sense/select info */
struct dk_map un_map[NDKMAP]; /* logical partitions */
struct dk_geom un_g; /* disk geometry */
struct diskhd un_utab; /* for queuing */
u_int un_err_resid; /* resid from last error */
u_int un_err_blkno; /* disk block where error occurred */
dev_t un_dev; /* unix device */
u_char un_last_cmd; /* last cmd (DKIOCGDIAG only) */
u_char un_soptions; /* 'special' command options */
u_char un_err_severe; /* error severity */
u_char un_status; /* sense key from last error */
u_char un_err_code; /* vendor unique error code */
u_char un_retry_ct; /* retry count */
u_char un_gvalid; /* geometry is valid */
u_char un_state; /* current state */
u_char un_last_state; /* last state */
u_char un_open; /* bit pattern of open partitions */
};
/*
* Disk driver states
*/
#define SF_STATE_NIL 0
#define SF_STATE_CLOSED 1
#define SF_STATE_OPEN 2
#define SF_STATE_OPENING 3
#define SF_STATE_SENSING 4
#define SF_STATE_RWAIT 5
#define SF_STATE_DETACHING 6
/*
* Drive Types (and characteristics)
*/
struct sf_drivetype {
char *name; /* for debug purposes */
char options; /* drive options */
char ctype; /* controller type */
char vidlen; /* Vendor id length */
char vid[8]; /* Vendor id */
};