Example Mapping Of Qtd Buffer Pointers To Buffer - Intel IXP45X Developer's Manual

Network processors
Table of Contents

Advertisement

Intel
a full 4K page. The final portion, which may only be large enough to occupy a
portion of a page, must start at the top of the page and be contiguous within that
page.
The buffer pointer list in the qTD is long enough to support a maximum transfer size of
20K bytes. This case occurs when all five buffer pointers are used and the first offset is
zero. A qTD handles a 16-Kbyte buffer with any starting buffer alignment.
The host controller uses the field C_Page field as an index value to determine which
buffer pointer in the list should be used to start the current transaction. The host
controller uses a different buffer pointer for each physical page of the buffer. This is
always true, even if the buffer is physically contiguous.
The host controller must detect when the current transaction will span a page boundary
and automatically move to the next available buffer pointer in the page pointer list. The
next available pointer is reached by incrementing C_Page and pulling the next page
pointer from the list. Software must ensure there are sufficient buffer pointers to move
the amount of data specified in the Bytes to Transfer field.
Figure 66, "Example Mapping of qTD Buffer Pointers to Buffer Pages" on page 450
illustrates a nominal example of how System software would initialize the buffer
pointers list and the C_Page field for a transfer size of 16,383 bytes. C_Page is set to
zero. The upper 20-bits of Page 0 references the start of the physical page. Current
Offset (the lower 12-bits of queue head Dword 7) holds the offset in the page e.g.
2,049 (e.g. 4,096-2,047). The remaining page pointers are set to reference the
beginning of each subsequent 4K page.
Figure 66.
Example Mapping of qTD Buffer Pointers to Buffer Pages
C_Page = 0
Pointer (page 0)
Pointer (page 1)
Pointer (page 2)
Pointer (page 3)
Pointer (page 4)
For the first transaction on the qTD (assuming a 512-byte transaction), the host
controller uses the first buffer pointer (page 0 because C_Page is set to zero) and
concatenates the Current Offset field. The 512 bytes are moved during the transaction,
the Current Offset and Total Bytes to Transfer are adjusted by 512 and written back to
the queue head working area.
During the 4
in page 1. The host controller will increment C_Page (to 1) and use the page 1 pointer
to move the final byte of the transaction. After the 4
®
®
Intel
IXP45X and Intel
IXP46X Product Line of Network Processors
Developer's Manual
450
®
®
IXP45X and Intel
IXP46X Product Line of Network Processors—USB 2.0 Host Controller
th
transaction, the host controller needs 511 bytes in page 0 and one byte
The physical pages in
memory may or may not
2047
be physically contiguous
4K
Bytes to Transfer = 16383 Bytes
Page 0 = 2047
Page 1 = 4096
Page 2 = 4096
Page 3 = 4096
4K
Page 4 = 2048
Total:
4K
2048
th
transaction, the active page
Order Number: 306262-004US
16383
B4509-01
August 2006

Advertisement

Table of Contents
loading

This manual is also suitable for:

Ixp46x

Table of Contents