📄 sdreg.h
字号:
/* @(#)sdreg.h 1.1 92/07/30 Copyr 1987 Sun Micro *//* * Defines for SCSI disk drives. */#define SD_TIMEOUT /* Enable command timeouts *//*#define SD_FORMAT /* Enable on-line formatting mods */#define SD_REASSIGN /* Enable auto disk repair *//* * Driver state machine codes -- Do not change order! * Opening states: * closed -> open * * closed -> opening || -> open * * closed -> opening || -> open * opening_delay || * * Closing states: * open -> closed * * Open states: * open -> open (passed command) * * open -> sensing -> open (failed command) * * open -> sensing -> retrying_cmd -> open */#define CLOSED 0#define OPEN_FAILED 1#define OPENING_DELAY 2#define OPENING 3#define MAPPING 4#define SENSING 5#define RETRYING 6#define OPEN 7/* * SCSI disk controller specific stuff. */#define CTYPE_UNKNOWN 0#define CTYPE_MD21 1#define CTYPE_ACB4000 2#define CTYPE_CCS 3#ifndef SD_FORMAT#define DK_NOERROR 0#define DK_CORRECTED 1#define DK_RECOVERED 2#define DK_FATAL 3#endif SD_FORMAT/* * Special commands for internal use only. */#define SC_READ_LABEL 0x80 /* phony - for int use only */#define SC_SPECIAL_READ 0x81 /* phony - for int use only */#define SC_SPECIAL_WRITE 0x82 /* phony - for int use only *//* * Define various buffer and I/O block sizes */#define SECSIZE 512 /* Bytes/sector */#define SECDIV 9 /* log2 (SECSIZE) */#define MAXBUFSIZE (63 * 1024) /* 63 KB max size of buffer *//* * Defines for SCSI disk format cdb. */#define b_cylin b_resid#define fmt_parm_bits g0_addr2 /* for format options */#define fmt_interleave g0_count0 /* for encode interleave */#define defect_list_descrip g1_addr3 /* list description bits *//* * Bits in the special command flags field. */#define SD_SILENT 0x0001 /* don't print error messages */#define SD_DVMA_RD 0x0002 /* enable DVMA memory reads */#define SD_DVMA_WR 0x0004 /* enable DVMA memory writes */#define SD_NORETRY 0x0008 /* disable driver error recovery */#define SC_SBF_SILENT 0x0001 /* don't print error messages */#define SC_SBF_DIAGNOSE 0x0002 /* collect stats for diagnostic */#define SC_SBF_DIR_IN 0x0004 /* need to copyin info */#define SC_SBF_IOCTL 0x8000 /* cmd being run on behalf of ioctl */#define SC_NOMSG 0x01 /* don't print error messages */#define SC_DIAG 0x02 /* collect diagnostic info ??? */#define SC_IOCTL 0x04 /* running cmd for ioctl *//* * Error code fields for MD21 extended sense struct. * Not exhaustive - just those we treat specially. */#define SC_ERR_READ_RECOV_RETRIES 0x17 /* ctlr fixed error w/retry */#define SC_ERR_READ_RECOV_ECC 0x18 /* ctlr fixed error w/ECC *//* * ACB4000 error codes. * They are the concatenation of the class and code info. *//* Class 0 - drive errors */#define SC_ERR_ACB_NO_SENSE 0x00 /* no error or sense info */#define SC_ERR_ACB_NO_INDEX 0x01 /* no index or sector pulse */#define SC_ERR_ACB_NO_SEEK_CMPL 0x02 /* no seek complete signal */#define SC_ERR_ACB_WRT_FAULT 0x03 /* write fault */#define SC_ERR_ACB_NOT_READY 0x04 /* drive not ready */#define SC_ERR_ACB_NO_TRACK_0 0x06 /* no track 0 *//* Class 1 - target errors */#define SC_ERR_ACB_ID_CRC 0x10 /* ID field not found after retry */#define SC_ERR_ACB_UNCOR_DATA 0x11 /* uncorrectable data error */#define SC_ERR_ACB_ID_ADDR_MK 0x12 /* missing ID address mark */#define SC_ERR_ACB_REC_NOT_FND 0x14 /* record not found */#define SC_ERR_ACB_SEEK 0x15 /* seek error */#define SC_ERR_ACB_DATA_CHECK 0x18 /* data check *//* Class 2 - system-related errors */#define SC_ERR_ACB_ECC_VERIFY 0x19 /* ECC error detected during verify */#define SC_ERR_ACB_INTERLEAVE 0x1A /* specified interleave too large */#define SC_ERR_ACB_BAD_FORMAT 0x1C /* drive not properly formatted */#define SC_ERR_ACB_ILLEGAL_CMD 0x20 /* illegal command */#define SC_ERR_ACB_ILLEGAL_BLK 0x21 /* illegal block address */#define SC_ERR_ACB_VOL_OVERFLOW 0x23 /* illegal block addr after 1st blk */#define SC_ERR_ACB_BAD_ARG 0x24 /* bad argument */#define SC_ERR_ACB_ILLEGAL_LUN 0x25 /* invalid logical unit number */#define SC_ERR_ACB_CART_CHANGE 0x28 /* new cartridge inserted */#define SC_ERR_ACB_ERR_OVERFLOW 0x2C /* too many errors *//* Unknown psuedo error - used for convenience */#define SC_ERR_ACB_ERR_UNKNOWN 0xFF /* unknown psuedo error *//* * defines for value of fmt_parm_bits. */#define FPB_BFI 0x04 /* bytes-from-index fmt */#define FPB_CMPLT 0x08 /* full defect list provided */#define FPB_DATA 0x10 /* defect list data provided *//* * Defines for value of defect_list_descrip. */#define DLD_MAN_DEF_LIST 0x10 /* manufacturer's defect list */#define DLD_GROWN_DEF_LIST 0x08 /* grown defect list */#define DLD_BLOCK_FORMAT 0x00 /* block format */#define DLD_BFI_FORMAT 0x04 /* bytes-from-index format */#define DLD_PS_FORMAT 0x05 /* physical sector format *//* * Disk defect list - used by format command. *//******************** NOTE: this should be cleaned up! ***********************/#define ST506_NDEFECT 127 /* must fit in 1K controller buffer... */#define ESDI_NDEFECT ST506_NDEFECT /* hack??? */#define RDEF_ALL 0 /* read all defects */#define RDEF_MANUF 1 /* read manufacturer's defects */#define RDEF_CKLEN 2 /* check length of manufacturer's list */struct scsi_bfi_defect { /* defect in bytes from index format */ unsigned cyl : 24; unsigned head : 8; long bytes_from_index;};struct scsi_format_params { /* BFI format list */ u_short reserved; u_short length; struct scsi_bfi_defect list[ESDI_NDEFECT];};/* * Defect list returned by READ_DEFECT_LIST command. */struct scsi_defect_hdr { /* For getting defect list size */ u_char reserved; u_char descriptor; u_short length;};struct scsi_defect_list { /* BFI format list */ u_char reserved; u_char descriptor; u_short length; struct scsi_bfi_defect list[ESDI_NDEFECT];};/* * Defect list format used by reassign block command (logical block format). * This defect list is limited to 1 defect, as that is the only way * we use it. */struct scsi_reassign_blk { u_short reserved; u_short length; /* defect length in bytes ( defects * 4) */ u_int defect; /* Logical block address of defect */};/* * Mode Select Page Codes */#define ERR_RECOVERY_PARMS 0x01#define DISCO_RECO_PARMS 0x02#define FORMAT_PARMS 0x03#define GEOMETRY_PARMS 0x04#define CERTIFICATION_PARMS 0x06#define CACHE_PARMS 0x38/* * Mode select header */struct ccs_modesel_head { u_char reserved1; u_char medium; /* medium type */ u_char reserved2; u_char block_desc_length; /* block descriptor length */ u_char density; /* density code */ u_char number_blocks_hi; u_char number_blocks_med; u_char number_blocks_lo; u_char reserved3; u_char block_length_hi; u_short block_length;}; /* * Page 1 - Error Recovery Parameters */struct ccs_err_recovery { u_char reserved : 2; u_char page_code : 6; /* define page function */ u_char page_length; /* length of current page */ u_char awre : 1; /* auto write realloc enabled */ u_char arre : 1; /* auto read realloc enabled */ u_char tb : 1; /* transfer block */ u_char rc : 1; /* read continuous */ u_char eec : 1; /* enable early correction */ u_char per : 1; /* post error */ u_char dte : 1; /* disable transfer on error */ u_char dcr : 1; /* disable correction */ u_char retry_count; u_char correction_span; u_char head_offset_count; u_char strobe_offset_count; u_char recovery_time_limit;};/* * Page 2 - Disconnect / Reconnect Control Parameters */struct ccs_disco_reco { u_char reserved : 2; u_char page_code : 6; /* define page function */ u_char page_length; /* length of current page */ u_char buffer_full_ratio; /* write, how full before reconnect? */ u_char buffer_empty_ratio; /* read, how full before reconnect? */ u_short bus_inactivity_limit; /* how much bus time for busy */ u_short disconnect_time_limit; /* min to remain disconnected */ u_short connect_time_limit; /* min to remain connected */ u_short reserved_1;};/* * Page 3 - Direct Access Device Format Parameters */struct ccs_format { u_char reserved : 2; u_char page_code : 6; /* define page function */ u_char page_length; /* length of current page */ u_short tracks_per_zone; /* Handling of Defects Fields */ u_short alt_sect_zone; u_short alt_tracks_zone; u_short alt_tracks_vol; u_short sect_track; /* Track Format Field */ u_short data_sect; /* Sector Format Fields */ u_short interleave; u_short track_skew; u_short cylinder_skew; u_char ssec : 1; /* Drive Type Field */ u_char hsec : 1; u_char rmb : 1; u_char surf : 1; u_char ins : 1; u_char reserved_1 : 3; u_char reserved_2; u_char reserved_3; u_char reserved_4;};/* * Page 4 - Rigid Disk Drive Geometry Parameters */struct ccs_geometry { u_char reserved : 2; u_char page_code : 6; /* define page function */ u_char page_length; /* length of current page */ u_char cyl_ub; /* number of cylinders */ u_char cyl_mb; u_char cyl_lb; u_char heads; /* number of heads */ u_char precomp_cyl_ub; /* cylinder to start precomp */ u_char precomp_cyl_mb; u_char precomp_cyl_lb; u_char current_cyl_ub; /* cyl to start reduced current */ u_char current_cyl_mb; u_char current_cyl_lb; u_short step_rate; /* drive step rate */ u_char landing_cyl_ub; /* landing zone cylinder */ u_char landing_cyl_mb; u_char landing_cyl_lb; u_char reserved_1; u_char reserved_2; u_char reserved_3;};/* * Page 38 - Cache Parameters */struct ccs_cache { u_char reserved : 2; u_char page_code : 6; /* define page function */ u_char page_length; /* length of current page */ u_char mode; /* Cache control and size */ u_char threshold; /* Prefetch threshold */ u_char max_prefetch; /* Max. prefetch */ u_char max_multiplier; /* Max. prefetch multiplier */ u_char min_prefetch; /* Min. prefetch */ u_char min_multiplier; /* Min. prefetch multiplier */ u_char rsvd2[8];}; struct ccs_mode_select_parms { long edl_len; long reserved; long bsize; unsigned fmt_code :8; unsigned ncyl :16; unsigned nhead :8; u_short rwc_cyl; u_short wprc_cyl; u_char ls_pos; u_char sporc;};struct acb4000_mode_select_parms { long edl_len; long reserved; long bsize; unsigned fmt_code :8; unsigned ncyl :16; unsigned nhead :8; u_short rwc_cyl; u_short wprc_cyl; u_char ls_pos; u_char sporc;};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -