|
DataMuseum.dkPresents historical artifacts from the history of: Regnecentalen RC-900 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Regnecentalen RC-900 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 7491 (0x1d43) Types: TextFile Notes: UNIX file Names: »hd.h«
└─⟦a6ab2eb36⟧ Bits:30004042/kconfig3.imd SW95705I 386/ix Multi-user Release 1.2 └─⟦a6ab2eb36⟧ UNIX Filesystem └─⟦this⟧ »kc/new/usr/include/sys/hd.h«
/* * PC AD Hard disk controller definitions. */ /* * Copyrighted as an unpublished work. * (c) Copyright 1986 INTERACTIVE Systems Corporation * All rights reserved. * * RESTRICTED RIGHTS * * These programs are supplied under a license. They may be used, * disclosed, and/or copied only as permitted under such license * agreement. Any copy must contain the above copyright notice and * this restricted rights notice. Use, copying, and/or disclosure * of the programs is strictly prohibited unless otherwise provided * in the license agreement. */ #ident "@(#)hd.h 1.4 - 87/11/04" #define AD0 0x1F0 /* base for hard controller I/O port addresses */ #define FDR 0x3F6 /* I/O port address for fixed disk register */ /* * Bit 3 of the fixed disk register must be set to 1 to access heads * 8 - 15 of a hard disk on a stock AT controller. */ #define AD_EXTRAADS 0x08 /* set into FDR to access high disk heads */ #define AD_NOEXTRAADS 0x00 /* set into FDR if no high disk heads */ #define AD_INTRDISAB 0x02 /* set into FDR to disable interrupts */ #define AD_CTLRESET 0x04 /* set into FDR for 10 microsec to reset */ /* * port offsets from base above. */ #define AD_DATA 0x00 /* data register */ #define AD_ERROR 0x01 /* error register/write precomp */ #define AD_PRECOMP 0x01 /* error register/write precomp */ #define AD_NSECT 0x02 /* sector count */ #define AD_SECT 0x03 /* sector number */ #define AD_LCYL 0x04 /* cylinder low byte */ #define AD_HCYL 0x05 /* cylinder high byte */ #define AD_DRV 0x06 /* drive/head register */ #define AD_STATUS 0x07 /* status/command register */ #define AD_CMD 0x07 /* status/command register */ /* * Status bits */ #define BUSY 0x80 /* controller busy */ #define READY 0x40 /* drive ready */ #define WRFAULT 0x20 /* write fault */ #define SEEKDONE 0x10 /* seek operation complete */ #define DATARQ 0x08 /* data request */ #define ECC 0x04 /* ECC correction applied */ #define INDEX 0x02 /* disk revolution index */ #define ERROR 0x01 /* error flag */ /* * Drive selectors */ #define AD_DHFIXED 0xa0 /* bits always set in drive/head reg. */ #define AD_DRIVE0 0x00 /* or into AD_DHFIXED to select drive 0 */ #define AD_DRIVE1 0x10 /* or into AD_DHFIXED to select drive 1 */ /* * Hard disk commands. */ #define AD_RESTORE 0x10 /* restore cmd, bottom 4 bits set step rate */ #define AD_SEEK 0x70 /* seek cmd, bottom 4 bits set step rate */ #define AD_RDSEC 0x20 /* read sector cmd, bottom 2 bits set ECC and retry modes */ #define AD_WRSEC 0x30 /* write sector cmd, bottom 2 bits set ECC and retry modes */ #define AD_FORMAT 0x50 /* format track command */ #define AD_RDVER 0x40 /* read verify cmd, bot. bit sets retry mode */ #define AD_DIAG 0x90 /* diagnose command */ #define AD_SETPARAM 0x91 /* set parameters command */ #define AD_SPECIAL 0xf0 /* Adaptec 'special command' (below) */ #define AD_READPARMS 0xec /* WD1005-WAH Read Parameters command */ /* * Adaptec special commands -- these values are written to the AD_PRECOMP * register before an AD_SPECIAL command is issued. */ #define ADS_MODESEL 0x15 /* Mode Select */ #define ADS_MODESENSE 0x1a /* Mode Sense */ #define ADS_RDBUF 0x1e /* Read Data Buffer */ #define ADS_WRBUF 0x1f /* Write Data Buffer */ #define ADS_RDSENSE 0x20 /* Read Sense Data */ #define ADS_RDRES 0x21 /* Read Reserved Sectors */ #define ADS_WRRES 0x22 /* Write Reserved Sectors */ #define ADS_FMTRES 0x23 /* Format Reserved Track */ #define ADS_SAVCMD 0x24 /* Save Command */ #define ADS_RETCMD 0x25 /* Retrieve Command */ #define ADS_UPDSTAT 0x26 /* Update Status Register */ #define NUMDRV 2 /* maximum number of drives */ #define SECSIZE 512 /* default sector size */ #define SECSHFT 9 #define SECMASK (SECSIZE-1) #define cylin av_back /* Values of ad_state */ #define AD_OPEN 0x01 /* drive is open */ #define AD_OPENING 0x02 /* drive is being opened */ #define AD_DO_RST 0x04 /* hardware restore command should be issued */ #define AD_DO_FMT 0x08 /* track is being formatted */ #define AD_VTOC_OK 0x10 /* VTOC (pdinfo, vtoc, alts table) OK */ #define AD_FMT_RST 0x20 /* restore needs to happen before format */ #define AD_BADBLK 0x40 /* bad block is being remapped */ /* * the hard disk minor device number is interpreted as follows: * bits: * 7 5 4 3 0 * +---+-+----+ * | |u|part| * +---+-+--+-+ * codes: * u - unit no. (0 or 1) * part - partition no. (0 - 15) */ #define PARTITION(x) (minor(x) & 0x0F) #define UNIT(x) ((minor(x) >> 4) & 0x01) #define BASEDEV(x) (dev_t)((x) & ~0x0F) /* * Logical blocks to physical blocks */ #define lbtopb(lb) (((lb) << BSHIFT) >> SECSHFT) #define pbtolb(pb) (((pb) << SECSHFT) >> BSHIFT) /* * controller interface templates */ struct AD_cmd { unsigned char nad_precomp; /* write precomp */ unsigned char nad_nsect; /* decremented during operation - 0 == 256 */ unsigned char nad_sect; /* starting sector number */ unsigned int nad_cyl; /* up to 1024 cylinders */ /* * must have * bit 7 1 * bit 6 0 * bit 5 1 * bit 4 drive number * bits 3-0 head number */ unsigned char nad_drv; unsigned char nad_cmd; }; /* * r3, r2, r1, r0 is stepping rate: * 0 .35 micro-seconds * 1 .5 milli-seconds * 2 1.0 milli-seconds * 2 1.0 milli-seconds * . * . * . * 15 7.5 milli-seconds */ /* * bit definition value * 0 1 * L data mode data only data plus 4 byte ECC * T retry mode retries enabled retries disabled */ /* * operational mode */ #define DAM_NOT_FOUND 0x01 #define TR000_ERR 0x02 #define ABORTED 0x04 #define ID_NOT_FOUND 0x10 #define ECC_ERR 0x40 #define BAD_BLK 0x80 /* * Structure to hold disk geometry parameters. * Information is copied from PC AT ROM BIOS. */ struct diskparam { short dp_ncyl; /* number of cylinders */ short dp_nhead; /* number of heads */ short dp_wprecmp; /* write precomp cylinder */ short dp_lz; /* landing zone cylinder */ short dp_nsect; /* sectors per track */ }; /* * Mode Select/Sense Buffer */ struct admsbuf { unsigned char adms_valid; /* Must be 0x02 to be valid sense */ unsigned char adms_cylh; /* High byte of number of cyls */ unsigned char adms_cyll; /* Low byte of number of cyls */ unsigned char adms_nhds ; /* head count */ unsigned char adms_nsect; /* sector count per track */ unsigned char adms_rsrvd[4]; /* future space */ unsigned char adms_flags; /* see below */ unsigned char adms_jumps; /* jumpers installed on board */ unsigned char adms_secovhd; /* # bytes of overhead per sector */ } ; #define ADMS_VALID 0x02 /* to check/set adms_valid byte */ #define RLL_NSECS 26 /* number of sectors/track for RLL */ /* flags from adms_flags */ #define ADMSF_VMS 0x80 /* Valid Mode Select */ #define ADMSF_VAC 0x40 /* Valid Auto-Configuration */ #define ADMSF_SKEW 0x20 /* Skew first sector in tracks */ #define ADMSF_CIDMSK 0x07 /* Mask to get Controller ID (below) */ /* Adaptec controller ID's */ #define ADCID_IBM 0 /* Stock IBM AT controller (not adaptec) */ #define ADCID_ESDI 1 /* "Norton" ESDI controller */ #define ADCID_RLL 2 /* "Eddie" RLL controller */ #define ADCID_ARLL 3 /* "Casper" ARLL controller */