RX_HWDESC

Rx buffer/descriptor management. More...

Data Structures

struct  rxdesc
 SW descriptor to manage the MAC SW receive operations. More...
struct  rxl_hwdesc_env_tag
 Buffer Management control structure. More...
struct  rxl_buffer_tag
 Structure caching the RX buffers parameters. More...

Defines

#define RXL_LAST_DMA_PATTERN_LEN   4
 Length of the pattern for final DMA transfer.
#define NX_AMSDU_DEAGG_LEN   0
 Length of de-aggregated A-MSDUs (not available).
#define RXU_MACHDRDESC_LEN   0
 Length of MAC Header descriptor (not available).
#define RXL_ADD_INFO_LEN   (sizeof_b(struct phy_channel_info) + 4 + RXU_MACHDRDESC_LEN + NX_AMSDU_DEAGG_LEN)
 Length of the RX SW information.
#define RXL_HEADER_INFO_LEN
 Length of the receive vectors.
#define RXL_PAYLOAD_OFFSET   (RXL_HEADER_INFO_LEN + 2)
 Offset of the payload in the RX buffer.
#define RXL_WRAP   CO_BIT(31)
 Bit indicating a buffer wrap in the read and write addresses.
#define RXL_RXDESC_SIZE   (sizeof_b(struct rxdesc))
 RX descriptor size.
#define RXL_RHD_HEADER   (sizeof_b(struct rx_upload_cntrl_tag) / 4)
 Head room for RHD.
#define RXL_RHD_FOOTER   ((RXL_RXDESC_SIZE - sizeof_b(struct rx_hd)) / 4 - RXL_RHD_HEADER)
 Tail room for RHD.
#define RXL_RBD_HEADER   0
 Head room for RBD.
#define RXL_RBD_FOOTER   ((sizeof_b(struct rx_payloaddesc) - sizeof_b(struct rx_pbd)) / 4)
 Tail room for RBD.
#define RXL_BUFFER1_SIZE   ((RWNX_MAX_AMSDU_RX + RXL_RXDESC_SIZE) / 2)
 Size of the RX buffer 1 (the size of 2 big A-MSDUs + their descriptors).
#define RXL_BUFFER2_SIZE   ((512 + RXL_RXDESC_SIZE) / 4)
 Size of the RX buffer 2 (512 bytes + the size of a RX descriptor).
#define RXL_HW_BUFFER_INIT(id)
 Macro initializing the buffer pointers to the HW.

Enumerations

enum  rx_buf_id { DH_BUF = 0, IH_BUF = 1 }
 

RX buffers identifiers.

More...

Functions

__INLINE struct rx_dmadescrxl_dmadesc_get (struct rxdesc *rxdesc)
 Get the DMA descriptor attached to a received MPDU.
void rxl_hwdesc_init (void)
 Initialize the pools of element Function to initialize the Rx buffer and descriptor pools.
void rxl_mpdu_copy (struct rx_pbd *pbd, uint16_t length, uint16_t offset, uint32_t *dst)
 Do a SW copy of a received MPDU.
void rxl_mpdu_partial_transfer (struct rxdesc *rxdesc, uint16_t upload_len, uint32_t hostbuf, uint16_t payl_offset, cb_rx_dma_func_ptr cb, void *env)
 Do a partial upload of a MPDU to a host buffer.
void rxl_mpdu_transfer (struct rxdesc *rxdesc)
 This function programs the DMA transfer of the received payload to the host memory.
void rxl_mpdu_free (struct rxdesc *rxdesc)
 Free the HW descriptors attached to the SW descriptor passed as parameter.
void rxl_frame_release (struct rxdesc *rxdesc)
 This function cleans up the complete frame data structures.
struct rxdescrxl_rxdesc_get (void)
 Get the RX descriptor pointing to the first MPDU ready for processing.
void rxl_rxdesc_ready_for_processing (struct rxdesc *rxdesc)
 Indicate that the MPDU associated to the descriptor is ready for processing.
void rxl_mpdu_isr (void)
 Service routine for the MAC HW RX interrupt.
void rxl_immediate_frame_get (void)
 Function used to get the immediate frame that was indicated from its dedicated interrupt.
void rxl_current_desc_get (struct rx_hd **rhd, struct rx_pbd **rbd)
 This function returns the pointer to the first RX Header and Buffer descriptors chained to the MAC HW.
void rxl_hwdesc_monitor (bool enable)
 This function is called when an interface is changing its type, in order to configure correctly the RX path for either monitor or active mode.
static void rxl_hd_append (struct rx_dmadesc *desc)
 Appends a descriptor to the list visible to HW Function to initialize the freed HW desc and tail it to the list of HW descriptors.
static void rxl_pd_append (struct rx_pbd *first, struct rx_pbd *last, struct rx_pbd *spare)
 Appends a list of RX payload buffer descriptors to the list visible to HW Function to initialize the freed HW desc and tail it to the list of HW descriptors.
static bool rxl_rxcntrl_frame (struct rxdesc *rxdesc)
 This function processes the received control frames.
static struct rx_payloaddescrxl_payload_transfer (struct rx_payloaddesc **curr_pd, uint16_t upload_len, uint32_t hostbuf, uint16_t *payl_offset, int dma_idx, int irq_en)
 Upload a payload to a higher layer buffer.
static void rxl_go_to_last_rbd (struct rxdesc *rxdesc, struct rx_payloaddesc *pd, struct rx_payloaddesc *prev_pd)
 Loop on the payload descriptors until the RX_PD_LASTBUF flag is found.
__INLINE bool rxl_dh_buf_has_data (void)
 Return the DH buffer status.
__INLINE bool rxl_ih_buf_has_data (void)
 Return the IH buffer status.
__INLINE uint32_t rxl_add_wrap_bit (uint32_t new_read, uint32_t old_read)
 Set correctly the wrap bit (bit 31) to the new read address, based on the previous read address.
__INLINE void rxl_update_hw_buf_read (uint32_t new_read, int id)
 Update the read address HW register.
__INLINE void rxl_update_sw_buf_read (uint32_t new_read, struct rxl_buffer_tag *buf)
 Update the read address of the FW.
__INLINE void rxl_adjust_sw_buf_read (struct rxl_buffer_tag *buf)
 Check if there is enough space between the SW read address and the end of the buffer.
__INLINE void rxl_adjust_frmlen (struct rx_hd *rhd)
 Remove the MIC/ICV/FCS length from the frame length.

Variables

static struct rxdesc rx_swdesc_tab [NX_RXDESC_CNT]
 Array of RX SW descriptors.
static struct rxl_hwdesc_env_tag rx_hwdesc_env
 RXL HW descriptor environment variable.
struct rx_dmadesc rx_dma_hdrdesc [NX_RXDESC_CNT]
 Array of struct containing the RX header descriptors.
struct rx_payloaddesc rx_payload_desc [NX_RX_PAYLOAD_DESC_CNT]
 Array of struct containing the RX buffer descriptors.
static struct rxl_hwdesc_env_tag rx_hwdesc_env
 RXL HW descriptor environment variable.
static uint32_t rxl_hw_buffer1 [RXL_BUFFER1_SIZE]
 RX buffer 1, i.e.
static uint32_t rxl_hw_buffer2 [RXL_BUFFER2_SIZE]
 RX buffer 2, i.e.

Detailed Description

Rx buffer/descriptor management.


Define Documentation

#define RXL_HEADER_INFO_LEN
Value:

Length of the receive vectors.

Definition at line 108 of file rxl_hwdesc.h.

Referenced by rxl_mpdu_transfer().

#define RXL_HW_BUFFER_INIT ( id   ) 
Value:
do {                                                                                     \
    struct rxl_buffer_tag *buf = &rx_hwdesc_env.buf[id - 1];                             \
    buf->start = CPU2HW(rxl_hw_buffer##id);                                              \
    buf->end = buf->start + CO_ALIGN4_LO(sizeof_b(rxl_hw_buffer##id));                   \
    buf->read = buf->start;                                                              \
    nxmac_rx_buf_##id##_start_ptr_set(buf->start);                                       \
    nxmac_rx_buf_##id##_end_ptr_set(buf->end - 4);                                       \
    nxmac_rx_buf_##id##_rd_ptr_set(buf->start);                                          \
    nxmac_rx_buf_##id##_wr_ptr_set(buf->start);                                          \
} while(0)

Macro initializing the buffer pointers to the HW.

Definition at line 114 of file rxl_hwdesc.c.

Referenced by rxl_hwdesc_init().


Enumeration Type Documentation

enum rx_buf_id

RX buffers identifiers.

Enumerator:
DH_BUF 

Id of the buffer requiring deferred handling (i.e. for normal data/management).

IH_BUF 

Id of the buffer requiring immediate handling (i.e. for BA/HE trigger).

Definition at line 86 of file rxl_hwdesc.c.


Function Documentation

__INLINE uint32_t rxl_add_wrap_bit ( uint32_t  new_read,
uint32_t  old_read 
)

Set correctly the wrap bit (bit 31) to the new read address, based on the previous read address.

The function checks if the new read address causes a wrap of the buffer, and toggles the wrap bit if this is the case.

Parameters:
[in] new_read New read address (without the wrap bit)
[in] old_read Old read address (with current value of wrap bit)
Returns:
The new read address, that now contains the right value of the wrap bit.

Definition at line 168 of file rxl_hwdesc.c.

References RXL_WRAP.

Referenced by rxl_update_hw_buf_read(), and rxl_update_sw_buf_read().

__INLINE void rxl_adjust_frmlen ( struct rx_hd rhd  ) 

Remove the MIC/ICV/FCS length from the frame length.

The MAC HW is now including the length of these fields in the frame length reported in the RHD, whereas it was not the case before. As all the RX SW is expecting those lengths not to be included, let's remove them prior to any SW processing of the frame.

Parameters:
[in,out] rhd Pointer to the RHD to be updated.

Definition at line 252 of file rxl_hwdesc.c.

References rx_hd::frmlen, ICV_LEN, MAC_FCS_LEN, MIC_LEN, RX_HD_DECR_CCMP128_SUCCESS, RX_HD_DECR_TKIP_SUCCESS, RX_HD_DECR_WEP_SUCCESS, RX_HD_DECRSTATUS, and rx_hd::statinfo.

Referenced by rxl_rxdesc_ready_for_processing().

__INLINE void rxl_adjust_sw_buf_read ( struct rxl_buffer_tag buf  ) 

Check if there is enough space between the SW read address and the end of the buffer.

If not the SW read address is set to the beginning of the buffer, in order to stay aligned with the location where the HW wrote the frame.

This function shall be called only after comparing SW read and HW write address to determine if some frame is available for the SW.

Parameters:
[in] buf The buffer to be checked

Definition at line 235 of file rxl_hwdesc.c.

References rxl_buffer_tag::end, rxl_buffer_tag::read, RXL_RXDESC_SIZE, rxl_update_sw_buf_read(), RXL_WRAP, and rxl_buffer_tag::start.

Referenced by rxl_immediate_frame_get(), and rxl_rxdesc_get().

void rxl_current_desc_get ( struct rx_hd **  rhd,
struct rx_pbd **  rbd 
)

This function returns the pointer to the first RX Header and Buffer descriptors chained to the MAC HW.

It is used for error logging when an issue is detected in the LMAC.

Parameters:
[out] rhd Pointer to the first RX Header descriptor chained to the MAC HW
[out] rbd Pointer to the first RX Buffer descriptor chained to the MAC HW

Definition at line 968 of file rxl_hwdesc.c.

References rxdesc::dma_hdrdesc, rx_hd::first_pbd_ptr, rx_dmadesc::hd, HW2CPU, and rxl_rxdesc_get().

__INLINE bool rxl_dh_buf_has_data ( void   ) 

Return the DH buffer status.

Returns:
true if data is available in the DH buffer, false otherwise

Definition at line 137 of file rxl_hwdesc.c.

References rxl_hwdesc_env_tag::buf, DH_BUF, rxl_buffer_tag::read, and rx_hwdesc_env.

Referenced by rxl_rxdesc_get().

__INLINE struct rx_dmadesc* rxl_dmadesc_get ( struct rxdesc rxdesc  )  [read]
void rxl_frame_release ( struct rxdesc rxdesc  ) 

This function cleans up the complete frame data structures.

Parameters:
[in] rxdesc Pointer to the structure that is holding the frame details.

Definition at line 707 of file rxl_hwdesc.c.

References rxl_update_hw_buf_read().

Referenced by rxl_mpdu_free(), and rxl_rxcntrl_frame().

static void rxl_go_to_last_rbd ( struct rxdesc rxdesc,
struct rx_payloaddesc pd,
struct rx_payloaddesc prev_pd 
) [static]

Loop on the payload descriptors until the RX_PD_LASTBUF flag is found.

The function then assigns the last and spare payload descriptor pointers to the SW descriptor in order to allow the later freeing of the HW descriptors.

Parameters:
[out] rxdesc Pointer to the RX SW descriptor
[in] pd Pointer to the buffer descriptor to start with.
[in] prev_pd Pointer to the buffer descriptor just preceding pd (might be NULL).

Definition at line 640 of file rxl_hwdesc.c.

References ASSERT_REC, rxl_hwdesc_env_tag::buf, rx_pbd::bufstatinfo, CO_ALIGN4_LO, CPU2HW, rx_pbd::dataendptr, DH_BUF, rxl_buffer_tag::end, HW2CPU, rx_pbd::next, rx_payloaddesc::pbd, rx_hwdesc_env, RX_PD_LASTBUF, rxl_update_sw_buf_read(), and rxl_buffer_tag::start.

Referenced by rxl_mpdu_free(), rxl_mpdu_partial_transfer(), and rxl_mpdu_transfer().

static void rxl_hd_append ( struct rx_dmadesc desc  )  [static]

Appends a descriptor to the list visible to HW Function to initialize the freed HW desc and tail it to the list of HW descriptors.

The element pointers are linked and the valid bit is set. The New Head/New Tail bit is also set accordingly. It also updates the pointer pointing to the last desc tailed.

Parameters:
[in] desc HW desc to be freed and appended

Definition at line 96 of file rxl_hwdesc.c.

References ASSERT_ERR, CPU2HW, rxl_hwdesc_env_tag::first_dmadesc, rx_hd::first_pbd_ptr, rxl_hwdesc_env_tag::free_dmadesc, rx_hd::frmlen, rx_dmadesc::hd, HW2CPU, rxl_hwdesc_env_tag::last_dmadesc, rx_hd::next, rx_hwdesc_env, and rx_hd::statinfo.

void rxl_hwdesc_init ( void   ) 

Initialize the pools of element Function to initialize the Rx buffer and descriptor pools.

Definition at line 684 of file rxl_hwdesc.c.

References RXL_HW_BUFFER_INIT, RXL_RBD_FOOTER, RXL_RBD_HEADER, RXL_RHD_FOOTER, and RXL_RHD_HEADER.

Referenced by rxl_hwdesc_monitor().

void rxl_hwdesc_monitor ( bool  enable  ) 

This function is called when an interface is changing its type, in order to configure correctly the RX path for either monitor or active mode.

In case monitor mode is enabled, the BA and other control frames are not handled internally anymore, but forwarded to the upper layers. This mode shall therefore not be used when monitoring is enabled in parallel of an active STA or AP interface.

Parameters:
[in] enable Flag indicating if monitor mode is enabled or not

Definition at line 695 of file rxl_hwdesc.c.

References rxl_hwdesc_init().

__INLINE bool rxl_ih_buf_has_data ( void   ) 

Return the IH buffer status.

Returns:
true if data is available in the IH buffer, false otherwise

Definition at line 149 of file rxl_hwdesc.c.

References rxl_hwdesc_env_tag::buf, IH_BUF, rxl_buffer_tag::read, and rx_hwdesc_env.

Referenced by rxl_immediate_frame_get().

void rxl_immediate_frame_get ( void   ) 

Function used to get the immediate frame that was indicated from its dedicated interrupt.

This function shall be called from the interrupt handlers indicating the reception of a BlockAck or a HE trigger frame.

Definition at line 948 of file rxl_hwdesc.c.

References rxl_hwdesc_env_tag::buf, HW2CPU, IH_BUF, rxl_buffer_tag::read, rx_hwdesc_env, rxl_adjust_sw_buf_read(), rxl_ih_buf_has_data(), rxl_rxcntrl_frame(), rxl_rxdesc_ready_for_processing(), and RXL_WRAP.

Referenced by txl_frame_exchange_done().

void rxl_mpdu_copy ( struct rx_pbd pbd,
uint16_t  length,
uint16_t  offset,
uint32_t *  dst 
)

Do a SW copy of a received MPDU.

Parameters:
[in] pbd Pointer to the first payload descriptor of the MPDU
[in] length Length to be copied
[in] offset Offset inside the MPDU where to start the copy
[in] dst Pointer to the destination buffer

Definition at line 713 of file rxl_hwdesc.c.

References ASSERT_ERR, co_copy32(), rx_pbd::dataendptr, rx_pbd::datastartptr, HW2CPU, and rx_pbd::next.

Referenced by rxu_mgt_frame_ind().

void rxl_mpdu_free ( struct rxdesc rxdesc  ) 

Free the HW descriptors attached to the SW descriptor passed as parameter.

This function releases both the RHD and RBD and requests chaining them to the HW.

Parameters:
[in] rxdesc Pointer to the rx SW descriptor for which the MPDU descriptors are freed

Definition at line 866 of file rxl_hwdesc.c.

References rx_upload_cntrl_tag::cb, rx_hd::first_pbd_ptr, rx_upload_cntrl_tag::flags, rx_dmadesc::hd, HW2CPU, RX_MPDU_FREE_CLR, RX_MPDU_FREE_SET, RX_NO_UPLOAD, rxl_dmadesc_get(), rxl_frame_release(), rxl_go_to_last_rbd(), rxl_upload_cntrl_push_pending(), rxl_upload_pending(), and rxdesc::upload_cntrl.

void rxl_mpdu_isr ( void   ) 

Service routine for the MAC HW RX interrupt.

This function clears the source of the interrupt and invokes the RX receive path operations by setting an event that is scheduled by the kernel.

Definition at line 932 of file rxl_hwdesc.c.

References KE_EVT_RXREADY_BIT, ke_evt_set(), PROF_RX_MAC_IRQ_CLR, and PROF_RX_MAC_IRQ_SET.

void rxl_mpdu_partial_transfer ( struct rxdesc rxdesc,
uint16_t  upload_len,
uint32_t  hostbuf,
uint16_t  payl_offset,
cb_rx_dma_func_ptr  cb,
void *  env 
)

Do a partial upload of a MPDU to a host buffer.

This function performs the upload of a part of the MPDU. Once the upload is done, the callback function passed as parameter is executed and the HW descriptors linked to the MPDU are freed. This function is used by the BFR module to upload the calibration reports, and the UMAC to upload the received fragments of a MSDU.

Parameters:
[in] rxdesc Pointer to the RX SW descriptor linked to the MPDU
[in] upload_len Length to be uploaded
[in] hostbuf Address in host memory where to upload the MPDU
[in] payl_offset Offset inside the MPDU where to start the upload
[in] cb Function to be called upon upload completion
[in] env Variable to be passed to the callback function

Definition at line 741 of file rxl_hwdesc.c.

References rx_upload_cntrl_tag::cb, rx_upload_cntrl_tag::env, rx_hd::first_pbd_ptr, rx_dmadesc::hd, HW2CPU, RX_MPDU_XFER_CLR, RX_MPDU_XFER_SET, rxl_dmadesc_get(), rxl_go_to_last_rbd(), rxl_payload_transfer(), rxl_upload_cntrl_push_pending(), and rxdesc::upload_cntrl.

Referenced by bfr_upload_report(), and rxu_cntrl_defrag_mpdu_transfer().

void rxl_mpdu_transfer ( struct rxdesc rxdesc  ) 
static struct rx_payloaddesc * rxl_payload_transfer ( struct rx_payloaddesc **  curr_pd,
uint16_t  upload_len,
uint32_t  hostbuf,
uint16_t *  payl_offset,
int  dma_idx,
int  irq_en 
) [static, read]

Upload a payload to a higher layer buffer.

This function takes as payload source address the datastartptr of the buffer descriptor passed as parameter, corrected by the payl_offset offset. It then goes through the list of buffer descriptor until upload_len has been copied.

Parameters:
[in,out] curr_pd Pointer to the buffer descriptor on which the payload to be uploaded starts. At the end of the upload, the last processed buffer descriptor is returned in this variable.
[in] upload_len Length to be uploaded
[in] hostbuf Address in host memory where the upload has to be performed
[in,out] payl_offset Offset inside the first buffer descriptor where the data to upload is located. At the end of the upload, this parameter is set to the offset inside the last handled buffer descriptor where non uploaded data is located.
[in] dma_idx Index of the DMA descriptor to be used for the upload.
[in] irq_en Set to 1 to get a DMA interrupt at the end of the upload, and to 0 otherwise
Returns:
The pointer to the buffer descriptor handled before handling the last buffer descriptor returned in curr_pd

Definition at line 448 of file rxl_hwdesc.c.

References ASSERT_ERR, CPU2HW, dma_desc::ctrl, rx_pbd::dataendptr, rx_pbd::datastartptr, dma_desc::dest, rx_payloaddesc::dma_desc, dma_push(), HW2CPU, dma_desc::length, dma_desc::next, rx_pbd::next, rx_payloaddesc::pbd, RX_DATA_UPLOAD_CHAN, RX_LLICTRL, and dma_desc::src.

Referenced by rxl_mpdu_partial_transfer(), and rxl_mpdu_transfer().

static void rxl_pd_append ( struct rx_pbd first,
struct rx_pbd last,
struct rx_pbd spare 
) [static]

Appends a list of RX payload buffer descriptors to the list visible to HW Function to initialize the freed HW desc and tail it to the list of HW descriptors.

The element pointers are linked and the valid bit is set. The New Head/New Tail bit is also set accordingly. It also updates the pointer pointing to the last desc tailed.

Parameters:
[in] first First buffer descriptor of the list
[in] last Last buffer descriptor of the list
[in] spare Spare descriptor that won't be chained immediately to HW

Definition at line 157 of file rxl_hwdesc.c.

References ASSERT_ERR, rx_pbd::bufstatinfo, CPU2HW, rxl_hwdesc_env_tag::first, rxl_hwdesc_env_tag::free, HW2CPU, rxl_hwdesc_env_tag::last, rx_pbd::next, and rx_hwdesc_env.

void rxl_rxcntrl_frame ( struct rxdesc rxdesc  )  [static]
struct rxdesc * rxl_rxdesc_get ( void   )  [read]

Get the RX descriptor pointing to the first MPDU ready for processing.

This function is called from the RXL control event prior to check if buffers are available for upload. Once these checks are done and before any additional processing is performed, the function rxl_rxdesc_ready_for_processing shall be called.

Returns:
The RX descriptor pointing to the first MPDU ready for processing

Definition at line 895 of file rxl_hwdesc.c.

References rxl_hwdesc_env_tag::buf, DH_BUF, HW2CPU, rxl_buffer_tag::read, rx_hwdesc_env, rxl_adjust_sw_buf_read(), rxl_dh_buf_has_data(), and RXL_WRAP.

Referenced by rxl_current_desc_get().

void rxl_rxdesc_ready_for_processing ( struct rxdesc rxdesc  ) 

Indicate that the MPDU associated to the descriptor is ready for processing.

This function is called from the RXL control event after checking that the MPDU associated to the descriptor is ready for processing, e.g. if host resources are available for upload.

Parameters:
[in] rxdesc The RX descriptor pointing to the MPDU

Definition at line 910 of file rxl_hwdesc.c.

References ASSERT_ERR, rx_upload_cntrl_tag::cb, DH_BUF, rxdesc::dma_hdrdesc, rx_upload_cntrl_tag::flags, rx_dmadesc::hd, RX_HEADER_DESC_PATTERN, rx_upload_cntrl_tag::rxdesc, rxl_adjust_frmlen(), rxl_host_irq_mitigation_update(), rx_hd::upatternrx, and rxdesc::upload_cntrl.

Referenced by rxl_immediate_frame_get().

__INLINE void rxl_update_hw_buf_read ( uint32_t  new_read,
int  id 
)

Update the read address HW register.

This address is used by the HW to know where it shall stop writing into the HW buffer. To be able to distinguish between buffer full and buffer empty cases, the HW toggles the bit 31 of the address each time it wraps around. We therefore have to update this bit as well when updating the read address.

Parameters:
[in] new_read Address inside the RX buffer where we expect the next frame buffer
[in] id Index of the RX buffer (rx_buf_id)

Definition at line 192 of file rxl_hwdesc.c.

References DH_BUF, and rxl_add_wrap_bit().

Referenced by rxl_frame_release().

__INLINE void rxl_update_sw_buf_read ( uint32_t  new_read,
struct rxl_buffer_tag buf 
)

Update the read address of the FW.

This address is used to know where the FW is expecting the next frame written by the HW inside the RX buffer. In order to know if a frame is present in the RX buffer, this address is compared with the HW write address. To be able to distinguish between buffer full and buffer empty cases, the HW toggles the bit 31 of the address each time it wraps around. We use this mechanism on the SW read address too.

Parameters:
[in] new_read Address inside the RX buffer where we expect the next frame buffer
[in,out] buf Pointer to the buffer information structure.

Definition at line 218 of file rxl_hwdesc.c.

References rxl_buffer_tag::read, and rxl_add_wrap_bit().

Referenced by rxl_adjust_sw_buf_read(), rxl_go_to_last_rbd(), and rxl_rxcntrl_frame().


Variable Documentation

uint32_t rxl_hw_buffer1[RXL_BUFFER1_SIZE] [static]

RX buffer 1, i.e.

buffer used by the MAC HW to store all received frames except those requiring a time critical handling (i.e. BA and HE trigger frames)

Definition at line 103 of file rxl_hwdesc.c.

uint32_t rxl_hw_buffer2[RXL_BUFFER2_SIZE] [static]

RX buffer 2, i.e.

buffer used by the MAC HW to store frames requiring a time critical handling (i.e. BA and HE trigger frames)

Definition at line 107 of file rxl_hwdesc.c.


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