Functional Description
16.3.9.3 Queue Manager
The queue manager (QM) is a hardware module that is responsible for accelerating management of the
queues, i.e. queues are maintained within a queue manager module. Packets are added to a queue by
writing the 32-bit descriptor address to a particular memory mapped location in the queue manager
module. Packets are de-queued by reading the same location for that particular queue. A single queue
manager exists within the device and handles all available 156 queues within the USB subsystem
Descriptors are queued onto a logical queue (pushed) by writing the descriptor pointer to the Queue N
Register D. When the Queue N Register D is written, this kicks off the queue manager causing it to add
the descriptor to the tail of queue.
The QM keeps track of the order of the descriptors pushed within a queue or the linking status of the
descriptors. To accomplish this linking status, QM will first resolve the 32-bit descriptor pointer into a 16-bit
index which is used for linking a queue pointer purposes. Once the address to index computation is
performed, i.e., the physical index information is determined, the QM will link that descriptor onto the
descriptor chain that is maintained for that logical queue by writing the linking information out to a linking
RAM which is external to the queue manager. More on linking RAM discussion would follow in latter
sections. The QM will also update the queue tail pointers appropriately. Since logical queues within the
queue manager are maintained using linked lists, queues cannot become full and no check for fullness is
required before queuing a packet descriptor.
16.3.9.3.1 Queue Types
Several types of queues exist (a total of 156 queues) within the CPPI 4.1 DMA. Regardless of the type of
queue, queues are used to hold pointers to Packet or Buffer Descriptors while they are being passed
between the Host and / or any of the ports in the system. All queues are maintained within the single
Queue Manager module.
The following types of Queues exist:
•
Free descriptor queue (unassigned to specific endpoint but assigned to specific endpoint type; receive
endpoints – can be used as a receive submit queue)
•
Transmit submit queue
•
Transmit completion (return) queue
•
Receive completion (return) queue
•
Teardown queue
Dedicated queues exist where one or more queues are assigned for the use of a single endpoint and non-
dedicated queues exist where no specific queue assignment to an endpoint is required (but pertains to
receive endpoints only). Transmit endpoints are not allowed to use free descriptor queues.
Dedicated queues exist for each specific endpoint use and non-dedicated queues exist that can be used
by any/all receive endpoints. Three queues are reserved for each endpoint/port for transmit actions with
two of the three queues being transmit submit queues while the remaining queue is used as a
completion/return queue. For receive actions, the only dedicated queues are completion/return queues;
one queue is assigned/reserved for each receive endpoint. 32 free descriptor queues that do not have
dedicated endpoint-queue assignment exist and these queues are used to service any receive endpoint as
receive submit queues.
displays queue-endpoint assignments.
Table 16-27. Queue-Endpoint Assignments
Queue Start
Queue Count
Queue-Endpoint Association
Number
0
32
Free Descriptor Queues/Rx Submit Queues (USB0/1 Rx
Endpoints)
32
2
USB0 Tx Endpoint 1
34
2
USB0 Tx Endpoint 2
36
2
USB0 Tx Endpoint 3
38
2
USB0 Tx Endpoint 4
1742
Universal Serial Bus (USB)
SPRUH73H – October 2011 – Revised April 2013
Copyright © 2011–2013, Texas Instruments Incorporated