# TX_SWDESC
[TX]

Definition and management of Tx SW descriptors. More...

Collaboration diagram for TX_SWDESC:

## Data Structures
struct | txl_buffer_control
| Control descriptor containing information about the transmission rates to use, the Beamforming/HTC/STBC flags, etc. More...
struct | hostdesc
| Descriptor filled by the Host. More...
struct | umacdesc
| Descriptor filled by the UMAC. More...
struct | lmacdesc
| Descriptor filled by the LMAC. More...
struct | txdesc
| LMAC Tx Descriptor. More...
struct | txdesc_api
| Description of the TX API. More...
struct | txdesc_host
| Descriptor used for Host/Emb TX frame information exchange. More...
## Defines
#define | DELIMITER_LEN 4
| AMDPU delimiter length in bytes.
## Enumerations
enum | tx_swdesc_umac_flags { TX_SWDESC_UMAC_BEAMFORM_BIT = CO_BIT(0), TX_SWDESC_UMAC_TRIAL_BEAMFORM_BIT = CO_BIT(1), TX_SWDESC_UMAC_TRIAL_STBC_BIT = CO_BIT(2), TX_SWDESC_UMAC_HTC_BIT = CO_BIT(3), TX_SWDESC_UMAC_TRIAL_HTC_BIT = CO_BIT(4) }
## Variables
struct txdesc | txdesc_array0 [RW_USER_MAX *NX_TXDESC_CNT0]
| Descriptors for the BK queue.
struct txdesc | txdesc_array1 [RW_USER_MAX *NX_TXDESC_CNT1]
| Descriptors for the BE queue.
struct txdesc | txdesc_array2 [RW_USER_MAX *NX_TXDESC_CNT2]
| Descriptors for the VI queue.
struct txdesc | txdesc_array3 [RW_USER_MAX *NX_TXDESC_CNT3]
| Descriptors for the VO queue.
struct txdesc | txdesc_array4 [NX_TXDESC_CNT4]
| Descriptors for the BCN queue.
struct txdesc *const | txdesc_array_per_q [NX_TXQ_CNT]
| Array of pointer to the different TX descriptor pools.
struct txdesc * | txdesc_array [NX_TXQ_CNT][RW_USER_MAX]
| Array of pointer to the different TX descriptor pools.
struct tx_hw_desc *const | tx_hw_desc [NX_TXQ_CNT]
| Array of pointer to the different TX HW descriptor pools.
const int | nx_txdesc_cnt []
| NX_FULLY_HOSTED.
const int | nx_txuser_cnt []
| Maximum number of users per queue.
struct txdesc * | txdesc_array [NX_TXQ_CNT][RW_USER_MAX]
| Pointer to the TX descriptors arrays.
const int | nx_txdesc_cnt [NX_TXQ_CNT]
| Number of TX descriptors per queue.
const int | nx_txuser_cnt [NX_TXQ_CNT]
| Maximum number of users per queue.
## External API
void | tx_txdesc_init (void)
| Initializes the Tx descriptor pool.
__INLINE bool | is_int_frame (struct txdesc *txdesc)
| Return a boolean indicating if a MPDU is split accross several host buffers (e.g.
__INLINE bool | is_mpdu_split (struct txdesc *txdesc)
| Return a boolean indicating if a MPDU is split across several host buffers (e.g.
__INLINE bool | is_qos_data (struct txdesc *txdesc)
| Return boolean corresponding to MPDU being first in an AMPDU or not.
__INLINE bool | is_htc_sglt_allowed (struct txdesc *txdesc)
| Return if a frame pointed by the given TX descriptor can include a +HTC if transmitted as a singleton MPDU.
__INLINE struct txdesc * | tx_desc_next (struct txdesc *txdesc)
| Return the TX descriptor following the one passed as parameter.

## Detailed Description

Definition and management of Tx SW descriptors.

## Enumeration Type Documentation

enum tx_swdesc_umac_flags

Enumerator:

  TX_SWDESC_UMAC_BEAMFORM_BIT | Singleton frame can be transmitted using beamforming.
  TX_SWDESC_UMAC_TRIAL_BEAMFORM_BIT | Singleton trial frame can be transmitted using beamforming.
  TX_SWDESC_UMAC_TRIAL_STBC_BIT | Trial frame can be transmitted using STBC.
  TX_SWDESC_UMAC_HTC_BIT | Singleton frame can be transmitted with +HTC field.
  TX_SWDESC_UMAC_TRIAL_HTC_BIT | Singleton trial frame can be transmitted with +HTC field.

Definition at line 57 of file tx_swdesc.h.

## Function Documentation

__INLINE bool is_htc_sglt_allowed | ( | struct txdesc * | txdesc | ) |

Return if a frame pointed by the given TX descriptor can include a +HTC if transmitted as a singleton MPDU.

Parameters:

  `[in]` | txdesc | TX Descriptor to be checked

Returns:
  true if the frame could include a +HTC when sent as a singleton MPDU, false otherwise

Definition at line 369 of file tx_swdesc.h.

References umacdesc::buf_control, hostdesc::flags, txdesc::host, txl_buffer_control::tx_flags, TX_SWDESC_UMAC_HTC_BIT, TX_SWDESC_UMAC_TRIAL_HTC_BIT, TXU_CNTRL_RC_TRIAL, and txdesc::umac.

Referenced by txl_hwdesc_config_post().

__INLINE bool is_int_frame | ( | struct txdesc * | txdesc | ) |

Return a boolean indicating if a MPDU is split accross several host buffers (e.g.

A-MSDU)

Parameters:

  `[in]` | txdesc | Txdesc pointer to access its packet count.

Returns:
  Boolean True if MPDU is split and false otherwise

Definition at line 324 of file tx_swdesc.h.

References txdesc::host, and hostdesc::packet_addr.

Referenced by txl_cfm_flush(), txl_cfm_flush_desc(), txl_frame_exchange_done(), txl_payload_handle(), and txl_payload_transfer().

__INLINE bool is_mpdu_split | ( | struct txdesc * | txdesc | ) |

Return a boolean indicating if a MPDU is split across several host buffers (e.g.

A-MSDU)

Parameters:

  `[in]` | txdesc | Txdesc pointer to access its packet count.

Returns:
  Boolean True if MPDU is split and false otherwise

Definition at line 342 of file tx_swdesc.h.

References txdesc::host, and hostdesc::packet_cnt.

Referenced by bam_check_tx_baw(), txl_buffer_is_amsdu_multi_buf(), txl_buffer_is_amsdu_single_buf(), and txl_buffer_update_thd().

__INLINE bool is_qos_data | ( | struct txdesc * | txdesc | ) |

Return boolean corresponding to MPDU being first in an AMPDU or not.

Parameters:

  `[in]` | txdesc | Txdesc pointer to access its flags elements.

Returns:
  Boolean True if MPDU is first in the AMPDU and false otherwise

Definition at line 355 of file tx_swdesc.h.

References txdesc::host, and hostdesc::tid.

Referenced by txl_payload_handle().

__INLINE struct txdesc* tx_desc_next | ( | struct txdesc * | txdesc | ) | `[read]`

Return the TX descriptor following the one passed as parameter.

Parameters:

  `[in]` | txdesc | Tx descriptor pointer.

Returns:
  The pointer to the next TX descriptor

Definition at line 393 of file tx_swdesc.h.

References co_list_next(), and txdesc::list_hdr.

Referenced by txl_mumimo_convert(), and txl_transmit_prep().

void tx_txdesc_init | ( | void |  | ) |

Initializes the Tx descriptor pool.

## Variable Documentation

const int nx_txdesc_cnt[]

Initial value:

    {
        NX_TXDESC_CNT0,
        NX_TXDESC_CNT1,
        NX_TXDESC_CNT2,
        NX_TXDESC_CNT3,

        NX_TXDESC_CNT4,

    }

NX_FULLY_HOSTED.

Number of TX descriptors per queue.

Definition at line 78 of file tx_swdesc.c.

Referenced by bam_create_ba_agg(), and mm_ba_add_req_handler().

const int nx_txuser_cnt[]

Initial value:

    {
        RW_USER_MAX,
        RW_USER_MAX,
        RW_USER_MAX,
        RW_USER_MAX,

        1,

    }

Maximum number of users per queue.

Definition at line 89 of file tx_swdesc.c.

Referenced by ipc_emb_tx_q_has_data().

struct tx_hw_desc* const tx_hw_desc[NX_TXQ_CNT]

Initial value:

    {
        tx_hw_desc0,
        tx_hw_desc1,
        tx_hw_desc2,
        tx_hw_desc3,

        tx_hw_desc4,

    }

Array of pointer to the different TX HW descriptor pools.

Definition at line 66 of file tx_swdesc.c.

struct txdesc* txdesc_array[NX_TXQ_CNT][RW_USER_MAX]

Array of pointer to the different TX descriptor pools.

Pointer to the TX descriptors arrays.

Definition at line 63 of file tx_swdesc.c.

struct txdesc* const txdesc_array_per_q[NX_TXQ_CNT]

Initial value:

    {
        txdesc_array0,
        txdesc_array1,
        txdesc_array2,
        txdesc_array3,

        txdesc_array4,

    }

Array of pointer to the different TX descriptor pools.

Definition at line 51 of file tx_swdesc.c.