d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*******************************************************************************
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi* bd_chain.h - bd chain interface
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi*******************************************************************************/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifndef _BD_CHAIN_ST_H
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define _BD_CHAIN_ST_H
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include "lm_defs.h"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _lm_bd_chain_next {
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t addr_lo /* Single continuous buffer low pointer */;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t addr_hi /* Single continuous buffer high pointer */;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t reserved[8] /* keeps same size as other eth tx bd types */;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} lm_bd_chain_next ;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _lm_bd_chain_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void *bd_chain_virt; /* virt addr of first page of the chain */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_address_t bd_chain_phy; /* phys addr of first page of the chain */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi char *next_bd; /* pointer to next bd to produce or consume */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16_t page_cnt; /* number of chain pages */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16_t capacity; /* number of _usable_ bds (e.g. not including _next_ bds) */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16_t bd_left; /* number of not produced, _usable_ bds */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16_t prod_idx; /* index of next bd to produce (cyclic) */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16_t cons_idx; /* index of next bd to consume (cyclic) */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16_t bds_per_page; /* Number of bds per page */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16_t bds_per_page_mask; /* Mask of number of bds per page */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16_t usable_bds_per_page; /* Number of usable bds in a page (taking into account last 16 bytes for 'next-ptr' */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t bd_size; /* currently 8 and 16 bytes are supported. ("next_bd" is always 18 bytes) */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t bds_skip_eop; /* num bds to skip at the end of the page due to the 'next pointer' */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t reserved[2];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi //PBL
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void *pbl_virt_addr_table;/* virt table pbl */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_address_t *pbl_phys_addr_table;/* phys table pbl */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16_t pbe_idx; /* index of the current pbe page */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16_t usable_bds_mask; /* Mask used to check if end of page was reached */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t b_is_chain_mode; /* indicate if using bd_chain interface or pbl interface */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t num_bd_to_sub; /* Number of bds to subtract when checking if end of page was reached */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t reserved1[2];
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} lm_bd_chain_t;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _lm_hc_sb_info_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t hc_sb;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t hc_index_value;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u16_t iro_dhc_offset;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} lm_hc_sb_info_t;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* _BD_CHAIN_ST_H */