root/usr/src/uts/common/io/bnxe/577xx/drivers/common/lm/device/bd_chain_st.h

/*******************************************************************************
* bd_chain.h - bd chain interface 
*******************************************************************************/
#ifndef _BD_CHAIN_ST_H
#define _BD_CHAIN_ST_H

#include "lm_defs.h"

typedef struct _lm_bd_chain_next {
        u32_t addr_lo /* Single continuous buffer low pointer */;
        u32_t addr_hi /* Single continuous buffer high pointer */;
        u8_t reserved[8] /* keeps same size as other eth tx bd types */;
} lm_bd_chain_next ;


typedef struct _lm_bd_chain_t 
{
    void          *bd_chain_virt;      /* virt addr of first page of the chain */           
    lm_address_t  bd_chain_phy;        /* phys addr of first page of the chain */     
    char          *next_bd;            /* pointer to next bd to produce or consume */    
    u16_t         page_cnt;            /* number of chain pages */
    u16_t         capacity;            /* number of _usable_ bds (e.g. not including _next_ bds) */
    u16_t         bd_left;             /* number of not produced, _usable_ bds */
    u16_t         prod_idx;            /* index of next bd to produce (cyclic) */    
    u16_t         cons_idx;            /* index of next bd to consume (cyclic) */            
    u16_t         bds_per_page;        /* Number of bds per page */
    u16_t         bds_per_page_mask;   /* Mask of number of bds per page */
    u16_t         usable_bds_per_page; /* Number of usable bds in a page (taking into account last 16 bytes for 'next-ptr' */
    u8_t          bd_size;             /* currently 8 and 16 bytes are supported. ("next_bd" is always 18 bytes) */
    u8_t          bds_skip_eop;        /* num bds to skip at the end of the page due to the 'next pointer' */
    u8_t          reserved[2];    

    //PBL
    void          *pbl_virt_addr_table;/* virt table pbl */
    lm_address_t  *pbl_phys_addr_table;/* phys table pbl */
    u16_t         pbe_idx;             /* index of the current pbe page */
    u16_t         usable_bds_mask;     /* Mask used to check if end of page was reached */
    u8_t          b_is_chain_mode;     /* indicate if using bd_chain interface or pbl interface */
    u8_t          num_bd_to_sub;       /* Number of bds to subtract when checking if end of page was reached */
    u8_t          reserved1[2];
} lm_bd_chain_t;


typedef struct _lm_hc_sb_info_t
{
    u8_t hc_sb;
    u8_t hc_index_value;
    u16_t iro_dhc_offset;
} lm_hc_sb_info_t;


#endif /* _BD_CHAIN_ST_H */