📄 vdreg.h
字号:
} dskadr;/* * DCB trailer formats. *//* read/write trailer */struct trrw { u_long memadr; /* memory address */ u_long wcount; /* 16 bit word count */ dskadr disk; /* disk address */};/* scatter/gather trailer */#define VDMAXPAGES (MAXPHYS / NBPG)struct trsg { struct trrw start_addr; struct addr_chain { u_long nxt_addr; u_long nxt_len; } addr_chain[VDMAXPAGES + 1];};/* seek trailer format */struct trseek { dskadr skaddr;};/* format trailer */struct trfmt { char *addr; /* data buffer to be filled on sector*/ long nsectors; /* # of sectors to be formatted */ dskadr disk; /* disk physical address info */ dskadr hdr; /* header address info */};/* reset/configure trailer */struct treset { long ncyl; /* # cylinders */ long nsurfaces; /* # surfaces */ long nsectors; /* # sectors */ long slip_sec; /* # of slip sectors */ long recovery; /* recovery flags */};/* ident trailer */struct trid { long name; long rev; long date;};/* * DCB layout. */struct dcb { struct dcb *nxtdcb; /* next dcb */ short intflg; /* interrupt settings and flags */ short opcode; /* DCB command code etc... */ long operrsta; /* error & status info */ short fill; /* not used */ char devselect; /* drive selection */ char trailcnt; /* trailer Word Count */ long err_memadr; /* error memory address */ u_char err_code; /* error codes for SMD/E */ char fill2; /* not used */ short err_wcount; /* error word count */ char err_trk; /* error track/sector */ char err_sec; /* error track/sector */ short err_cyl; /* error cylinder adr */ union { struct trid idtrail; /* ident command trailer */ struct trseek sktrail; /* seek command trailer */ struct trsg sgtrail; /* scatter/gather trailer */ struct trrw rwtrail; /* read/write trailer */ struct trfmt fmtrail; /* format trailer */ struct treset rstrail; /* reset/configure trailer */ } trail;};/* * smaller DCB with seek trailer only (no scatter-gather). */struct skdcb { struct dcb *nxtdcb; /* next dcb */ short intflg; /* interrupt settings and flags */ short opcode; /* DCB command code etc... */ long operrsta; /* error & status info */ short fill; /* not used */ char devselect; /* drive selection */ char trailcnt; /* trailer Word Count */ long err_memadr; /* error memory address */ u_char err_code; /* error codes for SMD/E */ char fill2; /* not used */ short err_wcount; /* error word count */ char err_trk; /* error track/sector */ char err_sec; /* error track/sector */ short err_cyl; /* error cylinder adr */ union { struct trseek sktrail; /* seek command trailer */ } trail;};/* * DCB command codes. */#define VDOP_RD 0x80 /* read data */#define VDOP_FTR 0xc0 /* full track read */#define VDOP_RAS 0x90 /* read and scatter */#define VDOP_RDRAW 0x600 /* read unformatted disk sector */#define VDOP_CMP 0xa0 /* compare */#define VDOP_FTC 0xe0 /* full track compare */#define VDOP_RHDE 0x180 /* read header, data & ecc */#define VDOP_WD 0x00 /* write data */#define VDOP_FTW 0x40 /* full track write */#define VDOP_WTC 0x20 /* write then compare */#define VDOP_FTWTC 0x60 /* full track write then compare */#define VDOP_GAW 0x10 /* gather and write */#define VDOP_WDE 0x100 /* write data & ecc */#define VDOP_FSECT 0x900 /* format sector */#define VDOP_GWC 0x30 /* gather write & compare */#define VDOP_START 0x800 /* start drives */#define VDOP_RELEASE 0xa00 /* stop drives */#define VDOP_SEEK 0xb00 /* seek */#define VDOP_INIT 0xc00 /* initialize controller */#define VDOP_DIAG 0xd00 /* diagnose (self-test) controller */#define VDOP_CONFIG 0xe00 /* reset & configure drive */#define VDOP_STATUS 0xf00 /* get drive status */#define VDOP_IDENT 0x700 /* identify controller */#define VDOP_PROBE 0x500 /* probe drives and update status */#define VDOP_ABORT 0x80000000 /* abort current command *//* * DCB status definitions. */#define DCBS_HCRC 0x00000001 /* header crc error */#define DCBS_HCE 0x00000002 /* header compare error */#define DCBS_WPT 0x00000004 /* drive write protected */#define DCBS_CHE 0x00000008 /* controller hardware error */#define DCBS_SKI 0x00000010 /* seek incomplete */#define DCBS_UDE 0x00000020 /* uncorrectable data error */#define DCBS_OCYL 0x00000040 /* off cylinder */#define DCBS_NRDY 0x00000080 /* drive not ready */#define DCBS_ATA 0x00000100 /* alternate track accessed */#define DCBS_SKS 0x00000200 /* seek started */#define DCBS_IVA 0x00000400 /* invalid disk address error */#define DCBS_NEM 0x00000800 /* non-existant memory error */#define DCBS_DPE 0x00001000 /* memory data parity error */#define DCBS_DCE 0x00002000 /* data compare error */#define DCBS_DDI 0x00004000 /* ddi ready */#define DCBS_OAB 0x00008000 /* operation aborted */#define DCBS_DSE 0x00010000 /* data strobe early */#define DCBS_DSL 0x00020000 /* data strobe late */#define DCBS_TOP 0x00040000 /* track offset plus */#define DCBS_TOM 0x00080000 /* track offset minus */#define DCBS_CCD 0x00100000 /* controller corrected data */#define DCBS_HARD 0x00200000 /* hard error */#define DCBS_SOFT 0x00400000 /* soft error (retry succesful) */#define DCBS_ERR 0x00800000 /* composite error */#define DCBS_IVC 0x01000000 /* invalid command error *//* bits 24-27 unused */#define DCBS_BSY 0x10000000 /* controller busy */#define DCBS_ICC 0x60000000 /* interrupt cause code */#define DCBS_INT 0x80000000 /* interrupt generated for this dcb */#define VDERRBITS "\20\1HCRC\2HCE\3WPT\4CHE\5DSKI\6UDE\7OCYL\10NRDY\\11ATA\12SKS\13IVA\14NEM\15DPE\16DCE\17DDI\20OAB\21DSE\22DSL\23TOP\24TOM\\25CCD\26HARD\27SOFT\30ERR\31IVC\35ABORTED\36FAIL\37COMPLETE\40STARTED"/* drive related errors */#define VDERR_DRIVE (DCBS_SKI|DCBS_OCYL|DCBS_NRDY|DCBS_IVA)/* controller related errors */#define VDERR_CTLR (DCBS_CHE|DCBS_OAB|DCBS_IVC|DCBS_NEM)/* potentially recoverable errors */#define VDERR_RETRY \ (VDERR_DRIVE|VDERR_CTLR|DCBS_DCE|DCBS_DPE|DCBS_HCRC|DCBS_HCE)/* uncorrected data errors */#define VDERR_HARD (VDERR_RETRY|DCBS_WPT|DCBS_UDE)/* * DCB status codes. */#define DCBS_ABORT 0x10000000 /* dcb aborted */#define DCBS_FAIL 0x20000000 /* dcb unsuccesfully completed */#define DCBS_DONE 0x40000000 /* dcb complete */#define DCBS_START 0x80000000 /* dcb started *//* * DCB interrupt control. */#define DCBINT_NONE 0x0 /* don't interrupt */#define DCBINT_ERR 0x2 /* interrupt on error */#define DCBINT_SUC 0x1 /* interrupt on success */#define DCBINT_DONE (DCBINT_ERR|DCBINT_SUC)#define DCBINT_PBA 0x4 /* proceed before acknowledge *//* * Sector formats. */typedef union { struct { dskadr hdr_addr; short smd_crc; } smd; struct { dskadr physical; dskadr logical; long smd_e_crc; } smd_e;} fmt_hdr;/* Sector Header bit assignments */#define VDMF 0x8000 /* Manufacturer Fault 1=good sector */#define VDUF 0x4000 /* User Fault 1=good sector */#define VDALT 0x2000 /* Alternate Sector 1=alternate */#define VDWPT 0x1000 /* Write Protect 1=Read Only Sector *//* input register assignments for DIOCWFORMAT ioctl */#define dk_op df_reg[0] /* opcode */#define dk_althdr df_reg[1] /* alt. sect. dskadr, in an int! */#define dk_fmtflags df_reg[2] /* header format flags *//* output register assignments for DIOCWFORMAT ioctl */#define dk_operrsta df_reg[0] /* dcb operrsta */#define dk_ecodecnt df_reg[1] /* smd-e ecode and error word count */#define dk_ecode(ecodecnt) ((u_long)(ecodecnt) >> 2)#define dk_errcnt(ecodecnt) (((ecodecnt) & 0xffff) << 1)#define dk_erraddr df_reg[2] /* error dskadr, in an int! */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -