Data transfer information is used to describe the five types data movement
operations for one work block as defined by ALF_BUF_TYPE_T.
The ALF implementation on Cell BE has the following internal constraints:
- Data transfer information for a single work block can consist of up to
eight data transfer lists for each type of transfer as defined by ALF_BUF_TYPE_T.
For programmers the limitation is that alf_wb_dtl_begin can
only be called no more than eight times for each type of ALF_BUF_TYPE_T for
each work block. An ALF_ERR_NOBUFS is returned in this case.
Due to limitation items 2, 3 and 4 in this list, it is possible that the
limitation can be reached without explicitly calling alf_wb_dtl_begin by
eight times.
- Each data transfer list consists of up to 2048 data transfer entries.
The alf_wb_dtl_entry_add call
automatically creates a new data transfer list of the same type when this
limitation is reached. Limitation item 1 in this list still applies in this
case.
- Each entry can describe up to 16 KB of data transfer between the contiguous
area in host memory and accelerator memory. The alf_wb_dtl_entry_add call
automatically breaks an entry larger than 16 KB to multiple entries. Limitation
items 1 and 2 in this list still apply in this case.
- All of the entries within the same data transfer list share the same high
32 bits effective address. This means that when a data transfer entry goes
across 4 GB address boundary, it must be broken up and put into two different
data transfer lists. In addition, two succeeding entries use different high
32 bit addresses, they need to be put into two lists. The alf_wb_dtl_entry_add call
automatically creates a new data transfer list in the above two situations.
Limitation items 1, 2 and 3 in this list still apply in this case.
- The local store area described by each entry within the same data transfer
list must be contiguous. You can use the local buffer offset parameter "offset_to_accel_buf"
to address with in the local buffer when alf_wb_dtl_begin is
called to create a new list.
- The transfer size and the low 32 bits of the effective address for each
data transfer entry must be 16 bytes aligned. The alf_wb_dtl_entry_add call
does NOT help you to automatically deal with alignment issues. An ALF_ERR_INVAL error
is returned if there is an unaligned address. The same limitation also applies
to the offset_to_accel_buf parameter of alf_wb_dtl_begin.