Title: ATA/ATAPI-7 flow control

Looking through volume-3, it's clear that HOLD/HOLDA are used for flow control. There are examples where the transmitter buffer is temporarily empty and the transmitter "fills" with HOLD primitives. But the more compelling need for flow control is when the receiver can't drain the Rx buffer fast enough to keep up with the line-rate. It is stated that the receiver can tell the transmitter to stop transmitting by sending a HOLD on the back-channel, but I cannot find any examples or descriptions of the precise sequence.

1 - If the receiver sends a HOLD on the back-channel, what does the transmitter send once it recognizes the HOLD, HOLDA or HOLD?

2 - How does the receiver, after draining some or all of it's receive buffer, indicate the transmitter may resume data transmission? R_RDY? R_IP?

It seems to me R_IP is generally a response to receiving valid data, so I'm not sure the intent is that it be used to indicate a readyness to receive more data. There is a diagram in SAS-1.1, though, which shows R_IP used for that purpose. To me it would seem more logical to for the receiver to send R_RDY when it's ready to receive more data, but I don't see that specified anywhere in ATA/ATAPI-7v3.

Does anyone have more insight on how this works? Does the standard need more clarification on this point?

Thanks,
Bob Sheffield

Reply via email to