TX_CFM
[TX]

LMAC Tx confirmation module. More...

Collaboration diagram for TX_CFM:

Data Structures

struct  txl_cfm_env_tag
 Context of the Tx Control block. More...

Functions

__INLINE struct tx_cfm_tagtxl_cfm_tag_get (struct txdesc *txdesc)
 Get the confirmation structure attached to a TX descriptor.
void txl_cfm_init (void)
 Initializes the CFM and BA queues.
void txl_cfm_push (struct txdesc *txdesc, uint32_t status, uint8_t access_category)
 Push a Tx descriptor in the CFM queue.
void txl_cfm_evt (int access_category)
 Background event handler of the Tx confirmation module.
void txl_ba_push (struct rxdesc *rxdesc)
 Push a Rx descriptor containing a BA frame in the appropriate aggregate descriptor on the right AC.
void txl_cfm_flush_desc (uint8_t access_category, struct txdesc *txdesc, uint32_t status)
 Immediately confirm the descriptor passed as parameter.
void txl_cfm_flush (uint8_t access_category, struct co_list *list, uint32_t status)
 Immediately confirm all the descriptors of the list passed as parameter.

Variables

const uint32_t txl_cfm_evt_bit [NX_TXQ_CNT]
 Table mapping the TX confirmation event bit to the queue index.
struct txl_cfm_env_tag txl_cfm_env
 Tx Confirmation context variable.

Detailed Description

LMAC Tx confirmation module.


Function Documentation

void txl_ba_push ( struct rxdesc rxdesc  ) 

Push a Rx descriptor containing a BA frame in the appropriate aggregate descriptor on the right AC.

This function associates the received BA to an AGG descriptor and verifies its validity.

Parameters:
[in] rxdesc Pointer to Rx descriptor to be pushed in the BA queue

Definition at line 304 of file txl_cfm.c.

References AGG_BA_RECEIVED, AGG_BA_VALID, txl_list::aggregates, ASSERT_REC, co_list_pop_front(), PROF_AGG_BA_RXED_CLR, PROF_AGG_BA_RXED_SET, tx_agg_desc::status, txl_ba_ac_get(), txl_cntrl_env, txl_is_ba_valid(), and txl_cntrl_env_tag::txlist.

Referenced by rxl_rxcntrl_frame().

void txl_cfm_evt ( int  access_category  ) 

Background event handler of the Tx confirmation module.

TX descriptors are linked in the cfmlist, ACs mixed but in order of arrival per AC. When the event is programmed, a txdesc in the cfmlist front is analyzed.

It can be the 1st MPDU in an AMPDU whose BA reception status is known, because all the MPDUs in an AMPDU are not moved from transmitting list (per AC) to cfmlist until their BA reception status is known (updated by Hw in either the AMPDU THD or BAR THD.

When it is such an MPDU, the first BA received in the ba_list queue is retrieved, and the MPDUs in the AMPDU are taken one by one from the cfm list, their sattus is updated and they are sent to host.

The BA reception status is present in either AMPDU THD or BAR THD, but it doesn't matter how it was received, but IF it was received, the bitmap is extracted for the AMPDU MPDUs in any case.

When the MPDU in the cfm list is a singleton MPDU, it already has its status so it is released towards the host immediately without further handling.

Parameters:
[in] access_category Access Category for which confirmations need to be handled

Definition at line 333 of file txl_cfm.c.

References AGG_BA_VALID, lmacdesc::agg_desc, AGG_DONE, ASSERT_ERR, bfr_is_enabled(), bfr_tx_cfm(), txl_cfm_env_tag::cfmlist, co_list_pick(), co_list_pop_front(), FRAME_SUCCESSFUL_TX_BIT, GLOBAL_INT_DISABLE, GLOBAL_INT_RESTORE, txdesc::host, is_mpdu_first(), is_mpdu_last(), ke_evt_clear(), ke_evt_get(), txdesc::lmac, macif_tx_cfm_done(), macif_tx_cfm_push(), macif_tx_cfm_start(), PROF_TX_AC_BG_SET, PROF_TX_CFM_EVT_CLR, PROF_TX_CFM_EVT_SET, ps_check_tx_trigger_sent(), rc_cfm_ampdu(), rc_cfm_singleton(), tx_cfm_tag::status, tx_agg_desc::status, txl_agg_release(), txl_ba_extract_ack(), txl_cfm_env, txl_cfm_evt_bit, txl_cfm_tag_get(), and txu_cntrl_cfm().

void txl_cfm_flush ( uint8_t  access_category,
struct co_list list,
uint32_t  status 
)

Immediately confirm all the descriptors of the list passed as parameter.

Parameters:
[in] access_category Access category corresponding to the list
[in] list Pointer to the list of descriptors to be confirmed
[in] status Status to be sent in the confirmation

NX_FULLY_HOSTED

Definition at line 551 of file txl_cfm.c.

References A_MPDU_LAST, lmacdesc::agg_desc, bfr_is_enabled(), bfr_tx_cfm(), co_list_pop_front(), DESC_DONE_TX_BIT, is_int_frame(), txdesc::lmac, macif_tx_cfm_done(), macif_tx_cfm_push(), macif_tx_cfm_start(), tx_cfm_tag::status, txl_buffer_free_all(), txl_cfm_tag_get(), txl_frame_cfm(), txl_frame_evt(), and txu_cntrl_cfm().

void txl_cfm_flush_desc ( uint8_t  access_category,
struct txdesc txdesc,
uint32_t  status 
)

Immediately confirm the descriptor passed as parameter.

Parameters:
[in] access_category Access category corresponding to the list
[in] txdesc Pointer to the descriptor of descriptors to be confirmed
[in] status Status to be sent in the confirmation

NX_FULLY_HOSTED

Definition at line 496 of file txl_cfm.c.

References A_MPDU_LAST, lmacdesc::agg_desc, bfr_is_enabled(), bfr_tx_cfm(), DESC_DONE_TX_BIT, is_int_frame(), txdesc::lmac, macif_tx_cfm_done(), macif_tx_cfm_push(), macif_tx_cfm_start(), tx_cfm_tag::status, txl_buffer_free_all(), txl_cfm_tag_get(), txl_frame_cfm(), txl_frame_evt(), and txu_cntrl_cfm().

void txl_cfm_init ( void   ) 

Initializes the CFM and BA queues.

These queues are useful for sending confirmation to UMAC for the txdescs in order.

The CFM queue will handle the linked list of txdescs, each having a certain status after handling the TX trigger from HW (acked, waiting for BA analysis, not acked at all)

The BA queue holds the linked list of rxdescs of BA frames per AC, which will be used and freed when the TX_CFM kernel event is handled in order to update the MPDU status of those MPDUs part of AMPDUs in the confirm list.

For singleton MPDUs the BA queue is of no use, they should be confirmed according to their already set ok/not acked status.

Definition at line 276 of file txl_cfm.c.

References txl_cfm_env_tag::cfmlist, co_list_init(), NX_TXQ_CNT, and txl_cfm_env.

void txl_cfm_push ( struct txdesc txdesc,
uint32_t  status,
uint8_t  access_category 
)

Push a Tx descriptor in the CFM queue.

Parameters:
[in] txdesc Tx descriptor to be pushed in the CFM queue
[in] status Status of the confirmation
[in] access_category Access category on which the confirmation is pushed

Definition at line 287 of file txl_cfm.c.

References txl_cfm_env_tag::cfmlist, co_list_push_back(), is_mpdu_agg(), ke_evt_set(), tx_cfm_tag::status, txl_cfm_env, txl_cfm_evt_bit, and txl_cfm_tag_get().

Referenced by txl_frame_exchange_done(), and txu_cntrl_discard().

__INLINE struct tx_cfm_tag* txl_cfm_tag_get ( struct txdesc txdesc  )  [read]

Get the confirmation structure attached to a TX descriptor.

Parameters:
[in] txdesc TX descriptor pointer
Returns:
The pointer to the confirmation structure attached to this TX descriptor

Definition at line 68 of file txl_cfm.h.

References tx_hw_desc::cfm, txdesc::host, lmacdesc::hw_desc, and txdesc::lmac.

Referenced by bam_check_tx_baw(), txl_cfm_evt(), txl_cfm_flush(), txl_cfm_flush_desc(), txl_cfm_push(), and txl_frame_exchange_done().


Generated on 14 Jan 2020 for Ceva-RW WLAN FullMAC SW documentation by  doxygen 1.6.1