This message is from the T13 list server.

Normally - - -
The size of the DRQ data block is 512 bytes UNLESS

if ATAPI
      then the "block count' registers determine the MAXIMUM
            DRQ block size

if not ATAPI
      then the 'set multiple' size trumps the default 512 byte size.

(large size blocks may alter this simple view)

Thank You !!!
-----------------------------------------------------------------
Jim Hatfield
Seagate Technology LLC
   e-mail:  [EMAIL PROTECTED]
   s-mail:  389 Disc Drive;  Longmont, CO 80503 USA
   voice:  720-684-2120
   fax....:  720-684-2711
==========================================


                                                                           
             "Alexander Krebs"                                             
             <alexander.krebs@                                             
             amd.com>                                                   To 
             Sent by:                  [email protected]                       
             [EMAIL PROTECTED]                                          cc 
             rg                                                            
             No Phone Info                                         Subject 
             Available                 RE: [t13] DRQ data block definition 
                                                                           
                                                                           
             07/06/2005 08:50                                              
             AM                                                            
                                                                           
                                                                           
             Please respond to                                             
             "Alexander Krebs"                                             
             <alexander.krebs@                                             
                 amd.com>                                                  
                                                                           
                                                                           




This message is from the T13 list server.


Mark, Curtis, all,

The original question came up in a discussion about correct PATA
emulation of a SATA host controller.

Let me give an example. For simplicity, let me make some assumptions
just for the example:
- host is a PC using legacy software not aware of SATA
- host software communicates through the task file registers with the
  device
- software uses interrupts to wait on BSY/DRQ changes
- interrupt generation is enabled in device (nIEN == 0)
- both host and device use a sector size of 512 bytes
- software wants to transfer 2 sectors from the device in PIO mode
  using the READ SECTORS command

Regardless of the HBA/device combination being PATA or SATA I would
expect the following sequence:

 1 Host software programs the task file and finally writes the READ
   SECTORS command to the command register
 2 Device sets BSY = 1, and host software waits for the first DRQ data
   block being ready for transfer (interrupt)
 3 After some time, device sets BSY = 0 and DRQ = 1 and triggers
   interrupt
 4 Host sees interrupt, reads status register: BSY == 0 and DRQ == 1
 5 Host reads 512 bytes (first DRQ data block) from data register
 6 Device sets BSY = 1, and host software waits for the second DRQ
   data block being ready for transfer (interrupt)
 7 After some time, device sets BSY = 0 and DRQ = 1 and triggers
   interrupt
 8 Host sees interrupt, reads status register: BSY == 0 and DRQ == 1
 9 Host reads 512 bytes (second DRQ data block) from data register
10 Device sets BSY = 0 and DRQ = 0

Now the issue: I have been told that in SATA the device is allowed to
answer the above READ SECTORS command (Register FIS Host to Device)
with a PIO Setup FIS with a transfer count of 1024 and a Data FIS
Device to Host with 1024 bytes data payload. Everything in the above
example would work fine until 6. At this point the host software
assumes the first DRQ data block is done and waits for the next
interrupt. The device though, obviously assumes a DRQ data block of 2
sectors and
a) is stuck trying to send the rest of the Data FIS in case the host
   FIFO is too small.
b) thinks the transfer is finished in case the host FIFO could absorb
   the whole Data FIS.
Anyway, the host software will wait forever for the next interrupt
which will not occur because the device will not send another PIO
Setup FIS.

And this is all because host and device did not agree on the size of
a DRQ data block.

If the DRQ data block definition was still the one that it was in
ATA/ATAPI-6 r3b, a host and a device complying to the spec would
agree on the DRQ data block and the SATA device would be forced to
send two pairs of PIO Setup FIS/Data FIS transferring one sector each.

Note that it does not matter whether the sector size is 512 bytes or
not. It only matters that host and device agree on the DRQ data block
size being one sector for a READ SECTORS command.

No?

Regards,
Alex.

> Because on serial ATA a data block may be more than 512 bytes. Also
that definition is chock full of parallel specific terminology. All
the information is there, it's just moved to specific areas. Those
words in IDENTIFY DEVICE are still fully described.
>
> ________________________________
>
> From: [EMAIL PROTECTED] on behalf of Alexander Krebs
> Sent: Tue 7/5/2005 2:17 AM
> To: [email protected]
> Subject: [t13] DRQ data block definition
>
>
>
> This message is from the T13 list server.
>
>
> Hi all,
>
> Does anybody know why the definition of the term "DRQ data block"
> changed from
>
> ATA/ATAPI-7, vol 1, rev 3c
> 3.1.42 DRQ data block: This term describes a unit of data words
transferred during a single assertion of DRQ when using PIO data
transfer. A data block is transferred between the host and the device
as a complete unit. For all PIO data transfer commands except READ
MULTIPLE, WRITE MULTIPLE, and PACKET, a DRQ data block is one sector,
512 bytes. For READ MULTIPLE and WRITE MULTIPLE commands the DRQ data
block is the number of sectors indicated in word 59 of the IDENTIFY
DEVICE response. For PACKET command the DRQ data block for transfer of
the command packet is the number of bytes indicated in word 0 of the
IDENTIFY PACKET DEVICE response.
>
> to
>
> ATA/ATAPI-7, vol 1, rev 3d
> 3.1.44 DRQ data block: This term describes a unit of data words
transferred during a single assertion of DRQ when using PIO data
transfer.
>
> ?
>
> Given the lost sentences in ATA/ATAPI-7, rev 3d, how shall host and
> device determine the exact size of a DRQ data block? Since both host
> and device need to agree on the size of a DRQ data block, this is an
> essential definition. Did this information move somewhere else?
>
> Thanks,
> Alex.
>
>
>
>




Reply via email to