Changes between Version 7 and Version 8 of 802.11/MAC/Upper/MACHighFramework/TX_queue
- Timestamp:
- Apr 8, 2014, 10:53:54 AM (10 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
802.11/MAC/Upper/MACHighFramework/TX_queue
v7 v8 11 11 The packet queues use the DDR3 SO-DIMM on WARP v3 for storage. If the SO-DIMM is not installed a much smaller queue will be implemented using on-chip BRAM. 12 12 13 The queueing 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. Broadcast packets are added to a dedicated queue.13 The queueing 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. 14 14 15 15 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. … … 18 18 19 19 == Queue API == 20 '''COMING SOON''' 20 21 User code interacts with the transmit queue via the following functions: 22 23 * {{{void queue_checkout(dl_list* new_list, u16 num_packet_bd)}}} - attempts to check out an arbitrary number of packet descriptors from the free pool and delivers them to the calling function by tying those packet descriptors together in a doubly-linked list 24 * {{{new_list}}}: a pointer to a doubly-linked list that will be populated by the queue framework. 25 * {{{num_packet_bd}}}: number of packet buffer descriptors that should be checked out. The {{{new_list}}} pointed to by the first argument will be populated with {{{num_packet_bd}}} list entries 26 * {{{void queue_checkin(dl_list* list)}}} - checks a doubly-linked list of packet descriptors back in to the free pool 27 * {{{list}}}: the doubly-linked list of packet buffer descriptors that will be returned to the free pool 28 * {{{wlan_mac_queue_poll(u16 queue_sel)}}} - checks a queue identified by the argument and sends a packet from it if one is there 29 * {{{queue_sel}}}: identification of queue that should be polled 30 * {{{void enqueue_after_end(u16 queue_sel, dl_list* list)}}} - appends the provided doubly-linked list of packet buffer descriptors to the end of the queue identified by the provided argument 31 * {{{queue_sel}}}: identification of queue that should be appended to 32 * {{{list}}}: doubly-linked list of packet descriptors that should be appended 33 * {{{void purge_queue(u16 queue_sel)}}} - remove all packet buffer descriptors from the identified queue and return them to the free pool 34 * {{{queue_sel}}}: identification of queue that should be purged 21 35 22 36 == Implementation ==