wiki:802.11/MAC/Upper/MACHighFramework/TX_queue

Wireless Transmit Queue

The low-level MAC running in CPU Low handles one packet at a time. The high-level MAC in CPU High manages many packets at once via a series of queues. In the reference implementation one queue is created per associated node plus one queue for all broadcast traffic. Whenever the low-level MAC finishes transmission of a packet the next available packet is dequeued from the appropriate queue and passed to CPU Low for transmission.

The packet queues use the DDR3 SO-DIMM on WARP v3 for storage. An SO-DIMM is required to use the queuing framework in the 802.11 Reference Design.

The queuing system is implemented in the MAC High Framework. At boot the framework creates a fixed number of free queue elements. When new packets requiring wireless transmission are received or generated a free queue element is checked out from the framework, populated with the new packet, then added to the tail of the queue associated with the node to which the packet is addressed. Multicast and management packets are added to their own dedicated queues.

When the low-level MAC is ready for a new packet the high-level queue framework removes the head element from the next queue and passes it to the low-level MAC for transmission. By default the next queue is selected via round robin. More sophisticated queue management schemes (i.e. to support QoS) can be implemented in place of round robin.

When the low-level MAC completes transmission of a packet the high-level framework clears the associated queue entry and returns it to the pool of available queue entries for future re-use.

Queue API

The queue framework is implemented in the wlan_mac_queue.c file. Refer to the per-function comments in this file for the API.

Last modified 10 years ago Last modified on Oct 13, 2014, 7:48:45 PM