aboutsummaryrefslogtreecommitdiff
path: root/sys/doc/ata
diff options
context:
space:
mode:
Diffstat (limited to 'sys/doc/ata')
-rw-r--r--sys/doc/ata/ata-145
-rw-r--r--sys/doc/ata/ata-10213
-rw-r--r--sys/doc/ata/ata-11201
-rw-r--r--sys/doc/ata/ata-24
-rw-r--r--sys/doc/ata/ata-327
-rw-r--r--sys/doc/ata/ata-459
-rw-r--r--sys/doc/ata/ata-5189
-rw-r--r--sys/doc/ata/ata-6337
-rw-r--r--sys/doc/ata/ata-7321
-rw-r--r--sys/doc/ata/ata-8143
-rw-r--r--sys/doc/ata/ata-9721
-rw-r--r--sys/doc/ata/ata-apx426
-rw-r--r--sys/doc/ata/ata-prt174
-rw-r--r--sys/doc/ata/ata-toc159
14 files changed, 3019 insertions, 0 deletions
diff --git a/sys/doc/ata/ata-1 b/sys/doc/ata/ata-1
new file mode 100644
index 000000000000..5486217b026b
--- /dev/null
+++ b/sys/doc/ata/ata-1
@@ -0,0 +1,45 @@
+ Information Processing Systems --
+
+ Common Access Method --
+
+ AT Attachment
+
+
+1. Scope
+
+This standard defines the CAM (Common Access Method) AT Attachment.
+
+The CAM Committee was formed in October, 1988 and the first working document
+of the AT Attachment was introduced in March, 1989.
+
+1.1 Description of Clauses
+
+Clause 1 contains the Scope and Purpose.
+
+Clause 2 contains Referenced and Related International Standards.
+
+Clause 3 contains the General Description.
+
+Clause 4 contains the Glossary.
+
+Clause 5 contains the electrical and mechanical characteristics; covering
+the interface cabling requirements of the DC, data cables and connectors.
+
+Clause 6 contains the signal descriptions of the AT Attachment interface.
+
+Clause 7 contains descriptions of the registers of the AT Attachment
+interface.
+
+Clause 8 describes the programming requirements of the AT Attachment
+interface.
+
+Clause 9 contains descriptions of the commands of the AT Attachment interface.
+
+Clause 10 contains an overview of the protocol of the AT Attachment interface.
+
+Clause 11 contains the interface timing diagrams.
+
+Annex A is informative.
+
+Annex B is informative.
+
diff --git a/sys/doc/ata/ata-10 b/sys/doc/ata/ata-10
new file mode 100644
index 000000000000..f4c0336944d4
--- /dev/null
+++ b/sys/doc/ata/ata-10
@@ -0,0 +1,213 @@
+10. Protocol Overview
+
+Commands can be grouped into different classes according to the protocols
+followed for command execution. The command classes with their associated
+protocols are defined below.
+
+For all commands, the host first checks if BSY=1, and should proceed no
+further unless and until BSY=0. For most commands, the host will also wait for
+DRDY=1 before proceeding. Those commands shown with DRDY=x can be executed
+when DRDY=0.
+
+Data transfers may be accomplished in more ways than are described below, but
+these sequences should work with all known implementations of ATA drives.
+
+10.1 PIO Data In Commands
+
+This class includes:
+
+ - Identify Drive
+ - Read Buffer
+ - Read Long
+ - Read Sector(s)
+
+Execution includes the transfer of one or more 512 byte (>512 bytes on Read
+Long) sectors of data from the drive to the host.
+
+ a) The host writes any required parameters to the Features, Sector Count,
+ Sector Number, Cylinder and Drive/Head registers.
+ b) The host writes the command code to the Command Register.
+ c) The drive sets BSY and prepares for data transfer.
+ d) When a sector of data is available, the drive sets DRQ and clears BSY
+ prior to asserting INTRQ.
+ e) After detecting INTRQ, the host reads the Status Register, then reads one
+ sector of data via the Data Register. In response to the Status Register
+ being read, the drive negates INTRQ.
+ f) The drive clears DRQ. If transfer of another sector is required, the drive
+ also sets BSY and the above sequence is repeated from d).
+
+10.1.1 PIO Read Command
+
+ +- a) -+-- b) -+ +- e) -+--------+ +- e) -+--------+
+ |Setup | Issue | | Read |Transfer| | Read |Transfer|
+ | |Command| |Status| Data |:::::::|Status| Data |
+ +------+-------+ +------+--------+ +------+--------+
+ |BSY=0 | |BSY=1 |BSY=0 | |BSY=1 |BSY=0 | |BSY=1
+ |DRDY=1 | | | | | |
+ |DRQ=1 | |DRQ=0 |DRQ=1 | |DRQ=0
+ |Assert|Negate | |Assert|Negate
+ INTRQ INTRQ INTRQ INTRQ
+
+If Error Status is presented, the drive is prepared to transfer data, and it
+is at the host's discretion that the data is transferred.
+
+10.1.2 PIO Read Aborted Command
+
+ +- a) -+-- b) -+ +- e) -+
+ |Setup | Issue | | Read |
+ | |Command| |Status|
+ +------+-------+ +------+
+ |BSY=0 | |BSY=1 |BSY=0 |
+ |DRDY=1 | |
+ |DRQ=1 |DRQ=0
+ |Assert|Negate
+ INTRQ INTRQ
+
+Although DRQ=1, there is no data to be transferred under this condition.
+
+10.2 PIO Data Out Commands
+
+This class includes:
+
+ - Format
+ - Write Buffer
+ - Write Long
+ - Write Sector(s)
+
+Execution includes the transfer of one or more 512 byte (>512 bytes on Write
+Long) sectors of data from the drive to the host.
+
+ a) The host writes any required parameters to the Features, Sector Count,
+ Sector Number, Cylinder and Drive/Head registers.
+ b) The host writes the command code to the Command Register.
+ c) The drive sets DRQ when it is ready to accept the first sector of data.
+ d) The host writes one sector of data via the Data Register.
+ e) The drive clears DRQ and sets BSY.
+ f) When the drive has completed processing of the sector, it clears BSY and
+ asserts INTRQ. If transfer of another sector is required, the drive also
+ sets DRQ.
+ g) After detecting INTRQ, the host reads the Status Register.
+ h) The drive clears the interrupt.
+ i) If transfer of another sector is required, the above sequence is repeated
+ from d).
+
+10.2.1 PIO Write Command
+
+ +- a) -+-- b) -+ +--------+ +- e) -+--------+ +- e) -+
+ |Setup | Issue | |Transfer| | Read |Transfer| | Read |
+ | |Command| | Data | |Status| Data |:::::::|Status|
+ +------+-------+ +--------+ +------+--------+ +------+
+ |BSY=0 | |BSY=1 |BSY=0 |BSY=1 |BSY=0 | |BSY=1 |BSY=0 |
+ |DRDY=1 | | | | | | |
+ |DRQ=1 |DRQ=0 |DRQ=1 | |DRQ=0 | |
+ | | |Assert|Negate | |Assert|Negate
+ INTRQ INTRQ INTRQ INTRQ
+
+10.2.2 PIO Write Aborted Command
+
+ +- a) -+-- b) -+ +- e) -+
+ |Setup | Issue | | Read |
+ | |Command| |Status|
+ +------+-------+ +------+
+ |BSY=0 | |BSY=1 |BSY=0 |
+ |DRDY=1 | |
+ | |Assert|Negate
+ INTRQ INTRQ
+
+10.3 Non-Data Commands
+
+This class includes:
+
+ - Execute Drive Diagnostic (DRDY=x)
+ - Idle
+ - Initialize Drive Parameters (DRDY=x)
+ - Read Power Mode
+ - Read Verify Sector(s)
+ - Recalibrate
+ - Seek
+ - Set Features
+ - Set Multiple Mode
+ - Standby
+
+Execution of these commands involves no data transfer.
+
+ a) The host writes any required parameters to the Features, Sector Count,
+ Sector Number, Cylinder and Drive/Head registers.
+ b) The host writes the command code to the Command Register.
+ c) The drive sets BSY.
+ d) When the drive has completed processing, it clears BSY and asserts INTRQ.
+ g) The host reads the Status Register.
+ h) The drive negates INTRQ.
+
+10.4 Miscellaneous Commands
+
+This class includes:
+
+ - Read Multiple
+ - Sleep
+ - Write Multiple
+ - Write Same
+
+The protocol for these commands is contained in the individual command
+descriptions.
+
+10.5 DMA Data Transfer Commands (Optional)
+
+This class comprises:
+
+ - Read DMA
+ - Write DMA
+
+Data transfers using DMA commands differ in two ways from PIO transfers:
+
+ - data transfers are performed using the slave-DMA channel
+ - no intermediate sector interrupts are issued on multi-sector commands
+
+Initiation of the DMA transfer commands is identical to the Read Sector or
+Write Sector commands except that the host initializes the slave-DMA channel
+prior to issuing the command.
+
+The interrupt handler for DMA transfers is different in that:
+
+ - no intermediate sector interrupts are issued on multi-sector commands
+ - the host resets the DMA channel prior to reading status from the drive.
+
+The DMA protocol allows high performance multi-tasking operating systems to
+eliminate processor overhead associated with PIO transfers.
+
+ a) Command Phase
+ 1) Host initializes the slave-DMA channel
+ 2) Host updates the Command Block Registers
+ 3) Host writes command code to the Command Register
+ b) Data Phase - the register contents are not valid during a DMA Data Phase.
+ 1) The slave-DMA channel qualifies data transfers to and from the drive
+ with DMARQ
+ c) Status Phase
+ 1) Drive generates the interrupt to the host
+ 2) Host resets the slave-DMA channel
+ 3) Host reads the Status Register and Error Register
+
+10.5.1 Normal DMA Transfer
+
+ +--------------+-------+ +---------------------+ +---------+------+
+ |Initialize DMA|Command| | DMA Data Transfer | |Reset DMA|Status|
+ +--------------+-------+ +---------------------+ +---------+------+
+ |BSY=0 |BSY=1 |BSY=x |BSY=1 |BSY=0
+ |DRQ=x |nIEN=0
+
+10.5.2 Aborted DMA Transfer
+
+ +--------------+-------+ +-------------+ +---------+------+
+ |Initialize DMA|Command| | DMA Data | |Reset DMA|Status|
+ +--------------+-------+ +-------------+ +---------+------+
+ |BSY=0 |BSY=1 |BSY=x |BSY=1 |BSY=0
+ |DRQ=1 |nIEN=0
+
+10.5.3 Aborted DMA Command
+
+ +--------------+-------+ +---------+------+
+ |Initialize DMA|Command| |Reset DMA|Status|
+ +--------------+-------+ +---------+------+
+ |BSY=0 |BSY=1 |BSY=1 |BSY=0
+ |nIEN=0
+
diff --git a/sys/doc/ata/ata-11 b/sys/doc/ata/ata-11
new file mode 100644
index 000000000000..bba6a1073cc8
--- /dev/null
+++ b/sys/doc/ata/ata-11
@@ -0,0 +1,201 @@
+11. Timing
+
+11.1 Deskewing
+
+The host shall provide cable deskewing for all signals originating from the
+controller. The drive shall provide cable deskewing for all signals
+originating at the host.
+
+11.2 Symbols
+
+Certain symbols are used in the timing diagrams. These symbols and their
+respective definitions are listed below.
+
+ / or \ - signal transition (asserted or negated) *
+ < or > - data transition (asserted or negated)
+ XXXXXX - undefined but not necessarily released
+ . . . - the "other" condition if a signal is shown with no change
+ #n - used to number the sequence in which events occur e.g. #a, #b
+ _ _ __
+__/_ _/ - a degree of uncertainty as to when a signal may be asserted
+
+__ _ _
+ \_ _\__ - a degree of uncertainty as to when a signal may be negated
+
+.. T - Nominal Clock Period
+..
+ * All signals are shown with the Asserted condition facing to the top of
+ the page. The negated condition is shown towards the bottom of the page
+ relative to the asserted condition.
+
+..Within each figure the timing terms i.e. tA, tB etc are repeated. There is
+..no continuity of definition of tA from one figure to another.
+..
+11.3 Terms
+
+The interface uses a mixture of negative and positive signals for control and
+data. The terms asserted and negated are used for consistency and are
+independent of electrical characteristics.
+
+In all timing diagrams, the lower line indicates negated, and the upper line
+indicates asserted e.g. the following illustrates the representation of a
+signal named TEST going from negated to asserted and back to negated, based on
+the polarity of the signal.
+
+ Assert Negate
+ | |
+ Bit Setting=1 |__________|
+ Bit Setting=0 TEST _____/ \_______
+
+ Assert Negate
+ | |
+ Bit Setting=0 |__________|
+ Bit Setting=1 TEST- _____/ \_______
+
+.. Processor I/O Write, 16 Bit:
+11.4 Data Transfers
+
+Figure 11-1 defines the relationships between the interface signals for both
+16-bit and 8-bit data transfers.
+
+ |<------------ t0 -------------------->|
+ __________________________________________ |
+ Address Valid *1 ...../ \________
+ |<-t1->| ->| t9 |<-
+ ->|t7|<- |<----------- t2 ------------->| ->|t8|<-
+ | | |______________________________| | |_____
+ DIOR-/DIOW- ____________/ \_______/
+ | | |_ _ _ _ _ _ _ _ _ _ _____________ |
+ Write Data Valid *2__________/_ _ _ _ _ _ _ _ _ _/ \__________
+ | | | |<--t3---->| |
+ | | | ->|t4|<- |
+ | | |_ _ _ _ _ _ _ _ _ _ _ ___________ |
+ Read Data Valid *2__________/_ _ _ _ _ _ _ _ _ _ _/ | \__________
+ | | | |<--t5-->| | |
+ | | | ->|t6|<- |
+ | | | | | |
+ | |__________________________________________|
+ IOCS16- ________/ \_____
+
+ *1 Drive Address consists of signals CS1FX-, CS3FX- and DA2-0
+ *2 Data consists of DD0-15 (16-bit) or DD0-7 (8-bit)
+
+ +------------------------------------------+-------+-------+-------+
+ | PIO | Mode 0| Mode 1| Mode 2|
+ | Timing Parameters | nsec | nsec | nsec |
+ +----+------------------------------------------+-------+-------+-------+
+ | t0 | Cycle Time (Min) | 600 | 383 | 240 |
+ | t1 | Address Valid to DIOR-/DIOW- Setup (Min) | 70 | 50 | 30 |
+ | t2 | DIOR-/DIOW- 16-bit (Min) | 165 | 125 | 100 |
+ | | Pulse Width 8-bit (Min) | 290 | 290 | 290 |
+ | t3 | DIOW- Data Setup (Min) | 60 | 45 | 30 |
+ | t4 | DIOW- Data Hold (Min) | 30 | 20 | 15 |
+ | t5 | DIOR- Data Setup (Min) | 50 | 35 | 20 |
+ | t6 | DIOR- Data Hold (Min) | 5 | 5 | 5 |
+ | t7 | Addr Valid to IOCS16- Assertion (Max) | 90 | 50 | 40 |
+ | t8 | Addr Valid to IOCS16- Negation (Max) | 60 | 45 | 30 |
+ | t9 | DIOR-/DIOW- to Address Valid Hold (Min) | 20 | 15 | 10 |
+ +----+------------------------------------------+-------+-------+-------+
+..rm102
+.. NOTE: These are minimum acceptable interface timing requirements.
+
+ FIGURE 11-1: PIO DATA TRANSFER TO/FROM DRIVE
+
+ ___________________________________
+ DIOR-/DIOW- __________/ \______________
+ |
+ |<- tA ->|<--- tB ---->|
+ ___________________| |_____________________
+ IORDY \___________________/
+
+ Label Description Min Max Units
+
+ tA IORDY Setup time - 35 nsecs
+ tB IORDY Pulse Width - 1,250 nsecs
+
+ WARNING: The use of IORDY for data transfers is a system integration issue
+ which requires control of both ends of the cable.
+
+ FIGURE 11-2: IORDY TIMING REQUIRMENTS
+
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+ |<----------------------- t0 ---------------------->|
+ ____________ _______
+ DMARQ ___/ \______________________________________/ |
+ |<- tC ->| |
+ |_____________________________________________ |___
+ DMACK- _______/ \_____/
+ |<--- tI --->|________________|<----- tJ -----| |
+ DIOR-/DIOW- ____________________/ \_________________________
+ | | | |
+ | |<------ tD ---->| |
+ Read | ______________ |
+ DD0-15 -------------------------------<______________>----------------
+ | |<-- tE -->| |<- tF ->| |
+ Write | _________________________ |
+ DD0-15 --------------------------<_________________________>-----------
+ | | | | |
+ | |<-- tG -->|<-- tH -->| |
+
+ +----------------------------------+-------+-------+-------+
+ | DMA | Mode 0| Mode 1| Mode 2|
+ | Timing Parameters | nsec | nsec | nsec |
+ +----+----------------------------------+-------+-------+-------+
+ | t0 | Cycle Time (Min) | 960 | 480 | 240 |
+ | tC | DMACK to DMREQ Delay (Max) | 200 | 100 | 80 |
+ | tD | DIOR-/DIOW- 16-bit (Min) | 480 | 240 | 120 |
+ | tE | DIOR- Data Setup (Min) | 250 | 150 | 50 |
+ | tF | DIOR- Data Hold (Min) | 5 | 5 | 5 |
+ | tG | DIOW- Data Setup (Min) | 250 | 100 | 35 |
+ | tH | DIOW- Data Hold (Min) | 50 | 30 | 20 |
+ | tI | DMACK to DIOR-/DIOW- Setup (Min) | 0 | 0 | 0 |
+ | tJ | DIOR-/DIOW- to DMACK Hold (Min) | 0 | 0 | 0 |
+ +----+----------------------------------+-------+-------+-------+
+
+ FIGURE 11-3: DMA DATA TRANSFER
+
+11.5 Power On and Hard Reset
+
+ ______
+ RESET- _____/ \_____________________________________________________
+ |<-tM->|
+ | | Drive 0
+ _ _ _ _ _ _ _ _______ _ _ _ _ _ _ _ _ _ _ _ _ _|
+ BSY _ _ _ _ _ _ _/ \_ _ _ _ _ *1 _ _ _ _ _ _\________________
+ ->|tN|<-
+ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
+ DASP- _ _ _ _ _ _ _ _\_______/_ _ _ _ *2 _ _ _ _ _ _ _ _ _ _\=== *3 ==
+ ->| tP |<- | |_ _ _ __________
+ Control Registers_______________________________________/_ _ _ /
+ | | |
+ | | | Drive 1
+ _ _ _ _ _ _ _ _ _________________________________|
+ BSY _ _ _ _ _ _ _ _/ \________________
+ _ _ _ _ _ _ _ _ _ _ ______ _ _ _ _ _
+ PDIAG- _ _ _ _ _ _ _ _ _ _\____________________________/ \_ _ _ _ _
+ | | | |<----------- tQ -------->|
+ _ _ _ _ _ _ _ _ _ _________________________ _ _ _
+ DASP- _ _ _ _ _ _ _ _ _\_____/ \ _ _ _\=== *3 ==
+ |<- tR ->|<------------ tS -------------->|
+ _ _ _ __________
+ Control Registers_______________________________________/_ _ _ /
+
+ *1 Drive 0 can set BSY=0 if Drive 1 not present
+ *2 Drive 0 can use DASP- to indicate it is active if Drive 1 is not
+ present
+ *3 DASP- can be asserted to indicate that the drive is active
+ +-------------------+------------+
+ | Label | Units |
+ +-------------------+------------+
+ | tM (Min) | 25 usec |
+ | tN (Max) | 400 nsec |
+ | tP (Max) | 1 msec |
+ | tQ (Max) | 30 secs |
+ | tR Drive 0 (Max) | 450 msec |
+ | tR Drive 1 (Max) | 400 msec |
+ | tS (Max) | 30.5 secs |
+ +-------------------+------------+
+
+ FIGURE 11-4 RESET SEQUENCE
+
diff --git a/sys/doc/ata/ata-2 b/sys/doc/ata/ata-2
new file mode 100644
index 000000000000..bad2d9eea869
--- /dev/null
+++ b/sys/doc/ata/ata-2
@@ -0,0 +1,4 @@
+2. References
+
+None.
+
diff --git a/sys/doc/ata/ata-3 b/sys/doc/ata/ata-3
new file mode 100644
index 000000000000..54645e040b7f
--- /dev/null
+++ b/sys/doc/ata/ata-3
@@ -0,0 +1,27 @@
+3. General Description
+
+The application environment for the AT Attachment is any computer which uses
+an AT Bus or 40-pin ATA interface.
+
+The AT Bus is a widely used and implemented interface for which a variety of
+peripherals have been manufactured. As a means of reducing size and cost, a
+class of products has emerged which embed the controller functionality in the
+drive. These new products utilize the AT Bus fixed disk interface protocol,
+and a subset of the AT bus. Because of their compatibility with existing AT
+hardware and software this interface quickly became a de facto industry
+standard.
+
+The purpose of the ATA standard is to define the de facto implementations.
+
+Software in the Operating System dispatches I/O (Input/Output) requests via
+the AT Bus to peripherals which respond to direct commands.
+
+3.1 Structure
+
+This standard relies upon specifications of the mechanical and electrical
+characteristics of the AT Bus and a subset of the AT Bus specifically
+developed for the direct attachment of peripherals.
+
+Also defined are the methods by which commands are directed to peripherals,
+the contents of registers and the method of data transfers.
+
diff --git a/sys/doc/ata/ata-4 b/sys/doc/ata/ata-4
new file mode 100644
index 000000000000..0c2fb638ce8d
--- /dev/null
+++ b/sys/doc/ata/ata-4
@@ -0,0 +1,59 @@
+4. Definitions and Conventions
+
+4.1 Definitions
+
+For the purpose of this standard the following definitions apply:
+
+4.1.1 ATA (AT Attachment): ATA defines a compatible register set and a 40-pin
+connector and its associated signals.
+
+4.1.2 Data block: This term describes a data transfer, and is typically a
+single sector, except when declared otherwise by use of the Set Multiple
+command.
+
+4.1.3 DMA (Direct Memory Access): A means of data transfer between
+peripheral and host memory without processor intervention.
+
+4.1.4 Optional: This term describes features which are not required by the
+standard. However, if any feature defined by the standard is implemented, it
+shall be done in the same way as defined by the standard. Describing a feature
+as optional in the text is done to assist the reader. If there is a conflict
+between text and tables on a feature described as optional, the table shall be
+accepted as being correct.
+
+4.1.5 PIO (Programmed Input/Output): A means of data transfer that requires
+the use of the host processor.
+
+4.1.6 Reserved: Where this term is used for bits, bytes, fields and code
+values; the bits, bytes, fields and code values are set aside for future
+standardization, and shall be zero.
+
+..4.1.10 VU (Vendor Unique): This term defines those features that can be
+..defined by the vendor in a specific implementation. Caution should be
+..exercised in defining and using such features since they may or may not
+..vary between vendors.
+..
+4.1.7 VU (Vendor Unique): This term is used to describe bits, bytes,
+fields, code values and features which are not described in this standard,
+and may be used in a way that varies between vendors.
+
+4.2 Conventions
+
+Certain terms used herein are the proper names of signals. These are printed
+in uppercase to avoid possible confusion with other uses of the same words;
+e.g., ATTENTION. Any lowercase uses of these words have the normal American-
+English meaning.
+
+A number of conditions, commands, sequence parameters, events, English text,
+states or similar terms are printed with the first letter of each word in
+uppercase and the rest lowercase; e.g., In, Out, Request Status. Any lowercase
+uses of these words have the normal American-English meaning.
+
+The American convention of numbering is used i.e., the thousands and higher
+multiples are separated by a comma and a period is used as the decimal point.
+This is equivalent to the ISO convention of a space and comma.
+
+ American: 0.6 ISO: 0,6
+ 1,000 1 000
+ 1,323,462.9 1 323 462,9
+
diff --git a/sys/doc/ata/ata-5 b/sys/doc/ata/ata-5
new file mode 100644
index 000000000000..c120a39b3736
--- /dev/null
+++ b/sys/doc/ata/ata-5
@@ -0,0 +1,189 @@
+5. Interface Cabling Requirements
+
+5.1 Configuration
+
+This standard provides the capability of operating on the AT Bus in a daisy
+chained configuration with a second drive that operates in accordance with
+these standards. One drive (selected as Drive 0) has been referred to as the
+master in industry terms and the second (selected as Drive 1) has been
+referred to as the slave (see Figure 5-3).
+
+The designation as Drive 0 or Drive 1 is made by a jumper plug or switch on
+the drive.
+
+Data is transferred in parallel (8 or 16 bits) either to or from host memory
+to the drive's buffer under the direction of commands previously transferred
+from the host. The drive performs all of the operations necessary to properly
+write data to, or read data from, the disk media. Data read from the media is
+stored in the drive's buffer pending transfer to the host memory and data is
+transferred from the host memory to the drive's buffer to be written to the
+media.
+
+ +-----------------------------------------------------+
+ | |
+ | HOST |
+ | |
+ +---------------^-------------------------------------+
+ | ATA Interface
+ | _____________________
+ |/ |
+ +------v--+ +------v--+
+ | DRIVE 0 | | DRIVE 1 |
+ +---------+ +---------+
+
+ FIGURE 5-1: ATA INTERFACE TO EMBEDDED BUS PERIPHERALS
+
+ +-----------------------------------------------------+
+ | |
+ | HOST |
+ | |
+ +------+====== AT Bus ======+-------------------------+
+ | |
+ | ADAPTER |
+ | |
+ +--------^-----------+
+ | ATA Interface
+ | _____________________
+ |/ |
+ +------v--+ +------v--+
+ | DRIVE 0 | | DRIVE 1 |
+ +---------+ +---------+
+
+ FIGURE 5-2: HOST BUS ADAPTER AND PERIPHERAL DEVICES
+
+ +-----------------------------------------------------+
+ | |
+ | HOST |
+ | |
+ +---------------^-------------------------------------+
+ | ATA Interface
+ +------v-----+
+ | |
+ | CONTROLLER |
+ | |
+ +-^----^---^-+
+ | | |__________________ Device Interface
+ | ___|_________________ | e.g. ESDI, SCSI
+ |/ | | |
+ +-v----v--+ +-v----v--+
+ | DRIVE | | DRIVE |
+ +---------+ +---------+
+
+ FIGURE 5-3: ATA INTERFACE TO CONTROLLER AND PERIPHERAL DEVICES
+
+5.2 Addressing Considerations
+
+In traditional controller operation, only the selected controller receives
+commands from the host following selection. In this standard, the register
+contents go to both drives (and their embedded controllers). The host
+discriminates between the two by using the DRV bit in the Drive/Head Register.
+
+5.3 DC Cable and Connector
+
+The drive receives DC power through a 4-pin or a low-power application 3-pin
+connector.
+
+5.3.1 4-Pin Power
+
+The pin assignments are shown in Table 5-1. Recommended part numbers for the
+mating connector to 18AWG cable are shown below, but equivalent parts may be
+used.
+
+ Connector (4 Pin) AMP 1-480424-0 or equivalent.
+ Contacts (Loose Piece) AMP 60619-4 or equivalent.
+ Contacts (Strip) AMP 61117-4 or equivalent.
+
+ TABLE 5-1: DC INTERFACE
+ +------------------------+------------+
+ | POWER LINE DESIGNATION | PIN NUMBER |
+ +------------------------+------------+
+ | +12 V | 1-01 |
+ | +12 V RETURN | 1-02 |
+ | +5 V RETURN | 1-03 |
+ | +5 V | 1-04 |
+ +------------------------+------------+
+
+5.3.2 3-Pin Power
+
+The pin assignments are shown in Table 5-2. Recommended part numbers for the
+mating connector to 18AWG cable are shown below, but equivalent parts may be
+used.
+
+ Connector (3 Pin) Molex 5484 39-27-0032 or equivalent.
+
+ TABLE 5-2: DC INTERFACE
+ +------------------------+------------+
+ | POWER LINE DESIGNATION | PIN NUMBER |
+ +------------------------+------------+
+ | +12 V | 1-01 |
+ | Ground | 1-02 |
+ | +5 V | 1-03 |
+ +------------------------+------------+
+
+5.3.3 Device Grounding
+
+System ground may be connected to a "quick-connect" terminal equivalent to:
+
+ Drive Connector Terminal AMP 61664-1 or equivalent.
+ Cable Connector Terminal AMP 62137-2 or equivalent.
+
+Provision for tying the DC Logic ground and the chassis ground together or for
+separating these two ground planes is vendor specific.
+
+5.4 I/O Connector
+
+The I/O connector is a 40-pin connector as shown in Figure 5-4, with pin
+assignments as shown in Table 6-1.
+
+The connector should be keyed to prevent the possibility of installing it
+upside down. A key is provided by the removal of Pin 20. The corresponding pin
+on the cable connector should be plugged.
+
+The pin locations are governed by the cable plug, not the receptacle. The way
+in which the receptacle is mounted on the Printed Circuit Board affects the
+pin positions, and pin 1 should remain in the same relative position. This
+means the pin numbers of the receptacle may not reflect the conductor number
+of the plug. The header receptacle is not polarized, and all the signals are
+relative to Pin 20, which is keyed.
+
+By using the plug positions as primary, a straight cable can connect drives.
+As shown in Figure 5-4, conductor 1 on pin 1 of the plug has to be in the
+same relative position no matter what the receptacle numbering looks like.
+If receptacle numbering was followed, the cable would have to twist 180
+degrees between a drive with top-mounted receptacles, and a drive with
+bottom-mounted receptacles.
+
+ +-----------------------+
+ | 1|
+ |40 20 2|
+ ==+==== Circuit Board ====+== ==+==== Circuit Board ====+==
+ | 1|
+ |40 20 2|
+ +-----------------------+
+.. * Location of pin number stamped as 1 when receptacle mounted upside down
+ FIGURE 5-4: 40-PIN CONNECTOR MOUNTING
+
+Recommended part numbers for the mating connector are shown below, but
+equivalent parts may be used.
+
+ Connector (40 Pin) 3M 3417-7000 or equivalent.
+ Strain relief 3M 3448-2040 or equivalent.
+ Flat Cable (Stranded 28 AWG) 3M 3365-40 or equivalent.
+ Flat Cable (Stranded 28 AWG) 3M 3517-40 (Shielded) or equivalent.
+
+5.5 I/O Cable
+
+The cable specifications affect system integrity and the maximum length that
+can be supported in any application.
+
+ TABLE 5-3: CABLE PARAMETERS
+ +-------------------------------------+------+--------+
+ | Cable length of 0.46m (18 inches) * | Min | Max |
+ +-------------------------------------+------+--------+
+ | Driver IoL Sink Current | 12mA | |
+ | Driver IoH Source Current | | -400uA |
+ | Cable Capacitive Loading | | 200pF |
+ +-------------------------------------+------+--------+
+ * This distance may be exceeded in circumstances where the
+ characteristics of both ends of the cable can be controlled.
+
diff --git a/sys/doc/ata/ata-6 b/sys/doc/ata/ata-6
new file mode 100644
index 000000000000..1bce4866f5b5
--- /dev/null
+++ b/sys/doc/ata/ata-6
@@ -0,0 +1,337 @@
+6. Physical Interface
+
+6.1 Signal Conventions
+
+Signal names are shown in all upper case letters. Signals can be asserted
+(active, true) in either a high (more positive voltage) or low (less positive
+voltage) state. A dash character (-) at the beginning or end of a signal name
+indicates it is asserted at the low level (active low). No dash or a plus
+character (+) at the beginning or end of a signal name indicates it is
+asserted high (active high). An asserted signal may be driven high or low by
+an active circuit, or it may be allowed to be pulled to the correct state by
+the bias circuitry.
+
+Control signals that are asserted for one function when high and asserted for
+another function when low are named with the asserted high function name
+followed by a slash character (/), and the asserted low function name followed
+with a dash (-) e.g. BITENA/BITCLR- enables a bit when high and clears a bit
+when low. All signals are TTL compatible unless otherwise noted. Negated means
+that the signal is driven by an active circuit to the state opposite to the
+asserted state (inactive, or false) or may be simply released (in which case
+the bias circuitry pulls it inactive, or false), at the option of the
+implementor.
+
+6.2 Signal Summary
+
+The physical interface consists of single ended TTL compatible receivers and
+drivers communicating through a 40-conductor flat ribbon nonshielded cable
+using an asynchronous interface protocol. The pin numbers and signal names
+are shown in Table 6-1. Reserved signals shall be left unconnected.
+
+ TABLE 6-1: INTERFACE SIGNALS
+ +----------------------------------+ +-----------+
+ | HOST I/O | | DRIVE I/O |
+ | CONNECTOR | | CONNECTOR |
+ | | | |
+ | HOST RESET 1 | ----- RESET- -------->| 1 |
+ | 2 | ----- Ground -------- | 2 |
+ | HOST DATA BUS BIT 7 3 |<----- DD7 ----------->| 3 |
+ | HOST DATA BUS BIT 8 4 |<----- DD8 ----------->| 4 |
+ | HOST DATA BUS BIT 6 5 |<----- DD6 ----------->| 5 |
+ | HOST DATA BUS BIT 9 6 |<----- DD9 ----------->| 6 |
+ | HOST DATA BUS BIT 5 7 |<----- DD5 ----------->| 7 |
+ | HOST DATA BUS BIT 10 8 |<----- DD10 ---------->| 8 |
+ | HOST DATA BUS BIT 4 9 |<----- DD4 ----------->| 9 |
+ | HOST DATA BUS BIT 11 10 |<----- DD11 ---------->| 10 |
+ | HOST DATA BUS BIT 3 11 |<----- DD3 ----------->| 11 |
+ | HOST DATA BUS BIT 12 12 |<----- DD12 ---------->| 12 |
+ | HOST DATA BUS BIT 2 13 |<----- DD2 ----------->| 13 |
+ | HOST DATA BUS BIT 13 14 |<----- DD13 ---------->| 14 |
+ | HOST DATA BUS BIT 1 15 |<----- DD1 ----------->| 15 |
+ | HOST DATA BUS BIT 14 16 |<----- DD14 ---------->| 16 |
+ | HOST DATA BUS BIT 0 17 |<----- DD0 ----------->| 17 |
+ | HOST DATA BUS BIT 15 18 |<----- DD15 ---------->| 18 |
+ | 19 | ----- Ground -------- | 19 |
+ | 20 | ----- (keypin) ------ | 20 |
+ | DMA REQUEST 21 |<----- DMARQ --------- | 21 |
+ | 22 | ----- Ground -------- | 22 |
+ | HOST I/O WRITE 23 | ----- DIOW- --------->| 23 |
+ | 24 | ----- Ground -------- | 24 |
+ | HOST I/O READ 25 | ----- DIOR- --------->| 25 |
+ | 26 | ----- Ground -------- | 26 |
+ | I/O CHANNEL READY 27 |<----- IORDY --------- | 27 |
+ | SPINDLE SYNC 28 |*----- SPSYNC --------*| 28 |
+ | DMA ACKNOWLEDGE 29 | ----- DMACK- -------->| 29 |
+ | 30 | ----- Ground -------- | 30 |
+ | HOST INTERRUPT REQUEST 31 |<----- INTRQ --------- | 31 |
+ | HOST 16 BIT I/O 32 |<----- IOCS16- ------- | 32 |
+ | HOST ADDRESS BUS BIT 1 33 | ----- DA1 ----------->| 33 |
+ | PASSED DIAGNOSTICS 34 |*----- PDIAG- --------*| 34 |
+ | HOST ADDRESS BUS BIT 0 35 | ----- DAO ----------->| 35 |
+ | HOST ADDRESS BUS BIT 2 36 | ----- DA2 ----------->| 36 |
+ | HOST CHIP SELECT 0 37 | ----- CS1FX- -------->| 37 |
+ | HOST CHIP SELECT 1 38 | ----- CS3FX- -------->| 38 |
+ | DRIVE ACTIVE/DRIVE 1 PRESENT 39 |<----- DASP- ---------*| 39 |
+ | 40 | ----- Ground -------- | 40 |
+ +----------------------------------+ +-----------+
+
+ * Drive Intercommunication Signals
+
+ +---HOST---+ +-Drive 0-+ +-Drive 1-+
+ | 28 | ----->| 28 28 |<----- SPSYNC ---->| 28 |
+ | 34 | ----- | 34 34 |<----- PDIAG- ---- | 34 |
+ | 39 |<----- | 39 39 |<----- DASP- ----- | 39 |
+ +----------+ +---------+ +---------+
+
+6.3 Signal Descriptions
+
+The interface signals and pins are described in more detail than shown in
+Table 6-1. The signals are listed according to function, rather than in
+numerical connector pin order. Table 6-2 lists signal name mnemonic, connector
+pin number, whether input to (I) or output from (O) the drive, and full signal
+name.
+
+ TABLE 6-2: INTERFACE SIGNALS DESCRIPTION
+ +--------+----+-----+
+ | Signal | Pin| I/O |
+ +--------+----+-----+-----------------------------------------------------+
+ | CS1FX- | 37 | I | Drive chip Select 0 |
+ | CS3FX- | 38 | I | Drive chip Select 1 |
+ | DA0 | 35 | I | Drive Address Bus - Bit 0 |
+ | DA1 | 33 | I | - Bit 1 |
+ | DA2 | 36 | I | - Bit 2 |
+ | DASP- | 39 | I/O | Drive Active/Drive 1 Present |
+ | DD0 | 17 | I/O | Drive Data Bus - Bit 0 |
+ | DD1 | 15 | I/O | - Bit 1 |
+ | DD2 | 13 | I/O | - Bit 2 |
+ | DD3 | 11 | I/O | - Bit 3 |
+ | DD4 | 9 | I/O | - Bit 4 |
+ | DD5 | 7 | I/O | - Bit 5 |
+ | DD6 | 5 | I/O | - Bit 6 |
+ | DD7 | 3 | I/O | - Bit 7 |
+ | DD8 | 4 | I/O | - Bit 8 |
+ | DD9 | 6 | I/O | - Bit 9 |
+ | DD10 | 8 | I/O | - Bit 10 |
+ | DD11 | 10 | I/O | - Bit 11 |
+ | DD12 | 12 | I/O | - Bit 12 |
+ | DD13 | 14 | I/O | - Bit 13 |
+ | DD14 | 16 | I/O | - Bit 14 |
+ | DD15 | 18 | I/O | - Bit 15 |
+ | DIOR- | 25 | I | Drive I/O Read |
+ | DIOW- | 23 | I | Drive I/O Write |
+ | DMACK- | 29 | I | DMA Acknowledge |
+ | DMARQ | 21 | O | DMA Request |
+ | INTRQ | 31 | O | Drive Interrupt |
+ | IOCS16-| 32 | O | Drive 16-bit I/O |
+ | IORDY | 27 | O | I/O Channel Ready |
+ | PDIAG- | 34 | I/O | Passed Diagnostics |
+ | RESET- | 1 | I | Drive Reset |
+ | SPSYNC | 28 | - | Spindle Sync |
+ | keypin | 20 | - | Pin used for keying the interface connector. |
+ +--------+----+-----+-----------------------------------------------------+
+
+6.3.1 CS1FX- (Drive chip Select 0)
+
+This is the chip select signal decoded from the host address bus used to
+select the Command Block Registers.
+
+6.3.2 CS3FX- (Drive chip Select 1)
+
+This is the chip select signal decoded from the host address bus used to
+select the Control Block Registers.
+
+6.3.3 DA0-2 (Drive Address Bus)
+
+This is the 3-bit binary coded address asserted by the host to access a
+register or data port in the drive.
+
+6.3.4 DASP- (Drive Active/Drive 1 Present)
+
+This is a time-multiplexed signal which indicates that a drive is active, or
+that Drive 1 is present. This signal shall be an open collector output and
+each drive shall have a 10K pull-up resistor.
+
+During power on initialization or after RESET- is negated, DASP- shall be
+asserted by Drive 1 within 400 msec to indicate that Drive 1 is present.
+
+Drive 0 shall allow up to 450 msec for Drive 1 to assert DASP-. If Drive 1 is
+not present, Drive 0 may assert DASP- to drive an activity LED.
+
+DASP- shall be negated following acceptance of the first valid command by
+Drive 1 or after 31 seconds, whichever comes first.
+
+Any time after negation of DASP-, either drive may assert DASP- to indicate
+that a drive is active.
+
+..rm102
+ NOTE: Prior to the development of this standard, products were introduced
+ which did not time multiplex DASP-. Some used two jumpers to indicate
+ to Drive 0 whether Drive 1 was present. If such a drive is jumpered to
+ indicate Drive 1 is present it should work successfully with a Drive 1
+ which complies with this standard. If installed as Drive 1, such a
+ drive may not work successfully because it may not assert DASP- for a
+ long enough period to be recognized. However, it would assert DASP-
+ to indicate that the drive is active.
+
+6.3.5 DD0-DD15 (Drive Data Bus)
+
+This is an 8- or 16-bit bidirectional data bus between the host and the drive.
+The lower 8 bits are used for 8-bit transfers e.g. registers, ECC bytes.
+
+6.3.6 DIOR- (Drive I/O Read)
+
+This is the Read strobe signal. The falling edge of DIOR- enables data from a
+register or the data port of the drive onto the host data bus, DD0-DD7 or DD0-
+DD15. The rising edge of DIOR- latches data at the host.
+
+6.3.7 DIOW- (Drive I/O Write)
+
+This is the Write strobe signal. The rising edge of DIOW- clocks data from the
+host data bus, DD0-DD7 or DD0-DD15, into a register or the data port of the
+drive.
+
+6.3.8 DMACK- (DMA Acknowledge) (Optional)
+
+This signal shall be used by the host in response to DMARQ to either
+acknowledge that data has been accepted, or that data is available.
+
+6.3.9 DMARQ (DMA Request) (Optional)
+
+This signal, used for DMA data transfers between host and drive, shall be
+asserted by the drive when it is ready to transfer data to or from the host.
+The direction of data transfer is controlled by DIOR- and DIOW-. This signal
+is used in a handshake manner with DMACK- i.e. the drive shall wait until the
+host asserts DMACK- before negating DMARQ, and re-asserting DMARQ if there is
+more data to transfer.
+
+When a DMA operation is enabled, IOCS16-, CS1FX- and CS3FX- shall not be
+asserted and transfers shall be 16-bits wide.
+
+..rm102
+ NOTE: ATA products with DMA capability require a pull-down resistor on this
+ signal to prevent spurious data transfers. This resistor may affect
+ driver requirements for drives sharing this signal in systems with
+ unbuffered ATA signals.
+
+6.3.10 INTRQ (Drive Interrupt)
+
+This signal is used to interrupt the host system. INTRQ is asserted only when
+the drive has a pending interrupt, the drive is selected, and the host has
+cleared nIEN in the Device Control Register. If nIEN=1, or the drive is not
+selected, this output is in a high impedance state, regardless of the presence
+or absence of a pending interrupt.
+
+INTRQ shall be negated by:
+
+ - assertion of RESET- or
+ - the setting of SRST of the Device Control Register, or
+ - the host writing the Command Register or
+ - the host reading the Status Register
+
+..rm102
+ NOTE: Some drives may negate INTRQ on a PIO data transfer completion, except
+ on a single sector read or on the last sector of a multi-sector read.
+
+On PIO transfers, INTRQ is asserted at the beginning of each data block to be
+transferred. A data block is typically a single sector, except when
+declared otherwise by use of the Set Multiple command. An exception occurs on
+Format Track, Write Sector(s), Write Buffer and Write Long commands - INTRQ
+shall not be asserted at the beginning of the first data block to be
+transferred.
+
+On DMA transfers, INTRQ is asserted only once, after the command has
+completed.
+
+6.3.11 IOCS16- (Drive 16-bit I/O)
+
+Except for DMA transfers, IOCS16- indicates to the host system that the 16-bit
+data port has been addressed and that the drive is prepared to send or receive
+a 16-bit data word. This shall be an open collector output.
+
+ - When transferring in PIO mode, If IOCS16- is not asserted, transfers shall
+ be 8-bit using DD0-7.
+ - When transferring in PIO mode, if IOCS16- is asserted, transfers shall be
+ 16-bit using DD0-15.
+ for 16-bit data transfers.
+ - When transferring in DMA mode, the host shall use a 16-bit DMA channel and
+ IOCS16- shall not be asserted.
+
+6.3.12 IORDY (I/O Channel Ready) (Optional)
+
+This signal is negated to extend the host transfer cycle of any host register
+access (Read or Write) when the drive is not ready to respond to a data
+transfer request. When IORDY is not negated, IORDY shall be in a high
+impedance state.
+
+6.3.13 PDIAG- (Passed Diagnostics)
+
+This signal shall be asserted by Drive 1 to indicate to Drive 0 that it has
+completed diagnostics. A 10K pull-up resistor shall be used on this signal by
+each drive.
+
+Following a power on reset, software reset or RESET-, Drive 1 shall negate
+PDIAG- within 1 msec (to indicate to Drive 0 that it is busy). Drive 1 shall
+then assert PDIAG- within 30 seconds to indicate that it is no longer busy,
+and is able to provide status. After the assertion of PDIAG-, Drive 1 may be
+unable to accept commands until it has finished its reset procedure and is
+Ready (DRDY=1).
+
+Following the receipt of a valid Execute Drive Diagnostics command, Drive
+1 shall negate PDIAG- within 1 msec to indicate to Drive 0 that it is busy
+and has not yet passed its drive diagnostics. If Drive 1 is present then
+Drive 0 shall wait for up to 5 seconds from the receipt of a valid Execute
+Drive Diagnostics command for Drive 1 to assert PDIAG-. Drive 1 should
+clear BSY before asserting PDIAG-, as PDIAG- is used to indicate that
+Drive 1 has passed its diagnostics and is ready to post status.
+
+..
+If DASP- was not asserted by Drive 1 during reset initialization, Drive 0
+shall post its own status immediately after it completes diagnostics, and
+clear the Drive 1 Status Register to 00h. Drive 0 may be unable to accept
+commands until it has finished its reset procedure and is Ready (DRDY=1).
+
+6.3.14 RESET- (Drive Reset)
+
+This signal from the host system shall be asserted for at least 25 usec after
+voltage levels have stabilized during power on and negated thereafter unless
+some event requires that the drive(s) be reset following power on.
+
+6.3.15 SPSYNC (Spindle Synchronization) (Optional)
+
+This signal may be either input or output to the drive depending on a vendor-
+defined switch. If a drive is set to Master the signal is output, and if a
+drive is set to slave the signal is input.
+
+There is no requirement that each drive implementation be plug-compatible to
+the extent that a multiple vendor drive subsystem be operable. Mix and match
+of different manufacturers drives is unlikely because rpm, sync fields, sync
+bytes etc need to be virtually identical. However, if drives are designed to
+match the following recommendation, controllers can operate drives with a
+single implementation.
+
+There can only be one master drive at a time in a configuration. The host or
+the drive designated as master can generate SPSYNC at least once per rotation,
+but may be at a higher frequency.
+
+SPSYNC received by a drive is used as the synchronization signal to lock the
+spindles in step. The time to achieve synchronization varies, and is indicated
+by the drive setting DRDY i.e. if the drive does not achieve synchronization
+following power on or a reset, it shall not set DRDY.
+
+A master drive or the host generates SPSYNC and transmits it.
+
+A slave drive does not generate SPSYNC and is responsible to synchronize its
+index to SPSYNC.
+
+If a drive does not support synchronization, it shall ignore SPSYNC.
+
+In the event that a drive previously synchronized loses synchronization, but
+is otherwise operational, it does not clear DRDY.
+
+Prior to the introduction of this standard, this signal was defined as DALE
+(Drive Address Latch Enable), and used for an address valid indication from
+the host system. If used, the host address and chip selects, DAO through DA2,
+CS1FX-, and CS3FX- were valid at the negation of this signal and remained
+valid while DALE was negated, therefore, the drive did not need to latch these
+signals with DALE.
+
diff --git a/sys/doc/ata/ata-7 b/sys/doc/ata/ata-7
new file mode 100644
index 000000000000..240706912a85
--- /dev/null
+++ b/sys/doc/ata/ata-7
@@ -0,0 +1,321 @@
+7. Logical Interface
+
+7.1 General
+
+7.1.1 Bit Conventions
+
+Bit names are shown in all upper case letters except where a lower case n
+precedes a bit name. This indicates that when nBIT=0 (bit is zero) the action
+is true and when nBIT=1 (bit is one) the action is false. If there is no
+preceding n, then when BIT=1 it is true, and when BIT=0 it is false.
+
+A bit can be set to one or cleared to zero and polarity influences whether it
+is to be interpreted as true or false:
+
+ True BIT=1 nBIT=0
+ False BIT=0 nBIT=1
+
+7.1.2 Environment
+
+The drives using this interface shall be programmed by the host computer to
+perform commands and return status to the host at command completion. When two
+drives are daisy chained on the interface, commands are written in parallel to
+both drives, and for all except the Execute Diagnostics command, only the
+selected drive executes the command. On an Execute Diagnostics command
+addressed to Drive 0, both drives shall execute the command, and Drive 1 shall
+post its status to Drive 0 via PDIAG-.
+
+Drives are selected by the DRV bit in the Drive/Head Register (see 7.2.8), and
+by a jumper or switch on the drive designating it as either a Drive 0 or as
+Drive 1. When DRV=0, Drive 0 is selected. When DRV=1, Drive 1 is selected.
+When drives are daisy chained, one shall be set as Drive 0 and the other as
+Drive 1. When a single drive is attached to the interface it shall be set as
+Drive 0.
+
+Prior to the adoption of this standard, some drives may have provided jumpers
+to indicate Drive 0 with no Drive 1 present, or Drive 0 with Drive 1 present.
+
+Throughout this document, drive selection always refers to the state of the
+DRV bit, and the position of the Drive 0/Drive 1 jumper or switch.
+
+7.2 I/O Register Descriptions
+
+Communication to or from the drive is through an I/O Register that routes the
+input or output data to or from registers (selected) by a code on signals from
+the host (CS1FX-, CS3FX-, DA2, DA1, DA0, DIOR- and DIOW-).
+
+The Command Block Registers are used for sending commands to the drive or
+posting status from the drive.
+
+The Control Block Registers are used for drive control and to post alternate
+status.
+
+Table 7-1 lists these registers and the addresses that select them.
+
+Logic conventions are: A = signal asserted
+ N = signal negated
+ x = does not matter which it is
+
+ TABLE 7-1: I/O PORT FUNCTIONS/SELECTION ADDRESSES
+ +-------------------------------+-----------------------------------------+
+ | Addresses | Functions |
+ |CS1FX-|CS3FX-| DA2 | DA1 | DA0 | READ (DIOR-) | WRITE (DIOW-) |
+ +------+------+-----+-----+-----+---------------------+-------------------+
+ | Control Block Registers |
+ +------+------+-----+-----+-----+---------------------+-------------------+
+ | N | N | x | x | x | Data Bus High Imped | Not used |
+ | N | A | 0 | x | X | Data Bus High Imped | Not used |
+ | N | A | 1 | 0 | x | Data Bus High Imped | Not used |
+ | N | A | 1 | 1 | 0 | Alternate Status | Device Control |
+ | N | A | 1 | 1 | 1 | Drive Address | Not used |
+ +------+------+-----+-----+-----+---------------------+-------------------+
+ | Command Block Registers |
+ +------+------+-----+-----+-----+---------------------+-------------------+
+ | A | N | 0 | 0 | 0 | Data | Data |
+ | A | N | 0 | 0 | 1 | Error Register | Features |
+ | A | N | 0 | 1 | 0 | Sector Count | Sector Count |
+ | A | N | 0 | 1 | 1 | Sector Number | Sector Number |
+ | A | N | 1 | 0 | 0 | Cylinder Low | Cylinder Low |
+ | A | N | 1 | 0 | 1 | Cylinder High | Cylinder High |
+ | A | N | 1 | 1 | 0 | Drive/Head | Drive/Head |
+ | A | N | 1 | 1 | 1 | Status | Command |
+ | A | A | x | x | x | Invalid Address | Invalid Address |
+ +------+------+-----+-----+-----+---------------------+-------------------+
+
+7.2.1 Alternate Status Register
+
+This register contains the same information as the Status Register in the
+command block. The only difference being that reading this register does not
+imply interrupt acknowledge or clear a pending interrupt.
+
+ 7 6 5 4 3 2 1 0
+ +-------+-------+-------+-------+-------+-------+-------+-------+
+ | BSY | DRDY | DWF | DSC | DRQ | CORR | IDX | ERR |
+ +-------+-------+-------+-------+-------+-------+-------+-------+
+
+See 7.2.13 for definitions of the bits in this register.
+
+7.2.2 Command Register
+
+This register contains the command code being sent to the drive. Command
+execution begins immediately after this register is written. The executable
+commands, the command codes, and the necessary parameters for each command are
+listed in Table 9-1.
+
+7.2.3 Cylinder High Register
+
+This register contains the high order bits of the starting cylinder address
+for any disk access. At the end of the command, this register is updated to
+reflect the current cylinder number. The most significant bits of the cylinder
+address shall be loaded into the cylinder high Register.
+
+..rm102
+ NOTE: Prior to the introduction of this standard, only the lower 2 bits of
+ this register were valid, limiting cylinder address to 10 bits i.e.
+ 1,024 cylinders.
+
+7.2.4 Cylinder Low Register
+
+This register contains the low order 8 bits of the starting cylinder address
+for any disk access. At the end of the command, this register is updated to
+reflect the current cylinder number.
+
+7.2.5 Data Register
+
+This 16-bit register is used to transfer data blocks between the device data
+buffer and the host. It is also the register through which sector information
+is transferred on a Format command. Data transfers may be either PIO or DMA.
+
+7.2.6 Device Control Register
+
+The bits in this register are as follows:
+
+ 7 6 5 4 3 2 1 0
+ +-------+-------+-------+-------+-------+-------+-------+-------+
+ | x | x | x | x | 1 | SRST | nIEN | 0 |
+ +-------+-------+-------+-------+-------+-------+-------+-------+
+
+ - SRST is the host software reset bit. The drive is held reset when this bit
+ is set. If two disk drives are daisy chained on the interface, this bit
+ resets both simultaneously. Drive 1 is not required to execute the DASP-
+ handshake procedure.
+ - nIEN is the enable bit for the drive interrupt to the host. When nIEN=0,
+ and the drive is selected, INTRQ shall be enabled through a tri-state
+ buffer. When nIEN=1, or the drive is not selected, the INTRQ signal shall
+ be in a high impedance state.
+
+7.2.7 Drive Address Register
+
+This register contains the inverted drive select and head select addresses of
+the currently selected drive. The bits in this register are as follows:
+
+ 7 6 5 4 3 2 1 0
+ +-------+-------+-------+-------+-------+-------+-------+-------+
+ | HiZ | nWTG | nHS3 | nHS2 | nHS1 | nHS0 | nDS1 | nDS0 |
+ +-------+-------+-------+-------+-------+-------+-------+-------+
+
+ - HiZ shall always be in a high impedance state.
+ - nWTG is the Write Gate bit. When writing to the disk drive is in progress,
+ nWTG=0.
+ - nHS3 through nHS0 are the one's complement of the binary coded address of
+ the currently selected head. For example, if nHS3 through nHS0 are 1100b,
+ respectively, head 3 is selected. nHS3 is the most significant bit.
+ - nDS1 is the drive select bit for drive 1. When drive 1 is selected and
+ active, nDS1=0.
+ - nDS0 is the drive select bit for drive 0. When drive 0 is selected and
+ active, nDS0=0.
+
+..rm102
+ NOTE: Care should be used when interpreting these bits, as they do not
+ always represent the expected status of drive operations at the
+ instant the status was put into this register. This is because of the
+ use of cacheing, translate mode and the Drive 0/Drive 1 concept with
+ each drive having its own embedded controller.
+
+7.2.8 Drive/Head Register
+
+This register contains the drive and head numbers. The contents of this
+register define the number of heads minus 1, when executing an Initialize
+Drive Parameters command.
+
+ 7 6 5 4 3 2 1 0
+ +-------+-------+-------+-------+-------+-------+-------+-------+
+ | 1 | 0 | 1 | DRV | HS3 | HS2 | HS1 | HS0 |
+ +-------+-------+-------+-------+-------+-------+-------+-------+
+
+ - DRV is the binary encoded drive select number. When DRV=0, Drive 0 is
+ selected. When DRV=1, Drive 1 is selected.
+ - HS3 through HS0 contain the binary coded address of the head to be selected
+ e.g. if HS3 through HS0 are 0011b, respectively, head 3 will be selected.
+ HS3 is the most significant bit. At command completion, this register is
+ updated to reflect the currently selected head.
+
+7.2.9 Error Register
+
+This register contains status from the last command executed by the drive or a
+Diagnostic Code.
+
+At the completion of any command except Execute Drive Diagnostic, the contents
+of this register are valid when ERR=1 in the Status Register.
+
+Following a power on, a reset, or completion of an Execute Drive Diagnostic
+command, this register contains a Diagnostic Code (see Table 9-2).
+
+ 7 6 5 4 3 2 1 0
+ +-------+-------+-------+-------+-------+-------+-------+-------+
+ | BBK | UNC | 0 | IDNF | 0 | ABRT | TK0NF | AMNF |
+ +-------+-------+-------+-------+-------+-------+-------+-------+
+
+ - BBK (Bad Block Detected) indicates a bad block mark was detected in the
+ requested sector's ID field.
+ - UNC (Uncorrectable Data Error) indicates an uncorrectable data error has
+ been encountered.
+ - IDNF (ID Not Found) indicates the requested sector's ID field could not be
+ found.
+ - ABRT (Aborted Command) indicates the requested command has been aborted due
+ to a drive status error (Not Ready, Write Fault, etc.) or because the
+ command code is invalid.
+ - TK0NF (Track 0 Not Found) indicates track 0 has not been found during a
+ Recalibrate command.
+ - AMNF (Address Mark Not Found) indicates the data address mark has not been
+ found after finding the correct ID field.
+ - Unused bits are cleared to zero.
+
+7.2.10 Features Register
+
+This register is command specific and may be used to enable and disable
+features of the interface e.g. by the Set Features Command to enable and
+disable cacheing.
+
+This register may be ignored by some drives.
+
+Some hosts, based on definitions prior to the completion of this standard, set
+values in this register to designate a recommended Write Precompensation
+Cylinder value.
+
+7.2.11 Sector Count Register
+
+This register contains the number of sectors of data requested to be
+transferred on a read or write operation between the host and the drive. If
+the value in this register is zero, a count of 256 sectors is specified.
+
+If this register is zero at command completion, the command was successful. If
+not successfully completed, the register contains the number of sectors which
+need to be transferred in order to complete the request.
+
+The contents of this register may be defined otherwise on some commands e.g.
+Initialize Drive Parameters, Format Track or Write Same commands.
+
+7.2.12 Sector Number Register
+
+This register contains the starting sector number for any disk data access for
+the subsequent command. The sector number may be from 1 to the maximum number
+of sectors per track.
+
+See the command descriptions for contents of the register at command
+completion (whether successful or unsuccessful).
+
+..Typically, when a read or write command completes successfully, the value
+..in the register is the last sector number accessed modulo the number of
+..sectors per track. Typically, if a command does not complete successfully,
+..the register contains the sector number at which an error occurred on a
+..multiple sector transfer.
+..
+7.2.13 Status Register
+
+This register contains the drive status. The contents of this register are
+updated at the completion of each command. When BSY is cleared, the other bits
+in this register shall be valid within 400 nsec. If BSY=1, no other bits in
+this register are valid. If the host reads this register when an interrupt is
+pending, it is considered to be the interrupt acknowledge. Any pending
+interrupt is cleared whenever this register is read.
+
+..rm102
+ NOTE: If Drive 1 is not detected as being present, Drive 0 clears the Drive
+ 1 Status Register to 00h (indicating that the drive is Not Ready).
+
+ 7 6 5 4 3 2 1 0
+ +-------+-------+-------+-------+-------+-------+-------+-------+
+ | BSY | DRDY | DWF | DSC | DRQ | CORR | IDX | ERR |
+ +-------+-------+-------+-------+-------+-------+-------+-------+
+
+ - BSY (Busy) is set whenever the drive has access to the Command Block
+ Registers. The host should not access the Command Block Register when
+ BSY=1. When BSY=1, a read of any Command Block Register shall return the
+ contents of the Status Register. This bit is set by the drive (which may be
+ able to respond at times when the media cannot be accessed) under the
+ following circumstances:
+ a) within 400 nsec after the negation of RESET- or after SRST has been set
+ in the Device Control Register. Following acceptance of a reset it is
+ recommended that BSY be set for no longer than 30 seconds by Drive 1 and
+ no longer than 31 seconds by Drive 0.
+ b) within 400 nsec of a host write of the Command Register with a Read,
+ Read Long, Read Buffer, Seek, Recalibrate, Initialize Drive Parameters,
+ Read Verify, Identify Drive, or Execute Drive Diagnostic command.
+ c) within 5 usecs following transfer of 512 bytes of data during execution
+ of a Write, Format Track, or Write Buffer command, or 512 bytes of data
+ and the appropriate number of ECC bytes during the execution of a Write
+ Long command.
+ - DRDY (Drive Ready) indicates that the drive is capable of responding to a
+ command. When there is an error, this bit is not changed until the Status
+ Register is read by the host, at which time the bit again indicates the
+ current readiness of the drive. This bit shall be cleared at power on and
+ remain cleared until the drive is ready to accept a command.
+ - DWF (Drive Write Fault) indicates the current write fault status. When an
+ error occurs, this bit shall not be changed until the Status Register is
+ read by the host, at which time the bit again indicates the current write
+ fault status.
+ - DSC (Drive Seek Complete) indicates that the drive heads are settled over a
+ track. When an error occurs, this bit shall not be changed until the Status
+ Register is read by the host, at which time the bit again indicates the
+ current Seek Complete status.
+ - DRQ (Data Request) indicates that the drive is ready to transfer a word or
+ byte of data between the host and the drive.
+ - CORR (Corrected Data) indicates that a correctable data error was
+ encountered and the data has been corrected. This condition does not
+ terminate a data transfer.
+ - IDX (Index) is set once per disk revolution.
+ - ERR (Error) indicates that an error occurred during execution of the
+ previous command. The bits in the Error Register have additional
+ information regarding the cause of the error.
+
diff --git a/sys/doc/ata/ata-8 b/sys/doc/ata/ata-8
new file mode 100644
index 000000000000..f651b6b49326
--- /dev/null
+++ b/sys/doc/ata/ata-8
@@ -0,0 +1,143 @@
+8. Programming Requirements
+
+8.1 Reset Response
+
+A reset is accepted within 400 nsec after the negation of RESET- or within 400
+nsec after SRST has been set in the Device Control Register.
+
+When the drive is reset by RESET-, Drive 1 shall indicate it is present by
+asserting DASP- within 400 msec, and DASP- shall remain asserted for 30
+seconds or until Drive 1 accepts the first command. See also 6.3.4 and 6.3.13.
+
+When the drive is reset by SRST, the drive shall set BSY=1.
+
+See also 7.2.6.
+
+When a reset is accepted, and with BSY set:
+
+ a) Both drives perform any necessary hardware initialization
+ b) Both drives clear any previously programmed drive parameters
+ c) Both drives may revert to the default condition
+ d) Both drives load the Command Block Registers with their default values
+ e) If a hardware reset, Drive 0 waits for DASP- to be asserted by Drive 1
+ f) If operational, Drive 1 asserts DASP-
+ g) Drive 0 waits for PDIAG- to be asserted if Drive 1 asserts DASP-
+ h) If operational, Drive 1 clears BSY
+ i) If operational, Drive 1 asserts PDIAG-
+ j) Drive 0 clears BSY
+
+No interrupt is generated when initialization is complete.
+
+The default values for the Command Block Registers if no self-tests are
+performed or if no errors occurred are:
+
+ Error = 01h Cylinder Low = 00h
+ Sector Count = 01h Cylinder High = 00h
+ Sector Number = 01h Drive/Head = 00h
+
+The Error Register shall contain a Diagnostic Code (see Table 9.2) if a self-
+test is performed.
+
+Following any reset, the host should issue an Initialize Drive Parameters
+command to ensure the drive is initialized as desired.
+
+There are three types of reset in ATA. The following is a suggested method of
+classifying reset actions:
+
+ - Power On Reset: the drive executes a series of electrical circuitry
+ diagnostics, spins up the HDA, tests speed and other mechanical
+ parametrics, and sets default values.
+ - Hardware Reset: the drive executes a series of electrical circuitry
+ diagnostics, and resets to default values.
+ - Software Reset: the drive resets the interface circuitry to default values.
+
+8.2 Translate Mode
+
+The cylinder, head and sector geometry of the drive as presented to the host
+may differ from the actual physical geometry. Translate mode is an optional
+and device specific means of mapping between the two.
+
+8.3 Power Conditions
+
+Optional power commands permit the host to modify the behavior of the drive in
+a manner which reduces the power required to operate.
+
+ TABLE 8-1: POWER CONDITIONS
+ +----------+----+----+----+------------------+-----+
+ | Mode |SRST| BSY|DRDY| Interface Active |Media|
+ +----------+----+----+----+------------------+-----+
+ | Sleep | 1 | x | x | No | 0 |
+ | | | | | | |
+ | Standby | x | 0 | 1 | Yes | 0 |
+ | | | | | | |
+ | Idle | x | 0 | 1 | Yes | 1 |
+ | | | | | | |
+ | Active | x | x | x | Yes | 1 |
+ +----------+----+----+----+------------------+-----+
+ | 1 = Active 0 = Inactive |
+ +--------------------------------------------------+
+
+The lowest power consumption occurs in Sleep mode. When in Sleep mode, the
+drive needs a Software Reset to be activated (see 9.18). The time to respond
+could be as long as 30 seconds or more.
+
+In Standby mode the drive interface is capable of accepting commands, but as
+the media is not immediately accessible, it could take the drive as long as 30
+seconds or more to respond.
+
+In Idle mode the drive is capable of responding immediately to media access
+requests. A drive in Idle mode may take longer to complete the execution of a
+command because it may have to activate some circuitry.
+
+In Active mode the drive is capable of responding immediately to media access
+requests, and commands complete execution in the shortest possible time.
+
+Ready is not a power condition. A drive may post ready at the interface even
+though the media may not be accessible.
+
+See specific power-related commands.
+
+8.4 Error Posting
+
+The errors that are valid for each command are defined in Table 8-1. It is not
+a requirement that all valid conditions be implemented. See 7.2.9 and 7.2.13
+for the definition of the Error Register and Status Register bits.
+
+ TABLE 8-2: REGISTER CONTENTS
+ +----------------------------+---------------------+
+ | Error Register | Status Register |
+ |BBK|UNC|IDNF|ABRT|TK0NF|AMNF|DRDY|DWF|DSC|CORR|ERR|
+ +------------------------+---+---+----+----+-----+----+----+---+---+----+---+
+ | Check Power Mode | | | | V | | | V | V | V | | V |
+ | Execute Drive Diags | See 9.2 | | | | | V |
+ | Format Track | | | V | V | | | V | V | V | | V |
+ | Identify Drive | | | | V | | | V | V | V | | V |
+ | Idle | | | | V | | | V | V | V | | V |
+ | Idle Immediate | | | | V | | | V | V | V | | V |
+ | Initialize Drive Parms | | | | | | | V | V | V | | |
+ | Recalibrate | | | | V | V | | V | V | V | | V |
+ | Read Buffer | | | | V | | | V | V | V | | V |
+ | Read DMA | V | V | V | V | | V | V | V | V | V | V |
+ | Read Long | V | V | V | V | | V | V | V | V | V | V |
+ | Read Multiple | V | V | V | V | | V | V | V | V | V | V |
+ | Read Sector(s) | V | V | V | V | | V | V | V | V | V | V |
+ | Read Verify Sector(s) | V | V | V | V | | V | V | V | V | V | V |
+ | Seek | | | V | V | | | V | V | V | | V |
+ | Set Features | | | | V | | | V | V | V | | V |
+ | Set Multiple Mode | | | | V | | | V | V | V | | V |
+ | Sleep | | | | V | | | V | V | V | | V |
+ | Standby | | | | V | | | V | V | V | | V |
+ | Standby Immediate | | | | V | | | V | V | V | | V |
+ | Write Buffer | | | | V | | | V | V | V | | V |
+ | Write DMA | V | | V | V | | | V | V | V | | V |
+ | Write Long | V | | V | V | | | V | V | V | | V |
+ | Write Multiple | V | | V | V | | | V | V | V | | V |
+ | Write Same | V | | V | V | | | V | V | V | | V |
+ | Write Sector(s) | V | | V | V | | | V | V | V | | V |
+ | Write Verify | V | V | V | V | | V | V | V | V | V | V |
+ +------------------------+---+---+----+----+-----+----+----+---+---+----+---+
+ | Invalid Command Code | | | | V | | | V | V | V | | V |
+ +------------------------+---+---+----+----+-----+----+----+---+---+----+---+
+ | V = valid on this command |
+ +---------------------------------------------------------------------------+
+
diff --git a/sys/doc/ata/ata-9 b/sys/doc/ata/ata-9
new file mode 100644
index 000000000000..4cd3f6684989
--- /dev/null
+++ b/sys/doc/ata/ata-9
@@ -0,0 +1,721 @@
+9. Command Descriptions
+
+Commands are issued to the drive by loading the pertinent registers in the
+command block with the needed parameters, and then writing the command code to
+the Command Register.
+
+The manner in which a command is accepted varies. There are three classes
+(see Table 9-1) of command acceptance, all predicated on the fact that to
+receive a command, BSY=0:
+
+ - Upon receipt of a Class 1 command, the drive sets BSY within 400 nsec.
+ - Upon receipt of a Class 2 command, the drive sets BSY within 400 nsec, sets
+ up the sector buffer for a write operation, sets DRQ within 700 usec, and
+ clears BSY within 400 nsec of setting DRQ.
+ - Upon receipt of a Class 3 command, the drive sets BSY within 400 nsec, sets
+ up the sector buffer for a write operation, sets DRQ within 20 msec, and
+ clears BSY within 400 nsec of setting DRQ.
+
+..rm102
+ NOTE: DRQ may be set so quickly on Class 2 and Class 3 that the BSY
+ transition is too short for BSY=1 to be recognized.
+
+The drive shall implement all mandatory commands as identified by an M, and
+may implement the optional commands identified by an O, in Table 9-1. V
+indicates a Vendor Specific command code.
+
+ TABLE 9-1: COMMAND CODES AND PARAMETERS
+ +-------+-------------------+
+ +-----+ |Command| Parameters Used |
+ |Class| | Code |FR SC SN CY DH |
+ +-----+----------------------------------+---+-------+---+---+---+---+---+
+ | 1 | Check Power Mode | O |98h E5h| | y | | | D |
+ | 1 | Execute Drive Diagnostic | M | 90h | | | | | D*|
+ | 2 | Format Track | M | 50h | * | y | | y | y |
+ | 1 | Identify Drive | O | ECh | | | | | D |
+ | 1 | Idle | O |97h E3h| | y | | | D |
+ | 1 | Idle Immediate | O |95h E1h| | | | | D |
+ | 1 | Initialize Drive Parameters | M | 91h | | y | | | y |
+ | 1 | Recalibrate | M | 1xh | | | | | D |
+ | 1 | Read Buffer | O | E4h | | | | | D |
+ | 1 | Read DMA (w/retry) | O | C8h | | y | y | y | y |
+ | 1 | Read DMA (w/o retry) | O | C9h | | y | y | y | y |
+ | 1 | Read Multiple | O | C4h | | y | y | y | y |
+ | 1 | Read Sector(s) (w/retry) | M | 20 | | y | y | y | y |
+ | 1 | Read Sector(s) (w/o retry) | M | 21 | | y | y | y | y |
+ | 1 | Read Long (w/retry) See 9.13 | M | 22 | | y | y | y | y |
+ | 1 | Read Long (w/o retry) See 9.13 | M | 23 | | y | y | y | y |
+ | 1 | Read Verify Sector(s) (w/retry) | M | 40 | | y | y | y | y |
+ | 1 | Read Verify Sector(s) (w/o retry)| M | 41 | | y | y | y | y |
+ | 1 | Seek | M | 7xh | | | y | y | y |
+ | 1 | Set Features | O | EFh | y | | | | D |
+ | 1 | Set Multiple Mode | O | C6h | | y | | | D |
+ | 1 | Set Sleep Mode | O |99h E6h| | | | | D |
+ | 1 | Standby | O |96h E2h| | y | | | D |
+ | 1 | Standby Immediate | O |94h E0h| | | | | D |
+ | 2 | Write Buffer | O | E8h | | | | | D |
+ | 3 | Write DMA (w/retry) | O | CAh | | y | y | y | y |
+ | 3 | Write DMA (w/o retry) | O | CBh | | y | y | y | y |
+ | 3 | Write Multiple | O | C5h | * | y | y | y | y |
+ | 3 | Write Same | O | E9h | y | y | y | y | y |
+ | 2 | Write Sector(s) (w/retry) | M | 30 | * | y | y | y | y |
+ | 2 | Write Sector(s) (w/o retry) | M | 31 | * | y | y | y | y |
+ | 2 | Write Sector(s) (w/retry) | M | 32 | * | y | y | y | y |
+ | 2 | Write Sector(s) (w/o retry) | M | 33 | * | y | y | y | y |
+ | 3 | Write Verify | O | 3Ch | * | y | y | y | y |
+ | | Vendor Unique | V | 9Ah | | | | | |
+ | | Vendor Unique | V | C0-C3h| | | | | |
+ | | Vendor Unique | V | 8xh | | | | | |
+ | | Vendor Unique | V |F5h-FFh| | | | | |
+ | | EATA Standard (CAM/89-004) | O |F0h-F4h| | | | | |
+ | | Reserved: All remaining codes | | | | | | | |
+ +-----+----------------------------------+---+-------+---+---+---+---+---+
+ | | CY = Cylinder Registers SC = Sector Count Register |
+ | | DH = Drive/Head Register SN = Sector Number Register |
+ | | FR = Features Register (see command descriptions for use) |
+.. | | |
+.. | | M = Mandatory O = Optional V = Vendor Specific |
+ | | y - the register contains a valid parameter for this command. |
+ | | For the Drive/Head Register, y means both the drive and |
+ | | head parameters are used. |
+ | | D - only the drive parameter is valid and not the head parameter.|
+ | | D* - Addressed to Drive 0 but both drives execute it. |
+ | | * - Maintained for compatibility (see 7.2.9) |
+ +-----+------------------------------------------------------------------+
+
+9.1 Check Power Mode
+
+This command checks the power mode.
+
+If the drive is in, going to, or recovering from the Standby Mode the drive
+shall set BSY, set the Sector Count Register to 00h, clear BSY, and generate
+an interrupt.
+
+If the drive is in the Idle Mode, the drive shall set BSY, set the Sector
+Count Register to FFh, clear BSY, and generate an interrupt.
+
+9.2 Execute Drive Diagnostic
+
+This command shall perform the internal diagnostic tests implemented by the
+drive. See also 6.3.4 and 6.3.13. The DRV bit is ignored. Both drives, if
+present, shall execute this command.
+
+If Drive 1 is present:
+
+ - Drive 0 waits up to 5 seconds for Drive 1 to assert PDIAG-.
+ - If Drive 1 has not asserted PDIAG-, indicating a failure, Drive 0 shall
+ append 80h to its own diagnostic status.
+ - Both drives shall execute diagnostics.
+ - If Drive 1 diagnostic failure is detected when Drive 0 status is read,
+ Drive 1 status is obtained by setting the DRV bit, and reading status.
+
+If there is no Drive 1 present:
+
+ - Drive 0 posts only its own diagnostic results.
+ - Drive 0 clears BSY, and generates an interrupt.
+
+The Diagnostic Code written to the Error Register is a unique 8-bit code as
+shown in Table 9-2, and not as the single bit flags defined in 7.2.9.
+
+..Table 9-2 details the codes and the corresponding explanations.
+If Drive 1 fails diagnostics, Drive 0 "ORs" 80h with its own status and loads
+that code into the Error Register. If Drive 1 passes diagnostics or there is
+no Drive 1 connected, Drive 0 "ORs" 00h with its own status and loads that
+code into the Error Register.
+
+ TABLE 9-2: DIAGNOSTIC CODES
+ +-------+
+ | Code |
+ +-------+----------------------------------+
+ | 01h | No error detected |
+ | 02h | Formatter device error |
+ | 03h | Sector buffer error |
+ | 04h | ECC circuitry error |
+ | 05h | Controlling microprocessor error |
+ | 8xh | Drive 1 failed |
+ +-------+----------------------------------+
+
+9.3 Format Track
+
+The implementation of the Format Track command is vendor specific. The actions
+may be a physical reformatting of a track, initializing the data field
+contents to some value, or doing nothing.
+
+The Sector Count Register contains the number of sectors per track.
+
+The track address is specified in the Cylinder High and Cylinder Low
+Registers, and the number of sectors is specified in the Sector Count
+Register. When the command is accepted, the drive sets the DRQ bit and waits
+for the host to fill the sector buffer. When the sector buffer is full, the
+drive clears DRQ, sets BSY and begins command execution.
+
+The contents of the sector buffer shall not be written to the media, and may
+be either ignored or interpreted as follows:
+
+ DD15 ---- DD0 DD15 ---- DD0
+ +------+------+ +------+------+--------------------------+
+ | First|Desc- | | Last |Desc- | Remainder of buffer |
+ |Sector|riptor| : : : : : : |Sector|riptor| filled with zeros |
+ +------+------+ +------+------+--------------------------+
+
+One 16-bit word represents each sector, the words being contiguous from the
+start of a sector. Any words remaining in the buffer after the representation
+of the last sector are filled with zeros. DD15-8 contain the sector number. If
+an interleave is specified, the words appear in the same sequence as they
+appear on the track. DD7-0 contain a descriptor value defined as follows:
+
+ 00h - Format sector as good
+ 20h - Unassign the alternate location for this sector
+ 40h - Assign this sector to an alternate location
+ 80h - Format sector as bad
+
+..rm102
+ NOTE: Some users of the ATA drive expect the operating system partition
+ table to be erased on a Format command. It is recommended that a drive
+ which does not perform a physical format of the track, write a data
+ pattern of all zeros to the sectors which have been specified by the
+ Format Track command.
+
+..rm102
+ NOTE: It is recommended that implementors resassign data blocks which show
+ repeated errors.
+
+9.4 Identify Drive
+
+The Identify Drive command enables the host to receive parameter information
+from the drive. When the command is issued, the drive sets BSY, stores the
+required parameter information in the sector buffer, sets DRQ, and generates
+an interrupt. The host then reads the information out of the sector buffer.
+The parameter words in the buffer have the arrangement and meanings defined in
+Table 9-3. All reserved bits or words shall be zero.
+
+ +-------+ TABLE 9-3: IDENTIFY DRIVE INFORMATION
+ | Word |
+ +-------+------------------------------------------------------------------+
+ | 0 | General configuration bit-significant information: |
+ | | 15 0 reserved for non-magnetic drives |
+ | | 14 1=format speed tolerance gap required |
+ | | 13 1=track offset option available |
+ | | 12 1=data strobe offset option available |
+ | | 11 1=rotational speed tolerance is > 0.5% |
+ | | 10 1=disk transfer rate > 10 Mbs |
+ | | 9 1=disk transfer rate > 5Mbs but <= 10Mbs |
+ | | 8 1=disk transfer rate <= 5Mbs |
+ | | 7 0 reserved for removable cartridge drive |
+ | | 6 1=fixed drive |
+ | | 5 1=spindle motor control option implemented |
+ | | 4 1=head switch time > 15 usec |
+ | | 3 1=not MFM encoded |
+ | | 2 1=soft sectored |
+ | | 1 1=hard sectored |
+ | | 0 0=reserved |
+ | 1 | Number of fixed cylinders |
+ | 2 | reserved |
+ | 3 | Number of heads |
+ | 4 | Number of unformatted bytes per track |
+ | 5 | Number of unformatted bytes per sector |
+ | 6 | Number of sectors per track |
+ | 7-9 | Vendor Unique |
+ | 10-19 | Serial number (20 ASCII characters, 0000h=not specified) |
+ | 20 | Buffer type |
+ | 21 | Buffer size in 512 byte increments (0000h=not specified) |
+ | 22 | # of ECC bytes passed on Read/Write Long cmds (0000h=not spec'd) |
+ | 23-26 | Firmware revision (8 ASCII characters, 0000h=not specified) |
+ | 27-46 | Model number (40 ASCII characters, 0000h=not specified) |
+ | 47 | 0000h = Read/Write Multiple commands not implemented |
+ | | x = number of sectors that can be transferred per interrupt |
+ | | on Read and Write Multiple commands |
+ | 48 | 0000h = cannot perform doubleword I/O |
+ | | 0001h = can perform doubleword I/O |
+ | 49 | Capabilities |
+ | | 15-9 0=reserved |
+ | | 8 1=DMA Supported |
+ | | 7-0 Vendor Unique |
+ | 50 | reserved |
+ | 51 | PIO data transfer cycle timing mode |
+ | 52 | DMA data transfer cycle timing mode |
+ | 53-127| reserved |
+ |128-159| Vendor Unique |
+ |160-255| reserved |
+ +-------+------------------------------------------------------------------+
+
+The fields described in 9.4.1 through 9.4.5 are not affected by the Initialize
+Drive Parameters command.
+
+9.4.1 Number of fixed cylinders
+
+The number of translated cylinders in the default translation mode.
+
+9.4.2 Number of heads
+
+The number of translated heads in the default translation mode.
+
+9.4.3 Number of unformatted bytes per track
+
+The number of unformatted bytes per translated track in the default
+translation mode.
+
+9.4.4 Number of unformatted bytes per sector
+
+The number of unformatted bytes per sector in the default translation mode.
+
+9.4.5 Number of sectors per track
+
+The number of sectors per track in the default translation mode.
+
+9.4.6 Serial Number
+
+The contents of this field are right justified and padded with spaces (20h).
+
+9.4.7 Buffer Type
+
+The contents of the field are determined by the manufacturer.
+
+ 0000h = not specified.
+ 0001h = a single ported single sector buffer which is not capable of
+ simultaneous data transfers to or from the host and the disk.
+ 0002h = a dual ported multi-sector buffer capable of simultaneous data
+ transfers to or from the host and the disk.
+ 0003h = a dual ported multi-sector buffer capable of simultaneous transfers
+ with a read cacheing capability.
+ 0004-FFFFh = reserved
+
+These codes are typically not used by the operating system, however, they are
+useful for diagnostic programs which perform initialization routines e.g. a
+different interleave may be desirable for 0001h vs 0002h or 0003h.
+
+9.4.8 Firmware Revision
+
+The contents of this field are left justified and padded with spaces (20h).
+
+9.4.9 Model Number
+
+The contents of this field are left justified and padded with spaces (20h).
+
+9.4.10 PIO data transfer cycle timing mode
+
+The PIO transfer timing for each ATA device falls into categories which have
+unique parametric timing specifications. To determine the proper device timing
+category, compare the Cycle Time specified in Figure 11-1 with the contents of
+this field. The value returned should fall into one of the categories
+specified in Figure 11-1, and if it does not, then Mode 0 shall be used to
+serve as the default timing.
+
+9.4.11 DMA data transfer cycle timing mode
+
+The DMA transfer timing for each ATA device falls into categories which have
+unique parametric timing specifications. To determine the proper device timing
+category, compare the Cycle Time specified in Figure 11-3 with the contents of
+this field. The value returned should fall into one of the categories
+specified in Figure 11-3, and if it does not, then Mode 0 shall be used to
+serve as the default timing.
+
+9.5 Idle
+
+This command causes the drive to set BSY, enter the Idle Mode, clear BSY, and
+generate an interrupt. The interrupt is generated even though the drive may
+not have fully transitioned to Idle Mode.
+
+If the drive is already spinning, the spinup sequence is not executed.
+
+If the Sector Count Register is non-zero then the automatic power down
+sequence shall be enabled and the timer begins counting down immediately. If
+the Sector Count Register is zero then the automatic power down sequence shall
+be disabled.
+
+9.6 Idle Immediate
+
+This command causes the drive to set BSY, enter the Idle Mode, clear BSY, and
+generate an interrupt. The interrupt is generated even though the drive may
+not have fully transitioned to Idle Mode.
+
+9.7 Initialize Drive Parameters
+
+..This command enables the host to control certain drive parameters. Some
+..parameters are standard while others are vendor specific.
+This command enables the host to set the number of sectors per track and the
+number of heads minus 1, per cylinder. Upon receipt of the command, the drive
+sets BSY, saves the parameters, clears BSY, and generates an interrupt.
+
+The only two register values used by this command are the Sector Count
+Register which specifies the number of sectors per track, and the Drive/Head
+Register which specifies the number of heads minus 1. The DRV bit designates
+these values to Drive 0 or Drive 1, as appropriate.
+
+The sector count and head values are not checked for validity by this command.
+If they are invalid, no error will be posted until an illegal access is made
+by some other command.
+
+9.8 Recalibrate
+
+This command moves the read/write heads from anywhere on the disk to cylinder
+0. Upon receipt of the command, the drive sets BSY and issues a seek to
+cylinder zero. The drive then waits for the seek to complete before updating
+status, clearing BSY and generating an interrupt.
+
+If the drive cannot reach cylinder 0, a Track Not Found error is posted.
+
+9.9 Read Buffer
+
+The Read Buffer command enables the host to read the current contents of the
+drive's sector buffer. When this command is issued, the drive sets BSY, sets
+up the sector buffer for a read operation, sets DRQ, clears BSY, and generates
+an interrupt. The host then reads up to 512 bytes of data from the buffer.
+
+The Read Buffer and Write Buffer commands shall be synchronized such that
+sequential Write Buffer and Read Buffer commands access the same 512 bytes
+within the buffer.
+
+9.10 Read DMA
+
+This command executes in a similar manner to the Read Sectors command except
+for the following:
+
+ - the host initializes a slave-DMA channel prior to issuing the command
+ - data transfers are qualified by DMARQ and are performed by the slave-DMA
+ channel
+ - the drive issues only one interrupt per command to indicate that data
+ transfer has terminated and status is available.
+
+Any error encountered during execution of a Read DMA command results in the
+termination of data transfer at the sector where the error was detected. The
+sector in error is not transferred. The drive generates an interrupt to
+indicate that data transfer has terminated and status is available. The error
+posting is the same as that of the Read Sectors command.
+
+9.11 Read Long
+
+The Read Long command performs similarly to the Read Sectors command except
+that it returns the data and the ECC bytes contained in the data field of the
+desired sector. During a Read Long command, the drive does not check the ECC
+bytes to determine if there has been a data error. Only single sector read
+long operations are supported.
+
+The transfer of the ECC bytes shall be 8-bits wide.
+
+9.12 Read Multiple Command
+
+The Read Multiple command performs similarly to the Read Sectors command.
+Interrupts are not generated on every sector, but on the transfer of a block
+which contains the number of sectors defined by a Set Multiple command.
+
+Command execution is identical to the Read Sectors operation except that the
+number of sectors defined by a Set Multiple command are transferred without
+intervening interrupts. DRQ qualification of the transfer is required only at
+the start of the data block, not on each sector.
+
+The block count of sectors to be transferred without intervening interrupts is
+programmed by the Set Multiple Mode command, which shall be executed prior to
+the Read Multiple command.
+
+When the Read Multiple command is issued, the Sector Count Register contains
+the number of sectors (not the number of blocks or the block count) requested.
+
+If the number of requested sectors is not evenly divisible by the block count,
+as many full blocks as possible are transferred, followed by a final, partial
+block transfer. The partial block transfer shall be for n sectors, where
+
+ n = (sector count) - modulo (block count)
+
+If the Read Multiple command is attempted before the Set Multiple Mode command
+has been executed or when Read Multiple commands are disabled, the Read
+Multiple operation shall be rejected with an Aborted Command error.
+
+Disk errors encountered during Read Multiple commands are posted at the
+beginning of the block or partial block transfer, but DRQ is still set and the
+data transfer shall take place as it normally would, including transfer of
+corrupted data, if any.
+
+The contents of the Command Block Registers following the transfer of a data
+block which had a sector in error are undefined. The host should retry the
+transfer as individual requests to obtain valid error information.
+
+Subsequent blocks or partial blocks are transferred only if the error was a
+correctable data error. All other errors cause the command to stop after
+transfer of the block which contained the error. Interrupts are generated when
+DRQ is set at the beginning of each block or partial block.
+
+..The error reporting is the same as that on a Read Sectors command.
+..
+9.13 Read Sector(s)
+
+This command reads from 1 to 256 sectors as specified in the Sector Count
+register. A sector count of 0 requests 256 sectors. The transfer begins at the
+sector specified in the Sector Number Register. See 10.1 for the DRQ, IRQ and
+BSY protocol on data transfers.
+
+If the drive is not already on the desired track, an implied seek is
+performed. Once at the desired track, the drive searches for the appropriate
+ID field.
+
+If retries are disabled and two index pulses have occurred without error free
+reading of the requested ID, an ID Not Found error is posted.
+
+If retries are enabled, up to a vendor specific number of attempts may be made
+to read the requested ID before posting an error.
+
+If the ID is read correctly, the data address mark shall be recognized within
+a specified number of bytes, or the Address Mark Not Found error is posted.
+
+..Once the data address mark is found, the data field is read into the sector
+..buffer, error bits are set if an error was encountered, DRQ is set, and an
+..interrupt is generated.
+..
+DRQ is always set regardless of the presence or absence of an error condition
+at the end of the sector.
+
+At command completion, the Command Block Registers contain the cylinder, head,
+and sector number of the last sector read.
+
+If an error occurs, the read terminates at the sector where the error
+occurred. The Command Block Registers contain the cylinder, head, and sector
+number of the sector where the error occurred.
+
+The flawed data is pending in the sector buffer.
+
+9.14 Read Verify Sector(s)
+
+This command is identical to the Read Sectors command, except that DRQ is
+never set, and no data is transferred to the host. See 10.3 for protocol.
+..When the command is accepted, the drive sets BSY.
+
+When the requested sectors have been verified, the drive clears BSY and
+generates an interrupt. Upon command completion, the Command Block Registers
+contain the cylinder, head, and sector number of the last sector verified.
+
+If an error occurs, the verify terminates at the sector where the error
+occurs. The Command Block Registers contain the cylinder, head, and sector
+number of the sector where the error occurred. The Sector Count Register shall
+contain the number of sectors not yet verified.
+
+9.15 Seek
+
+This command initiates a seek to the track and selects the head specified in
+the command block. The drive need not be formatted for a seek to execute
+properly. See 10.3 for protocol. The drive shall not set DSC=1 until the
+action of seeking has completed. The drive may return the interrupt before the
+seek is completed.
+
+If another command is issued to the drive while a seek is being executed, the
+drive sets BSY=1, waits for the seek to complete, and then begins execution of
+the command.
+
+..The Sector Number Register is used to translate between perceived and real
+..geometry.
+..
+9.16 Set Features
+
+This command is used by the host to establish the following parameters which
+affect the execution of certain drive features:
+
+ 44h Vendor unique length of ECC on Read Long/Write Long commands
+ 55h Disable read look-ahead feature
+ AAh Enable read look-ahead feature
+ BBh 4 bytes of ECC apply on Read Long/Write Long commands
+
+See 10.3 for protocol. If the value in the register is not supported or is
+invalid, the drive posts an Aborted Command error.
+
+At power on, or after a software or hardware reset, the default mode is read
+look-ahead enabled and 4 bytes of ECC.
+
+9.17 Set Multiple Mode
+
+This command enables the drive to perform Read and Write Multiple operations
+and establishes the block count for these commands. See 10.3 for protocol.
+
+The Sector Count Register is loaded with the number of sectors per block.
+Drives shall support block sizes of 2, 4, 8, and 16 sectors, if their buffer
+size is at least 8,192 bytes, and may also support other block sizes. Upon
+receipt of the command, the drive sets BSY=1 and checks the Sector Count
+Register.
+
+If the Sector Count Register contains a valid value and the block count is
+supported, the value is loaded for all subsequent Read Multiple and Write
+Multiple commands and execution of those commands is enabled. If a block count
+is not supported, an Aborted Command error is posted, and Read Multiple and
+Write Multiple commands are disabled.
+
+If the Sector Count Register contains 0 when the command is issued, Read and
+Write Multiple commands are disabled.
+
+At power on, or after a hardware or software reset, the default mode is Read
+and Write Multiple disabled.
+
+9.18 Sleep
+
+This command is the only way to cause the drive to enter Sleep Mode. The drive
+is spun down, and when it is stopped, BSY is cleared, an interrupt is
+generated, and the interface becomes inactive.
+
+The only way to recover from Sleep mode without a reset or power on, is for
+the host to issue a software reset.
+
+A drive shall not power on in Sleep Mode nor remain in Sleep Mode following a
+reset sequence. If the drive is already spun down, the spin down sequence is
+not executed.
+
+9.19 Standby
+
+This command causes the drive to enter the Standby Mode. See 10.3 for
+protocol. The drive may return the interrupt before the transition to Standby
+Mode is completed.
+
+If the drive is already spun down, the spin down sequence is not executed.
+
+If the Sector Count Register is non-zero then the automatic power down
+sequence shall be enabled and the timer will begin counting down when the
+drive returns to Idle mode. If the Sector Count Register is zero then the
+automatic power down sequence shall be disabled.
+
+9.20 Standby Immediate
+
+This command causes the drive to enter the Standby Mode. See 10.3 for
+protocol. The drive may return the interrupt before the transition to Standby
+Mode is completed.
+
+If the drive is already spun down, the spin down sequence is not executed.
+
+9.21 Write Buffer
+
+This command enables the host to overwrite the contents of the drive's sector
+buffer with any data pattern desired. See 10.2 for protocol.
+
+The Read Buffer and Write Buffer commands shall be synchronized within the
+drive such that sequential Write Buffer and Read Buffer commands access the
+same 512 bytes within the buffer.
+
+9.22 Write DMA
+
+This command executes in a similar manner to Write Sectors except for the
+following:
+
+ - the host initializes a slave-DMA channel prior to issuing the command
+ - data transfers are qualified by DMARQ and are performed by the slave-DMA
+ channel
+ - the drive issues only one interrupt per command to indicate that data
+ transfer has terminated and status is available.
+
+Any error encountered during Write DMA execution results in the termination of
+data transfer. The drive issues an interrupt to indicate that data transfer
+has terminated and status is available in the Error Register. The error
+posting is the same as that of the Write Sectors command.
+
+9.23 Write Multiple Command
+
+This command is similar to the Write Sectors command. The drive sets BSY
+within 400 nsec of accepting the command, and interrupts are not presented on
+each sector but on the transfer of a block which contains the number of
+sectors defined by Set Multiple.
+
+Command execution is identical to the Write Sectors operation except that the
+number of sectors defined by the Set Multiple command are transferred without
+intervening interrupts. DRQ qualification of the transfer is required only at
+the start of the data block, not on each sector.
+
+The block count of sectors to be transferred without intervening interrupts is
+programmed by the Set Multiple Mode command, which shall be executed prior to
+the Read Multiple command.
+
+When the Write Multiple command is issued, the Sector Count Register contains
+the number of sectors (not the number of blocks or the block count) requested.
+
+If the number of requested sectors is not evenly divisible by the block count,
+as many full blocks as possible are transferred, followed by a final, partial
+block transfer. The partial block transfer is for n sectors, where
+
+ n = (sector count) - modulo (block count)
+
+If the Write Multiple command is attempted before the Set Multiple Mode
+command has been executed or when Write Multiple commands are disabled, the
+Write Multiple operation shall be rejected with an aborted command error.
+
+Disk errors encountered during Write Multiple commands are posted after the
+attempted disk write of the block or partial block transferred. The Write
+command ends with the sector in error, even if it was in the middle of a
+block. Subsequent blocks are not transferred in the event of an error.
+Interrupts are generated when DRQ is set at the beginning of each block or
+partial block.
+
+..The Command Block Registers contain the cylinder, head, and sector number of
+..the sector where the error occurred and the Sector Count Register contains the
+..residual of sectors that need to be transferred for successful completion of
+..the command e.g. each block has 4 sectors, a request for 8 sectors is issued,
+..and an error occurs on the third sector. The Sector Count Register contains 6
+..and the address is that of the third sector.
+..
+The contents of the Command Block Registers following the transfer of a data
+block which had a sector in error are undefined. The host should retry the
+transfer as individual requests to obtain valid error information.
+
+9.24 Write Same
+
+This command executes in a similar manner to Write Sectors except that only
+one sector of data is transferred. The contents of the sector are written to
+the medium one or more times.
+
+NOTE: The Write Same command allows for initialization of part or all of the
+medium to the specified data with a single command.
+
+If the Features Register is 22h, the drive shall write that part of the medium
+specified by the sector count, sector number, cylinder and drive/head
+registers. If the Features Register contains DDh, the drive shall initialize
+all the user accessible medium. If the register contains a value other than
+22h or DDh, the command shall be rejected with an aborted command error.
+
+The drive issues an interrupt to indicate that the command is complete. Any
+error encountered during execution results in the termination of the write
+operation. Status is available in the Error Register if an error occurs. The
+error posting is the same as that of the Write Sectors command.
+
+9.25 Write Long
+
+This command is similar to the Write Sectors command except that it writes the
+data and the ECC bytes directly from the sector buffer; the drive does not
+generate the ECC bytes itself. Only single sector Write Long operations are
+supported.
+
+The transfer of the ECC bytes shall be 8-bits wide.
+
+9.26 Write Sector(s)
+
+This command writes from 1 to 256 sectors as specified in the Sector Count
+Register (a sector count of zero requests 256 sectors), beginning at the
+specified sector. See 10.1 for the DRQ, IRQ and BSY protocol on data
+transfers.
+
+..When this command is accepted, the drive sets DRQ and waits
+..for the host to fill the sector buffer with the data to be written. No
+..interrupt is generated to start the first buffer fill operation. Once the
+..buffer is full, the drive clears DRQ, sets BSY and begins command execution.
+..
+If the drive is not already on the desired track, an implied seek is
+performed. Once at the desired track, the drive searches for the appropriate
+ID field.
+
+If retries are disabled and two index pulses have occurred without error free
+reading of the requested ID, an ID Not Found error is posted.
+
+If retries are enabled, up to a vendor specific number of attempts may be made
+to read the requested ID before posting an error.
+
+If the ID is read correctly, the data loaded in the buffer is written to the
+data field of the sector, followed by the ECC bytes. Upon command completion,
+the Command Block Registers contain the cylinder, head, and sector number of
+the last sector written.
+
+If an error occurs during a write of more than one sector, writing terminates
+at the sector where the error occurs. The Command Block Registers contain the
+cylinder, head, and sector number of the sector where the error occurred. The
+host may then read the command block to determine what error has occurred, and
+on which sector.
+
+9.27 Write Verify
+
+This command is similar to the Write Sectors command, except that each sector
+is verified immediately after being written. The verify operation is a read
+without transfer and a check for data errors. Any errors encountered during
+the verify operation are posted. Multiple sector write verify commands write
+all the requested sectors and then verify all the requested sectors before
+generating the final interrupt.
+
diff --git a/sys/doc/ata/ata-apx b/sys/doc/ata/ata-apx
new file mode 100644
index 000000000000..cd8981c58eab
--- /dev/null
+++ b/sys/doc/ata/ata-apx
@@ -0,0 +1,426 @@
+Annex A: Diagnostic and Reset Considerations
+ (informative).
+
+This annex describes the following timing relationships during:
+
+ a) Power On and Hardware Resets
+ - One drive
+ - Two drives
+ b) Software Reset
+ - One drive
+ - Two drives
+ c) Diagnostic Command Execution
+ - One drive
+ - Two drives
+ - Two drives - Drive1 failed
+
+The timing assumes the following:
+
+ o DASP- is asserted by Drive1 and received by Drive0 at power-on or
+ hardware reset to indicate the presence of Drive1. At all other times it
+ is asserted by Drive0 and Drive1 to indicate when a drive is active.
+ o PDIAG- is asserted by Drive1 and detected by Drive0. It is used by
+ Drive1 to indicate to Drive0 that it has completed diagnostics and is
+ ready to accept commands from the Host (BSY bit is cleared). This does not
+ indicate that the drive is ready, only that it can accept commands. This
+ line may remain asserted until the next reset occurs or an Execute
+ Diagnostic command is received.
+ o Unless indicated otherwise, all times are relative to the event that
+ triggers the operation (RESET-, SRST=1, Execute Diagnostic Command).
+
+A.1 Power On and Hardware Resets
+
+A.1.1 Power On and Hardware Resets - One Drive
+
+ - Host asserts RESET- for a minimum of 25 usec.
+ - Drive0 sets BSY within 400 nsecs after RESET- is negated.
+ - Drive0 negates DASP- within 1 msec after RESET- negated.
+ - Drive0 performs hardware initialization
+ - Drive0 may revert to its default condition
+ - Drive0 waits 1 msec then samples for at least 450 msec for DASP- to be
+ asserted from Drive1.
+ - Drive0 clears BSY when ready to accept commands (within 31 seconds).
+
+A.1.2 Power On and Hardware Resets - Two Drives
+
+ - Host asserts RESET- for a minimum of 25 usec.
+ - Drive0 and Drive1 set BSY within 400 nsec after RESET- negated.
+ - DASP- is negated within 1 msec after RESET- is negated.
+
+A.1.2.1 Drive1
+
+ - Drive1 negates PDIAG- before asserting DASP-.
+ - Drive1 asserts DASP- within 400 msecs after RESET- (to show presence).
+ - Drive1 performs hardware initialization and executes its internal
+ diagnostics.
+ - Drive1 may revert to its default condition
+ - Drive1 posts diagnostic results to the Error Register
+ - Drive1 clears BSY when ready to accept commands.
+ - Drive1 asserts PDIAG- to indicate that it is ready to accept commands
+ (within 30 seconds from RESET-).
+ - Drive1 negates DASP- after the first command is received or negates DASP-
+ if no command is received within 30 seconds after RESET-.
+
+A.1.2.2 Drive0
+
+ - Drive0 performs hardware initialization and executes its internal
+ diagnostics.
+ - Drive0 may revert to its default condition
+ - Drive0 posts diagnostic results to the Error Register
+ - After 1 msec, Drive0 waits at least 450 msec for DASP- to be asserted
+ (from Drive1). If DASP- is not asserted, no Drive1 is present (see POWER-
+ ON RESET - One Driveoperation).
+ - Drive0 waits up to 31 seconds for Drive1 to assert PDIAG-. If PDIAG- is
+ not asserted, Drive0 sets Bit7=1 in the Error Register.
+ - Drive0 clears BSY when ready to accept commands (within 31 seconds).
+
+A.2 Software Reset
+
+A.2.1 Software Reset - One Drive
+
+ - Host sets SRST=1 in the Device Control Register.
+.. - Drive0 waits for SRST to be cleared by Host.
+.. - Drive0 sets BSY within 400 nsec after SRST=0.
+ - Drive0 sets BSY within 400 nsec after detecting that SRST=1.
+ - Drive0 performs hardware initialization and executes its internal
+ diagnostics.
+ - Drive0 may revert to its default condition.
+ - Drive0 posts diagnostic results to the Error Register.
+ - Drive0 clears BSY when ready to accept commands (within 31 seconds).
+
+A.2.2 Software Reset - Two Drives
+
+ - Host sets SRST=1 in the Device Control Register.
+.. - Drives wait for host to clear SRST.
+.. - Drive0 and Drive1 set BSY within 400 nsec after SRST=0.
+ - Drive0 and Drive1 set BSY within 400 nsec after detecting that SRST=1.
+ - Drive0 and Drive1 perform hardware initialization.
+ - Drive0 and Drive1 may revert to their default condition.
+
+A.2.2.1 Drive1
+
+ - Drive1 negates PDIAG- within 1 msec.
+ - Drive1 clears BSY when ready to accept commands.
+ - Drive1 asserts PDIAG- to indicate that it is ready to accept commands
+ (within 30 seconds).
+
+A.2.2.2 Drive0
+
+ - Drive0 waits up to 31 seconds for Drive1 to assert PDIAG-.
+ - Drive0 clears BSY when ready to accept commands (within 31 seconds).
+
+A.3 Diagnostic Command Execution
+
+A.3.1 Diagnostic Command Execution - One Drive(Passed)
+
+ - Drive0 sets BSY within 400 nsec after the Execute Diagnostic command was
+ received.
+ - Drive0 performs hardware initialization and internal diagnostics.
+ - Drive0 resets Command Block registers to default condition.
+ - Drive0 posts diagnostic results to the Error Register
+ - Drive0 clears BSY when ready to accept commands (within 6 seconds).
+
+A.3.2 Diagnostic Command - Two Drives (Passed)
+
+ - Drive0 and Drive1 set BSY within 400 nsec after the Execute Diagnostic
+ command was received.
+
+A.3.2.1 Drive1
+
+ - Drive1 negates PDIAG- within 1 msec after command received.
+ - Drive1 performs hardware initialization and internal diagnostics.
+ - Drive1 resets the Command Block registers to their default condition.
+ - Drive1 posts diagnostic results to the Error Register
+ - Drive1 clears BSY when ready to accept commands.
+ - Drive1 asserts PDIAG- to indicate that it is ready to accept commands
+ (within 5 seconds).
+
+A.3.2.2 Drive0
+
+ - Drive0 performs hardware initialization and internal diagnostics.
+ - Drive0 resets the Command Block registers to their default condition.
+ - Drive0 waits up to <5 seconds for Drive1 to assert PDIAG-.
+ - Drive0 posts diagnostic results to the Error Register
+ - Drive0 clears BSY when ready to accept commands (within 6 seconds).
+
+A.3.3 Diagnostic Command Execution - One Drive(Failed)
+
+ - Drive0 sets BSY within 400 nsec after Diagnostic command received.
+ - Drive0 performs hardware initialization and internal diagnostics.
+ - Drive0 resets Command Block registers to default condition.
+ - Drive0 posts a Diagnostic Code to the Error Register indicating a failure.
+ - Drive0 clears BSY when ready to accept commands (within 6 seconds)
+
+A.3.4 Diagnostic Command Execution - Two Drives (Drive1 Failed)
+
+ - Drive0 and Drive1 set BSY within 400 nsec after Diagnostic command
+ received.
+
+A.3.4.1 Drive1
+
+ - Drive1 negates PDIAG- within 1 msec after command received.
+ - Drive1 performs hardware initialization and internal diagnostics.
+ - Drive1 resets the Command Block registers to their default condition.
+ - Drive1 posts a Diagnostic Code to the Error Register indicating failure.
+ - Drive1 clears BSY.
+ - Drive1 does not assert PDIAG-, indicating that it failed diagnostics.
+
+A.3.4.2 Drive0
+
+ - Drive0 performs hardware initialization and internal diagnostics.
+ - Drive0 resets the Command Block registers to their default condition.
+ - Drive0 waits 6 seconds for Drive1 to assert PDIAG- but PDIAG- is not
+ asserted by Drive1.
+ - Drive0 posts a Diagnostic Code to the Error Register setting Bit7=1 to
+ indicate that Drive1 failed diagnostics.
+ - Drive0 clears BSY when ready to accept commands (within 6 seconds).
+
+..rm102
+ NOTE: The 6 seconds referenced above is a host-oriented value.
+
+Annex B: Diagnostic and Reset Considerations
+ (informative).
+
+B.1 Power on and hardware reset (RESET-)
+
+DASP- is read by Drive0 to determine if Drive1 is present. If Drive1 is
+present Drive0 will read PDIAG- to determine when it is valid to clear BSY
+and whether Drive1 has powered on or reset without error, otherwise Drive0
+clears BSY whenever it is ready to accept commands. Drive 0 may assert DASP-
+to indicate drive activity.
+
+B.2 Software reset
+
+If Drive1 is present Drive0 will read PDIAG- to determine when it is valid
+to clear BSY and whether Drive1 has reset without any errors, otherwise
+Drive 0 will simply reset and clear BSY. DASP- is asserted by Drive0 (and
+Drive1 if it is present) in order to indicate drive active.
+
+B.3 DriveDiagnostic Command
+
+If Drive1 is present, Drive0 will read PDIAG- to determine when it is valid
+to clear BSY and if Drive1 passed or failed the Execute DriveDiagnostic
+command, otherwise Drive0 will simply execute its diagnostics and then clear
+BSY. DASP- is asserted by Drive0 (and Drive1 if it is present) in order to
+indicate the drive is active.
+
+B.4 Truth Table
+
+In all the above cases: Power on, RESET-, software reset, and the Execute
+DriveDiagnostics command the Drive0 Error Register is calculated as follows:
+
+ Drive1 PDIAG- Drive0 Error
+ Present? Asserted? Passed Register
+
+ Yes Yes Yes 01h
+ Yes Yes No 0xh
+ Yes No Yes 81h
+ Yes No No 8xh
+ No (not read) Yes 01h
+ No (not read) No 0xh
+
+Where x indicates the appropriate Diagnostic Code for the Power on, RESET-,
+software reset, or drivediagnostics error.
+
+B.5 Power On or Hardware Reset Algorithm
+
+ 1) Power on or hardware reset
+ 2) The hardware should automatically do the following:
+ a) Set up the hardware to post both Drive0 and Drive1 status
+ b) Set the Drive0 Status Register to 80h (set BSY and clear
+ all the other status bits)
+ c) Set the Drive1 Status Register to 80h (set BSY and clear all
+ the other status bits)
+ 3) Read the single Drive0/Drive1 jumper and note its state
+ 4) Perform any remaining time critical hardware initialization including
+ starting the spin up of the disk if needed
+ 5) If Drive1
+ a) Negate the PDIAG- signal
+ b) Set up PDIAG- as an output
+ c) Assert the DASP- output
+ d) Set up DASP- as an output if necessary
+ e) Set up the hardware so it posts Drive1 status only and
+ continue to post 80h for Drive1 status
+ NOTE: all this must happen within 400 msec after power on or RESET-
+ If Drive0
+ a) Set up PDIAG- as an input
+ b) Release DASP- and set up DASP- as an input
+ c) Test DASP- for 450 msec or until DASP- is asserted by Drive1
+ d) If DASP- is asserted within 450 msec
+ i) Note that Drive1 is present
+ ii) Set up the hardware so it posts Drive0 status only
+ and continue to post 80h for the Drive0 status
+ If DASP- is not asserted within 450 msec
+ i) note that Drive1 is not present
+ e) Assert DASP- to indicate drive activity
+ 6) Complete all the hardware initialization needed to get the drive ready,
+ including:
+ a) Set the Sector Count Register to 01h
+ b) Set the Sector Number Register to 01h
+ c) Set the Cylinder Low Register to 00h
+ d) Set the Cylinder High Register to 00h
+ e) Set the Drive/Head Register to 00h
+ 7) If Drive1 and power on, or RESET- is valid
+ a) Set the Error Register to Diagnostic Code 01h
+ b) Set the Drive1 Status Register to 00h
+ c) Assert PDIAG-
+ NOTE: All this must happen within 5 seconds of power on or the
+ negation of RESET-
+ If Drive1 and power on or RESET- bad
+ a) Set the Error Register to the appropriate Diagnostic Code
+ b) Set the Drive1 Status Register to 00h
+ NOTE: All this must happen within 5 seconds of power on or the
+ negation of RESET-
+ If Drive0, power on or RESET- valid, and a Drive1 is present
+ a) Test PDIAG- for 6 seconds or until PDIAG- is asserted by Drive1
+ b) If PDIAG- is asserted within 6 seconds
+ i) Set the Error Register to Diagnostic Code 01h
+ c) If PDIAG- is not asserted within 6 seconds
+ i) Set the Error Register to 81h
+ d) Set the Drive0 Status Register to 00h
+ If Drive0, power on or RESET- bad, and a Drive1 is present
+ a) Test PDIAG- for 6 seconds or until PDIAG- is asserted by
+ Drive1
+ b) If PDIAG- is asserted within 6 seconds
+ i) Set the Error Register to the appropriate Diagnostic Code
+ c) If PDIAG- is not asserted within 6 seconds
+ i) Set the Error Register to 80h + the appropriate code
+ d) Set the Drive0 Status Register to 00h
+ If Drive0, power on or RESET- valid, and no Drive1 is present
+ a) Set the Error Register to Diagnostic Code 01h
+ b) Set the Drive1 Status Register to 00h
+ c) Set the Drive0 Status Register to 00h
+ If Drive0, power on or RESET- bad, and no Drive1 is present
+ a) Set the Error Register to the appropriate Diagnostic Code
+ b) Set the Drive1 Status Register to 00h
+ c) Set the Drive0 Status Register to 00h
+ 8) Finish spin up if needed
+ 9) If Drive1
+ a) Set the Drive1 Status Register to 50h
+ b) Negate DASP- if a command is not received within 30 seconds
+ If Drive0 and a Drive1 is present
+ a) Set the Drive0 Status Register to 50h
+ b) Negate DASP-
+ If Drive0 and no Drive1 is present
+ a) Leave the Drive1 Status Register 00h
+ b) Set the Drive0 Status Register to 50h
+ c) Negate DASP-
+
+B.6 Software Reset Algorithm
+
+ 1) The software reset bit is set
+ 2) If Drive1
+ a) The hardware should set BUSY in the Drive1 Status Register
+ b) Negate the PDIAG- signal
+ NOTE: this must happen within 1 msec of the software reset
+ If Drive0 and Drive1 is present
+ a) The hardware should set BUSY in the Drive0 Status Register
+ If Drive0 and there is no Drive1 the hardware should:
+ a) Set BUSY in the Drive0 Status Register
+ b) Set the Drive1 Status Register to 80h
+ 3) Assert DASP-
+ 4) Finish all the hardware initialization needed to place the drive in reset
+ 5) Wait for the software reset bit to clear
+ 6) Finish all hardware initialization needed to get the drive ready
+ to receive any type of command from the host including:
+ a) Set the Sector Count Register to 01h
+ b) Set the Sector Number Register to 01h
+ c) Set the Cylinder Low Register to 00h
+ d) Set the Cylinder High Register to 00h
+ e) Set the Drive/Head Register to 00h
+ 7) If Drive1 and reset valid
+ a) Set the Error Register to Diagnostic Code 01h
+ b) Set the Drive1 Status Register to 50h
+ c) Assert PDIAG-
+ NOTE: All this must happen within 5 seconds of the clearing of
+ the software reset bit
+ If Drive1 and reset bad
+ a) Set the Error Register to the appropriate Diagnostic Code
+ b) Set the Drive1 Status Register to 50h
+ NOTE: All this must happen within 5 seconds of the clearing of
+ the software reset bit
+ If Drive0, reset valid, and a Drive1 is present
+ a) Test PDIAG- for 6 seconds or until PDIAG- is asserted by
+ Drive1
+ b) If PDIAG- is asserted within 6 seconds
+ i) Set the Error Register to Diagnostic Code 01h
+ c) If PDIAG- is not asserted within 6 seconds
+ i) Set the Error Register to 81h
+ d) Set the Drive0 Status Register to 50h
+ If Drive0, reset bad, and a Drive1 is present
+ a) Test PDIAG- for 31 seconds or until PDIAG- is asserted by
+ Drive1
+ b) If PDIAG- is asserted within 31 seconds
+ i) Set the Error Register to the appropriate Diagnostic Code
+ c) If PDIAG- is not asserted within 31 seconds
+ i) Set the Error Register to 80h + the appropriate code
+ d) Set the Drive0 Status Register to 50h
+ If Drive0, reset valid, and no Drive1 is present
+ a) Set the Error Register to Diagnostic Code 01h
+ b) Set the Drive1 Status Register to 00h
+ c) Set the Drive0 Status Register to 50h
+ If Drive0, reset bad, and no Drive1 is present
+ a) Set the Error Register to the appropriate Diagnostic Code
+ b) Set the Drive1 Status Register to 00h
+ c) Set the Drive0 Status Register to 50h
+
+B.7 Diagnostic Command Algorithm
+
+ 1) The diagnostics command is received
+ 2) If Drive1
+ a) The hardware should set BUSY in the Drive1 Status Register
+ b) Negate the PDIAG- signal
+ NOTE: this must happen within 1 msec after command acceptance
+ If Drive0 and Drive1 is present
+ a) The hardware should set BUSY in the Drive0 Status Register
+ If Drive0 and there is no Drive1 the hardware should
+ a) Set BUSY in the Drive0 Status Register
+ b) Set BUSY in the Drive1 Status Register
+ 3) Assert DASP-
+ 4) Perform all the drive diagnostics and note their results
+ 5) Finish all the hardware initialization needed to get the drive ready
+ to receive any type of command from the host including:
+ a) Set the Sector Count Register to 01h
+ b) Set the Sector Number Register to 01h
+ c) Set the Cylinder Low Register to 00h
+ d) Set the Cylinder High Register to 00h
+ e) Set the Drive/Head Register to 00h
+ 6) If Drive1 and passed
+ a) Set the Error Register to Diagnostic Code 01h
+ b) Set the Drive1 status to 50h
+ c) Assert PDIAG-
+ NOTE: All this must happen within 5 seconds of the acceptance
+ of the diagnostic command
+ If Drive1 and did not pass
+ a) Set the Error Register to the appropriate Diagnostic Code
+ b) Set the Drive1 status to 50h
+ NOTE: All this must happen within 5 seconds of the acceptance
+ of the diagnostic command
+ If Drive0, passed, and a Drive1 is present
+ a) Test PDIAG- for 6 seconds or until PDIAG- is asserted by
+ Drive1
+ b) If PDIAG- is asserted within 6 seconds
+ i) Set the Error Register to Diagnostic Code 01h
+ c) If PDIAG- is not asserted within 6 seconds
+ i) Set the Error Register to 81h
+ d) Set the Drive0 status to 50h
+ e) Issue interrupt to the host
+ If Drive0, did not pass, and a Drive1 is present
+ a) Test PDIAG- for 6 seconds or until PDIAG- is asserted by Drive1
+ b) If PDIAG- is asserted within 6 seconds
+ i) Set the Error Register to the appropriate Diagnostic Code
+ c) If PDIAG- is not asserted within seconds
+ i) Set the Error Register to 80h + the appropriate code
+ d) Set the Drive0 Status Register to 50h
+ e) Issue interrupt to the host
+ If Drive0, passed, and no Drive1 is present
+ a) Set the Error Register to Diagnostic Code 01h
+ b) Set the Drive1 Status Register to 00h
+ c) Set the Drive0 Status Register to 50h
+ d) Issue interrupt to the host
+ If Drive0, did not pass, and no Drive1 is present
+ a) Set the Error Register to the appropriate Diagnostic Code
+ b) Set the Drive1 Status Register to 00h
+ c) Set the Drive0 Status Register to 50h
+ d) Issue interrupt to the host
+
diff --git a/sys/doc/ata/ata-prt b/sys/doc/ata/ata-prt
new file mode 100644
index 000000000000..546510bcf6a0
--- /dev/null
+++ b/sys/doc/ata/ata-prt
@@ -0,0 +1,174 @@
+Copies of this proposal may be purchased from: CAM/89-002
+CAM Committee 408-867-6630
+14426 Black Walnut Ct, Saratoga CA 95070
+
+ working document of the
+ CAM (Common Access Method Committee)
+
+ draft proposal
+
+ ATA (AT Attachment)
+
+ Rev 2.1 June 11, 1990
+
+ABSTRACT: This standard defines mechanical, electrical, and functional
+requirements for attaching small computers employing an AT Bus with
+intelligent peripheral devices. The resulting interface provides a common
+interface specification for systems manufacturers, system integrators,
+controller manufacturers, and suppliers of intelligent disk drives.
+
+
+CAUTION: This is a preliminary draft of the proposed standard. It is subject
+to change without notice, at the sole discretion of the CAM Committee. It is
+likely that some sections may change significantly, and most sections will
+change to some extent in the course of further development of this draft
+standard. This draft is distributed solely for the purpose of review and
+comment, and it should not be used as a design document without assuming the
+risk of an early implementation.
+
+COPYRIGHT NOTICE: This draft standard is based upon product specifications of
+contributing members, these documents may be copyrighted by the individual
+companies. This draft standard may be reproduced without further permission,
+for the purpose of review and comment or for the purpose of including in an
+appropriate product specification provided the risk of early implementation is
+assumed. All other rights are reserved.
+
+
+POINTS OF CONTACT:
+
+ I. Dal Allan (CAM Committee Chairman)
+ ENDL
+ 14426 Black Walnut Court
+ Saratoga, CA 95070
+ (408) 867-6630
+
+
+
+If changes from the prior revision of this document are included, they may
+be identified by:
+
+ - change bars at the side of each paragraph or
+ - printed in bold or
+ - printed in italics or
+ - underscored in the text.
+
+The specific technique used will depend on the software used to detect the
+differences and the printer used to print the document.
+
+In the event that deleted text is identified by an overstrike, the Table of
+Contents will not be accurate.
+
+An electronic copy of this document is available from the CAM Committee
+(408-867-6630).
+
+This document has been prepared according to the style guide of the ISO
+(International Organization of Standards).
+
+
+If this document was printed in a 2-up form directly from the printer, NOTEs
+had to be adjusted to fit into a half-page, which may have resulted in an
+imperfect representation of the format within the NOTE. This is most likely
+to occur if a series of NOTEs are mixed in without any line separation.
+
+
+
+
+
+
+
+
+.. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+.. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+.. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+..
+.. Please look this revision over carefully. Larry and I have reviewed
+.. this document for editorial consistency.
+.. This is close to the final step in having a standards document.
+.. Please pay special attention to references, because any renumbering
+.. may mean a few boo-boos crept in. 
+..
+.. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+.. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+.. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+..
+.. EXPOSITORY REMARKS
+..
+..
+..
+..
+..
+..
+..
+..
+..I S O
+..
+..INTERNATIONAL ORGANIZATION FOR STANDARDIZATION
+..
+..
+..
+..
+..
+..
+.. Information Processing Systems --
+..
+.. Common Access Method AT Attachment
+..
+..
+..
+..
+..
+..
+..
+.. +-----------------------------------------+
+.. | +-------------------------------------+ |
+.. | | | |
+.. | | ISO 10***:198x | |
+.. | | | |
+.. | | | |
+.. | | | |
+.. | +-------------------------------------+ |
+.. +-----------------------------------------+
+..
+..
+..
+..
+..
+..
+..
+..
+.. Technical Editor: I. Dal Allan
+.. ENDL
+.. 14426 Black Walnut Court
+.. Saratoga
+.. CA 95070
+..
+.. Ph: 408-867-6630
+.. Fx: 408-867-2115
+.. Tx: 650-250-1752
+..
+..
+..foCommon Access Method AT Attachment
+..dm Merging ata-1 .dif
+..fi ata-1 .dif
+..dm Merging ata-2 .dif
+..fi ata-2 .dif
+..dm Merging ata-3 .dif
+..fi ata-3 .dif
+..dm Merging ata-4 .dif
+..fi ata-4 .dif
+..dm Merging ata-5 .dif
+..fi ata-5 .dif
+..dm Merging ata-6 .dif
+..fi ata-6 .dif
+..dm Merging ata-7 .dif
+..fi ata-7 .dif
+..dm Merging ata-8 .dif
+..fi ata-8 .dif
+..dm Merging ata-9 .dif
+..fi ata-9 .dif
+..dm Merging ata-10 .dif
+..fi ata-10 .dif
+..dm Merging ata-11 .dif
+..fi ata-11 .dif
+..dm Merging ata-apx .dif
+..fi ata-apx .dif
diff --git a/sys/doc/ata/ata-toc b/sys/doc/ata/ata-toc
new file mode 100644
index 000000000000..1866f7677596
--- /dev/null
+++ b/sys/doc/ata/ata-toc
@@ -0,0 +1,159 @@
+ TABLE OF CONTENTS
+
+ 1. Scope 1
+ 1.1 Description of Clauses 1
+
+ 2. References 1
+ 3. General Description 1
+ 3.1 Structure 2
+
+ 4. Definitions and Conventions 2
+ 4.1 Definitions 2
+ 4.2 Conventions 2
+
+ 5. Interface Cabling Requirements 3
+ 5.1 Configuration 3
+ 5.2 Addressing Considerations 4
+ 5.3 DC Cable and Connector 4
+ 5.3.1 4-Pin Power 4
+ 5.3.2 3-Pin Power 5
+ 5.3.3 Device Grounding 5
+
+ 5.4 I/O Connector 5
+ 5.5 I/O Cable 6
+
+ 6. Physical Interface 6
+ 6.1 Signal Conventions 6
+ 6.2 Signal Summary 7
+ 6.3 Signal Descriptions 9
+ 6.3.1 CS1FX- (Drive chip Select 0) 9
+ 6.3.2 CS3FX- (Drive chip Select 1) 9
+ 6.3.3 DA0-2 (Drive Address Bus) 10
+ 6.3.4 DASP- (Drive Active/Drive 1 Present) 10
+ 6.3.5 DD0-DD15 (Drive Data Bus) 10
+ 6.3.6 DIOR- (Drive I/O Read) 10
+ 6.3.7 DIOW- (Drive I/O Write) 10
+ 6.3.8 DMACK- (DMA Acknowledge) (Optional) 10
+ 6.3.9 DMARQ (DMA Request) (Optional) 11
+ 6.3.10 INTRQ (Drive Interrupt) 11
+ 6.3.11 IOCS16- (Drive 16-bit I/O) 11
+ 6.3.12 IORDY (I/O Channel Ready) (Optional) 12
+ 6.3.13 PDIAG- (Passed Diagnostics) 12
+ 6.3.14 RESET- (Drive Reset) 12
+ 6.3.15 SPSYNC (Spindle Synchronization) (Optional) 12
+
+ 7. Logical Interface 13
+ 7.1 General 13
+ 7.1.1 Bit Conventions 13
+ 7.1.2 Environment 13
+
+ 7.2 I/O Register Descriptions 14
+ 7.2.1 Alternate Status Register 14
+ 7.2.2 Command Register 15
+ 7.2.3 Cylinder High Register 15
+ 7.2.4 Cylinder Low Register 15
+ 7.2.5 Data Register 15
+ 7.2.6 Device Control Register 15
+ 7.2.7 Drive Address Register 16
+ 7.2.8 Drive/Head Register 16
+ 7.2.9 Error Register 16
+ 7.2.10 Features Register 17
+ 7.2.11 Sector Count Register 17
+ 7.2.12 Sector Number Register 17
+ 7.2.13 Status Register 18
+
+ 8. Programming Requirements 19
+ 8.1 Reset Response 19
+ 8.2 Translate Mode 19
+ 8.3 Power Conditions 20
+ 8.4 Error Posting 20
+
+ 9. Command Descriptions 21
+ 9.1 Check Power Mode 24
+ 9.2 Execute Drive Diagnostic 24
+ 9.3 Format Track 24
+ 9.4 Identify Drive 25
+ 9.4.1 Number of fixed cylinders 26
+ 9.4.2 Number of heads 27
+ 9.4.3 Number of unformatted bytes per track 27
+ 9.4.4 Number of unformatted bytes per sector 27
+ 9.4.5 Number of sectors per track 27
+ 9.4.6 Serial Number 27
+ 9.4.7 Buffer Type 27
+ 9.4.8 Firmware Revision 27
+ 9.4.9 Model Number 27
+ 9.4.10 PIO data transfer cycle timing mode 27
+ 9.4.11 DMA data transfer cycle timing mode 28
+
+ 9.5 Idle 28
+ 9.6 Idle Immediate 28
+ 9.7 Initialize Drive Parameters 28
+ 9.8 Recalibrate 28
+ 9.9 Read Buffer 28
+ 9.10 Read DMA 29
+ 9.11 Read Long 29
+ 9.12 Read Multiple Command 29
+ 9.13 Read Sector(s) 30
+ 9.14 Read Verify Sector(s) 30
+ 9.15 Seek 31
+ 9.16 Set Features 31
+ 9.17 Set Multiple Mode 31
+ 9.18 Sleep 32
+ 9.19 Standby 32
+ 9.20 Standby Immediate 32
+ 9.21 Write Buffer 32
+ 9.22 Write DMA 32
+ 9.23 Write Multiple Command 33
+ 9.24 Write Same 33
+ 9.25 Write Long 34
+ 9.26 Write Sector(s) 34
+ 9.27 Write Verify 34
+
+ 10. Protocol Overview 35
+ 10.1 PIO Data In Commands 35
+ 10.1.1 PIO Read Command 35
+ 10.1.2 PIO Read Aborted Command 36
+
+ 10.2 PIO Data Out Commands 36
+ 10.2.1 PIO Write Command 36
+ 10.2.2 PIO Write Aborted Command 37
+
+ 10.3 Non-Data Commands 37
+ 10.4 Miscellaneous Commands 37
+ 10.5 DMA Data Transfer Commands (Optional) 37
+ 10.5.1 Normal DMA Transfer 38
+ 10.5.2 Aborted DMA Transfer 38
+ 10.5.3 Aborted DMA Command 38
+
+ 11. Timing 39
+ 11.1 Deskewing 39
+ 11.2 Symbols 39
+ 11.3 Terms 39
+ 11.4 Data Transfers 40
+ 11.5 Power On and Hard Reset 42
+
+ FIGURES
+
+ FIGURE 5-1: ATA INTERFACE TO EMBEDDED BUS PERIPHERALS 3
+ FIGURE 5-2: HOST BUS ADAPTER AND PERIPHERAL DEVICES 4
+ FIGURE 5-3: ATA INTERFACE TO CONTROLLER AND PERIPHERAL DEVICES 4
+ FIGURE 5-4: 40-PIN CONNECTOR MOUNTING 6
+ FIGURE 11-1: PIO DATA TRANSFER TO/FROM DRIVE 40
+ FIGURE 11-2: IORDY TIMING REQUIRMENTS 41
+ FIGURE 11-3: DMA DATA TRANSFER 41
+ FIGURE 11-4 RESET SEQUENCE 42
+
+ TABLES
+
+ TABLE 5-1: DC INTERFACE 5
+ TABLE 5-2: DC INTERFACE 5
+ TABLE 5-3: CABLE PARAMETERS 6
+ TABLE 6-1: INTERFACE SIGNALS 8
+ TABLE 6-2: INTERFACE SIGNALS DESCRIPTION 9
+ TABLE 7-1: I/O PORT FUNCTIONS/SELECTION ADDRESSES 14
+ TABLE 8-1: POWER CONDITIONS 20
+ TABLE 8-2: REGISTER CONTENTS 21
+ TABLE 9-1: COMMAND CODES AND PARAMETERS 23
+ TABLE 9-2: DIAGNOSTIC CODES 24
+
+