Though it may be too late to raise a concern, I have a concern about
the "residual" calculation in the target.
When the target completes the ORB by storing a status block, the
target calculates the "residual" value by subtracting actual
transferred size from the buffer size (in case that some data has
been transferred). The target needs to know the buffer size before
completing the ORB. The target needs to read entire page table
(especially in unrestricted page table case) to know the buffer size.
In the I2T (initiator to target) transfer case, the target usually
has knowledge of the buffer size after finishing data transfer
because the target processes entire buffer except for a few
exceptional case.
On the other hand, in the T2I case, the target may not always be
aware of the buffer size just after finishing data transfer because
it is not exceptional and likely happens to store the data to the
buffer in part. In this case, the target needs to read rests of the
page table, which is not necessary for data transfer, solely to know
the buffer size and calculate a residual.
One of the benefit of having this type of residual would be to make
the field value zero when the entire buffer is processed, and to
eliminate to send several quadlets of the status block at successful
completion, but the PPDT device won't realize this benefit because
the target always stores full status block.
Thus, I think it will be better to employ actual transferred bytes
rather than to employ the residual because target does not require
extra transactions.
How do others think?
Regards,
Akihiro Shimura
-- Akihiro Shimura (shimura@pure.cpdc.canon.co.jp) Office Imaging Products Development Center 3 CANON INC.