diff options
Diffstat (limited to 'drivers/net/bna/bna_types.h')
-rw-r--r-- | drivers/net/bna/bna_types.h | 1127 |
1 files changed, 0 insertions, 1127 deletions
diff --git a/drivers/net/bna/bna_types.h b/drivers/net/bna/bna_types.h deleted file mode 100644 index 2f89cb2..0000000 --- a/drivers/net/bna/bna_types.h +++ /dev/null @@ -1,1127 +0,0 @@ -/* - * Linux network driver for Brocade Converged Network Adapter. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License (GPL) Version 2 as - * published by the Free Software Foundation - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - */ -/* - * Copyright (c) 2005-2010 Brocade Communications Systems, Inc. - * All rights reserved - * www.brocade.com - */ -#ifndef __BNA_TYPES_H__ -#define __BNA_TYPES_H__ - -#include "cna.h" -#include "bna_hw.h" -#include "bfa_cee.h" - -/** - * - * Forward declarations - * - */ - -struct bna_txq; -struct bna_tx; -struct bna_rxq; -struct bna_cq; -struct bna_rx; -struct bna_rxf; -struct bna_port; -struct bna; -struct bnad; - -/** - * - * Enums, primitive data types - * - */ - -enum bna_status { - BNA_STATUS_T_DISABLED = 0, - BNA_STATUS_T_ENABLED = 1 -}; - -enum bna_cleanup_type { - BNA_HARD_CLEANUP = 0, - BNA_SOFT_CLEANUP = 1 -}; - -enum bna_cb_status { - BNA_CB_SUCCESS = 0, - BNA_CB_FAIL = 1, - BNA_CB_INTERRUPT = 2, - BNA_CB_BUSY = 3, - BNA_CB_INVALID_MAC = 4, - BNA_CB_MCAST_LIST_FULL = 5, - BNA_CB_UCAST_CAM_FULL = 6, - BNA_CB_WAITING = 7, - BNA_CB_NOT_EXEC = 8 -}; - -enum bna_res_type { - BNA_RES_T_MEM = 1, - BNA_RES_T_INTR = 2 -}; - -enum bna_mem_type { - BNA_MEM_T_KVA = 1, - BNA_MEM_T_DMA = 2 -}; - -enum bna_intr_type { - BNA_INTR_T_INTX = 1, - BNA_INTR_T_MSIX = 2 -}; - -enum bna_res_req_type { - BNA_RES_MEM_T_COM = 0, - BNA_RES_MEM_T_ATTR = 1, - BNA_RES_MEM_T_FWTRC = 2, - BNA_RES_MEM_T_STATS = 3, - BNA_RES_MEM_T_SWSTATS = 4, - BNA_RES_MEM_T_IBIDX = 5, - BNA_RES_MEM_T_IB_ARRAY = 6, - BNA_RES_MEM_T_INTR_ARRAY = 7, - BNA_RES_MEM_T_IDXSEG_ARRAY = 8, - BNA_RES_MEM_T_TX_ARRAY = 9, - BNA_RES_MEM_T_TXQ_ARRAY = 10, - BNA_RES_MEM_T_RX_ARRAY = 11, - BNA_RES_MEM_T_RXP_ARRAY = 12, - BNA_RES_MEM_T_RXQ_ARRAY = 13, - BNA_RES_MEM_T_UCMAC_ARRAY = 14, - BNA_RES_MEM_T_MCMAC_ARRAY = 15, - BNA_RES_MEM_T_RIT_ENTRY = 16, - BNA_RES_MEM_T_RIT_SEGMENT = 17, - BNA_RES_INTR_T_MBOX = 18, - BNA_RES_T_MAX -}; - -enum bna_tx_res_req_type { - BNA_TX_RES_MEM_T_TCB = 0, - BNA_TX_RES_MEM_T_UNMAPQ = 1, - BNA_TX_RES_MEM_T_QPT = 2, - BNA_TX_RES_MEM_T_SWQPT = 3, - BNA_TX_RES_MEM_T_PAGE = 4, - BNA_TX_RES_INTR_T_TXCMPL = 5, - BNA_TX_RES_T_MAX, -}; - -enum bna_rx_mem_type { - BNA_RX_RES_MEM_T_CCB = 0, /* CQ context */ - BNA_RX_RES_MEM_T_RCB = 1, /* CQ context */ - BNA_RX_RES_MEM_T_UNMAPQ = 2, /* UnmapQ for RxQs */ - BNA_RX_RES_MEM_T_CQPT = 3, /* CQ QPT */ - BNA_RX_RES_MEM_T_CSWQPT = 4, /* S/W QPT */ - BNA_RX_RES_MEM_T_CQPT_PAGE = 5, /* CQPT page */ - BNA_RX_RES_MEM_T_HQPT = 6, /* RX QPT */ - BNA_RX_RES_MEM_T_DQPT = 7, /* RX QPT */ - BNA_RX_RES_MEM_T_HSWQPT = 8, /* RX s/w QPT */ - BNA_RX_RES_MEM_T_DSWQPT = 9, /* RX s/w QPT */ - BNA_RX_RES_MEM_T_DPAGE = 10, /* RX s/w QPT */ - BNA_RX_RES_MEM_T_HPAGE = 11, /* RX s/w QPT */ - BNA_RX_RES_T_INTR = 12, /* Rx interrupts */ - BNA_RX_RES_T_MAX = 13 -}; - -enum bna_mbox_state { - BNA_MBOX_FREE = 0, - BNA_MBOX_POSTED = 1 -}; - -enum bna_tx_type { - BNA_TX_T_REGULAR = 0, - BNA_TX_T_LOOPBACK = 1, -}; - -enum bna_tx_flags { - BNA_TX_F_PORT_STARTED = 1, - BNA_TX_F_ENABLED = 2, - BNA_TX_F_PRIO_LOCK = 4, -}; - -enum bna_tx_mod_flags { - BNA_TX_MOD_F_PORT_STARTED = 1, - BNA_TX_MOD_F_PORT_LOOPBACK = 2, -}; - -enum bna_rx_type { - BNA_RX_T_REGULAR = 0, - BNA_RX_T_LOOPBACK = 1, -}; - -enum bna_rxp_type { - BNA_RXP_SINGLE = 1, - BNA_RXP_SLR = 2, - BNA_RXP_HDS = 3 -}; - -enum bna_rxmode { - BNA_RXMODE_PROMISC = 1, - BNA_RXMODE_ALLMULTI = 2 -}; - -enum bna_rx_event { - RX_E_START = 1, - RX_E_STOP = 2, - RX_E_FAIL = 3, - RX_E_RXF_STARTED = 4, - RX_E_RXF_STOPPED = 5, - RX_E_RXQ_STOPPED = 6, -}; - -enum bna_rx_state { - BNA_RX_STOPPED = 1, - BNA_RX_RXF_START_WAIT = 2, - BNA_RX_STARTED = 3, - BNA_RX_RXF_STOP_WAIT = 4, - BNA_RX_RXQ_STOP_WAIT = 5, -}; - -enum bna_rx_flags { - BNA_RX_F_ENABLE = 0x01, /* bnad enabled rxf */ - BNA_RX_F_PORT_ENABLED = 0x02, /* Port object is enabled */ - BNA_RX_F_PORT_FAILED = 0x04, /* Port in failed state */ -}; - -enum bna_rx_mod_flags { - BNA_RX_MOD_F_PORT_STARTED = 1, - BNA_RX_MOD_F_PORT_LOOPBACK = 2, -}; - -enum bna_rxf_oper_state { - BNA_RXF_OPER_STATE_RUNNING = 0x01, /* rxf operational */ - BNA_RXF_OPER_STATE_PAUSED = 0x02, /* rxf in PAUSED state */ -}; - -enum bna_rxf_flags { - BNA_RXF_FL_STOP_PENDING = 0x01, - BNA_RXF_FL_FAILED = 0x02, - BNA_RXF_FL_RSS_CONFIG_PENDING = 0x04, - BNA_RXF_FL_OPERSTATE_CHANGED = 0x08, - BNA_RXF_FL_RXF_ENABLED = 0x10, - BNA_RXF_FL_VLAN_CONFIG_PENDING = 0x20, -}; - -enum bna_rxf_event { - RXF_E_START = 1, - RXF_E_STOP = 2, - RXF_E_FAIL = 3, - RXF_E_CAM_FLTR_MOD = 4, - RXF_E_STARTED = 5, - RXF_E_STOPPED = 6, - RXF_E_CAM_FLTR_RESP = 7, - RXF_E_PAUSE = 8, - RXF_E_RESUME = 9, - RXF_E_STAT_CLEARED = 10, -}; - -enum bna_rxf_state { - BNA_RXF_STOPPED = 1, - BNA_RXF_START_WAIT = 2, - BNA_RXF_CAM_FLTR_MOD_WAIT = 3, - BNA_RXF_STARTED = 4, - BNA_RXF_CAM_FLTR_CLR_WAIT = 5, - BNA_RXF_STOP_WAIT = 6, - BNA_RXF_PAUSE_WAIT = 7, - BNA_RXF_RESUME_WAIT = 8, - BNA_RXF_STAT_CLR_WAIT = 9, -}; - -enum bna_port_type { - BNA_PORT_T_REGULAR = 0, - BNA_PORT_T_LOOPBACK_INTERNAL = 1, - BNA_PORT_T_LOOPBACK_EXTERNAL = 2, -}; - -enum bna_link_status { - BNA_LINK_DOWN = 0, - BNA_LINK_UP = 1, - BNA_CEE_UP = 2 -}; - -enum bna_llport_flags { - BNA_LLPORT_F_ADMIN_UP = 1, - BNA_LLPORT_F_PORT_ENABLED = 2, - BNA_LLPORT_F_RX_STARTED = 4 -}; - -enum bna_port_flags { - BNA_PORT_F_DEVICE_READY = 1, - BNA_PORT_F_ENABLED = 2, - BNA_PORT_F_PAUSE_CHANGED = 4, - BNA_PORT_F_MTU_CHANGED = 8 -}; - -enum bna_pkt_rates { - BNA_PKT_RATE_10K = 10000, - BNA_PKT_RATE_20K = 20000, - BNA_PKT_RATE_30K = 30000, - BNA_PKT_RATE_40K = 40000, - BNA_PKT_RATE_50K = 50000, - BNA_PKT_RATE_60K = 60000, - BNA_PKT_RATE_70K = 70000, - BNA_PKT_RATE_80K = 80000, -}; - -enum bna_dim_load_types { - BNA_LOAD_T_HIGH_4 = 0, /* 80K <= r */ - BNA_LOAD_T_HIGH_3 = 1, /* 60K <= r < 80K */ - BNA_LOAD_T_HIGH_2 = 2, /* 50K <= r < 60K */ - BNA_LOAD_T_HIGH_1 = 3, /* 40K <= r < 50K */ - BNA_LOAD_T_LOW_1 = 4, /* 30K <= r < 40K */ - BNA_LOAD_T_LOW_2 = 5, /* 20K <= r < 30K */ - BNA_LOAD_T_LOW_3 = 6, /* 10K <= r < 20K */ - BNA_LOAD_T_LOW_4 = 7, /* r < 10K */ - BNA_LOAD_T_MAX = 8 -}; - -enum bna_dim_bias_types { - BNA_BIAS_T_SMALL = 0, /* small pkts > (large pkts * 2) */ - BNA_BIAS_T_LARGE = 1, /* Not BNA_BIAS_T_SMALL */ - BNA_BIAS_T_MAX = 2 -}; - -struct bna_mac { - /* This should be the first one */ - struct list_head qe; - u8 addr[ETH_ALEN]; -}; - -struct bna_mem_descr { - u32 len; - void *kva; - struct bna_dma_addr dma; -}; - -struct bna_mem_info { - enum bna_mem_type mem_type; - u32 len; - u32 num; - u32 align_sz; /* 0/1 = no alignment */ - struct bna_mem_descr *mdl; - void *cookie; /* For bnad to unmap dma later */ -}; - -struct bna_intr_descr { - int vector; -}; - -struct bna_intr_info { - enum bna_intr_type intr_type; - int num; - struct bna_intr_descr *idl; -}; - -union bna_res_u { - struct bna_mem_info mem_info; - struct bna_intr_info intr_info; -}; - -struct bna_res_info { - enum bna_res_type res_type; - union bna_res_u res_u; -}; - -/* HW QPT */ -struct bna_qpt { - struct bna_dma_addr hw_qpt_ptr; - void *kv_qpt_ptr; - u32 page_count; - u32 page_size; -}; - -/** - * - * Device - * - */ - -struct bna_device { - bfa_fsm_t fsm; - struct bfa_ioc ioc; - - enum bna_intr_type intr_type; - int vector; - - void (*ready_cbfn)(struct bnad *bnad, enum bna_cb_status status); - struct bnad *ready_cbarg; - - void (*stop_cbfn)(struct bnad *bnad, enum bna_cb_status status); - struct bnad *stop_cbarg; - - struct bna *bna; -}; - -/** - * - * Mail box - * - */ - -struct bna_mbox_qe { - /* This should be the first one */ - struct list_head qe; - - struct bfa_mbox_cmd cmd; - u32 cmd_len; - /* Callback for port, tx, rx, rxf */ - void (*cbfn)(void *arg, int status); - void *cbarg; -}; - -struct bna_mbox_mod { - enum bna_mbox_state state; - struct list_head posted_q; - u32 msg_pending; - u32 msg_ctr; - struct bna *bna; -}; - -/** - * - * Port - * - */ - -/* Pause configuration */ -struct bna_pause_config { - enum bna_status tx_pause; - enum bna_status rx_pause; -}; - -struct bna_llport { - bfa_fsm_t fsm; - enum bna_llport_flags flags; - - enum bna_port_type type; - - enum bna_link_status link_status; - - int rx_started_count; - - void (*stop_cbfn)(struct bna_port *, enum bna_cb_status); - - struct bna_mbox_qe mbox_qe; - - struct bna *bna; -}; - -struct bna_port { - bfa_fsm_t fsm; - enum bna_port_flags flags; - - enum bna_port_type type; - - struct bna_llport llport; - - struct bna_pause_config pause_config; - u8 priority; - int mtu; - - /* Callback for bna_port_disable(), port_stop() */ - void (*stop_cbfn)(void *, enum bna_cb_status); - void *stop_cbarg; - - /* Callback for bna_port_pause_config() */ - void (*pause_cbfn)(struct bnad *, enum bna_cb_status); - - /* Callback for bna_port_mtu_set() */ - void (*mtu_cbfn)(struct bnad *, enum bna_cb_status); - - void (*link_cbfn)(struct bnad *, enum bna_link_status); - - struct bfa_wc chld_stop_wc; - - struct bna_mbox_qe mbox_qe; - - struct bna *bna; -}; - -/** - * - * Interrupt Block - * - */ - -/* IB index segment structure */ -struct bna_ibidx_seg { - /* This should be the first one */ - struct list_head qe; - - u8 ib_seg_size; - u8 ib_idx_tbl_offset; -}; - -/* Interrupt structure */ -struct bna_intr { - /* This should be the first one */ - struct list_head qe; - int ref_count; - - enum bna_intr_type intr_type; - int vector; - - struct bna_ib *ib; -}; - -/* Doorbell structure */ -struct bna_ib_dbell { - void *__iomem doorbell_addr; - u32 doorbell_ack; -}; - -/* Interrupt timer configuration */ -struct bna_ib_config { - u8 coalescing_timeo; /* Unit is 5usec. */ - - int interpkt_count; - int interpkt_timeo; - - enum ib_flags ctrl_flags; -}; - -/* IB structure */ -struct bna_ib { - /* This should be the first one */ - struct list_head qe; - - int ib_id; - - int ref_count; - int start_count; - - struct bna_dma_addr ib_seg_host_addr; - void *ib_seg_host_addr_kva; - u32 idx_mask; /* Size >= BNA_IBIDX_MAX_SEGSIZE */ - - struct bna_ibidx_seg *idx_seg; - - struct bna_ib_dbell door_bell; - - struct bna_intr *intr; - - struct bna_ib_config ib_config; - - struct bna *bna; -}; - -/* IB module - keeps track of IBs and interrupts */ -struct bna_ib_mod { - struct bna_ib *ib; /* BFI_MAX_IB entries */ - struct bna_intr *intr; /* BFI_MAX_IB entries */ - struct bna_ibidx_seg *idx_seg; /* BNA_IBIDX_TOTAL_SEGS */ - - struct list_head ib_free_q; - - struct list_head ibidx_seg_pool[BFI_IBIDX_TOTAL_POOLS]; - - struct list_head intr_free_q; - struct list_head intr_active_q; - - struct bna *bna; -}; - -/** - * - * Tx object - * - */ - -/* Tx datapath control structure */ -#define BNA_Q_NAME_SIZE 16 -struct bna_tcb { - /* Fast path */ - void **sw_qpt; - void *unmap_q; - u32 producer_index; - u32 consumer_index; - volatile u32 *hw_consumer_index; - u32 q_depth; - void *__iomem q_dbell; - struct bna_ib_dbell *i_dbell; - int page_idx; - int page_count; - /* Control path */ - struct bna_txq *txq; - struct bnad *bnad; - enum bna_intr_type intr_type; - int intr_vector; - u8 priority; /* Current priority */ - unsigned long flags; /* Used by bnad as required */ - int id; - char name[BNA_Q_NAME_SIZE]; -}; - -/* TxQ QPT and configuration */ -struct bna_txq { - /* This should be the first one */ - struct list_head qe; - - int txq_id; - - u8 priority; - - struct bna_qpt qpt; - struct bna_tcb *tcb; - struct bna_ib *ib; - int ib_seg_offset; - - struct bna_tx *tx; - - u64 tx_packets; - u64 tx_bytes; -}; - -/* TxF structure (hardware Tx Function) */ -struct bna_txf { - int txf_id; - enum txf_flags ctrl_flags; - u16 vlan; -}; - -/* Tx object */ -struct bna_tx { - /* This should be the first one */ - struct list_head qe; - - bfa_fsm_t fsm; - enum bna_tx_flags flags; - - enum bna_tx_type type; - - struct list_head txq_q; - struct bna_txf txf; - - /* Tx event handlers */ - void (*tcb_setup_cbfn)(struct bnad *, struct bna_tcb *); - void (*tcb_destroy_cbfn)(struct bnad *, struct bna_tcb *); - void (*tx_stall_cbfn)(struct bnad *, struct bna_tcb *); - void (*tx_resume_cbfn)(struct bnad *, struct bna_tcb *); - void (*tx_cleanup_cbfn)(struct bnad *, struct bna_tcb *); - - /* callback for bna_tx_disable(), bna_tx_stop() */ - void (*stop_cbfn)(void *arg, struct bna_tx *tx, - enum bna_cb_status status); - void *stop_cbarg; - - /* callback for bna_tx_prio_set() */ - void (*prio_change_cbfn)(struct bnad *bnad, struct bna_tx *tx, - enum bna_cb_status status); - - struct bfa_wc txq_stop_wc; - - struct bna_mbox_qe mbox_qe; - - struct bna *bna; - void *priv; /* bnad's cookie */ -}; - -struct bna_tx_config { - int num_txq; - int txq_depth; - enum bna_tx_type tx_type; -}; - -struct bna_tx_event_cbfn { - /* Optional */ - void (*tcb_setup_cbfn)(struct bnad *, struct bna_tcb *); - void (*tcb_destroy_cbfn)(struct bnad *, struct bna_tcb *); - /* Mandatory */ - void (*tx_stall_cbfn)(struct bnad *, struct bna_tcb *); - void (*tx_resume_cbfn)(struct bnad *, struct bna_tcb *); - void (*tx_cleanup_cbfn)(struct bnad *, struct bna_tcb *); -}; - -/* Tx module - keeps track of free, active tx objects */ -struct bna_tx_mod { - struct bna_tx *tx; /* BFI_MAX_TXQ entries */ - struct bna_txq *txq; /* BFI_MAX_TXQ entries */ - - struct list_head tx_free_q; - struct list_head tx_active_q; - - struct list_head txq_free_q; - - /* callback for bna_tx_mod_stop() */ - void (*stop_cbfn)(struct bna_port *port, - enum bna_cb_status status); - - struct bfa_wc tx_stop_wc; - - enum bna_tx_mod_flags flags; - - int priority; - int cee_link; - - u32 txf_bmap[2]; - - struct bna *bna; -}; - -/** - * - * Receive Indirection Table - * - */ - -/* One row of RIT table */ -struct bna_rit_entry { - u8 large_rxq_id; /* used for either large or data buffers */ - u8 small_rxq_id; /* used for either small or header buffers */ -}; - -/* RIT segment */ -struct bna_rit_segment { - struct list_head qe; - - u32 rit_offset; - u32 rit_size; - /** - * max_rit_size: Varies per RIT segment depending on how RIT is - * partitioned - */ - u32 max_rit_size; - - struct bna_rit_entry *rit; -}; - -struct bna_rit_mod { - struct bna_rit_entry *rit; - struct bna_rit_segment *rit_segment; - - struct list_head rit_seg_pool[BFI_RIT_SEG_TOTAL_POOLS]; -}; - -/** - * - * Rx object - * - */ - -/* Rx datapath control structure */ -struct bna_rcb { - /* Fast path */ - void **sw_qpt; - void *unmap_q; - u32 producer_index; - u32 consumer_index; - u32 q_depth; - void *__iomem q_dbell; - int page_idx; - int page_count; - /* Control path */ - struct bna_rxq *rxq; - struct bna_cq *cq; - struct bnad *bnad; - unsigned long flags; - int id; -}; - -/* RxQ structure - QPT, configuration */ -struct bna_rxq { - struct list_head qe; - int rxq_id; - - int buffer_size; - int q_depth; - - struct bna_qpt qpt; - struct bna_rcb *rcb; - - struct bna_rxp *rxp; - struct bna_rx *rx; - - u64 rx_packets; - u64 rx_bytes; - u64 rx_packets_with_error; - u64 rxbuf_alloc_failed; -}; - -/* RxQ pair */ -union bna_rxq_u { - struct { - struct bna_rxq *hdr; - struct bna_rxq *data; - } hds; - struct { - struct bna_rxq *small; - struct bna_rxq *large; - } slr; - struct { - struct bna_rxq *only; - struct bna_rxq *reserved; - } single; -}; - -/* Packet rate for Dynamic Interrupt Moderation */ -struct bna_pkt_rate { - u32 small_pkt_cnt; - u32 large_pkt_cnt; -}; - -/* Completion control structure */ -struct bna_ccb { - /* Fast path */ - void **sw_qpt; - u32 producer_index; - volatile u32 *hw_producer_index; - u32 q_depth; - struct bna_ib_dbell *i_dbell; - struct bna_rcb *rcb[2]; - void *ctrl; /* For bnad */ - struct bna_pkt_rate pkt_rate; - int page_idx; - int page_count; - - /* Control path */ - struct bna_cq *cq; - struct bnad *bnad; - enum bna_intr_type intr_type; - int intr_vector; - u8 rx_coalescing_timeo; /* For NAPI */ - int id; - char name[BNA_Q_NAME_SIZE]; -}; - -/* CQ QPT, configuration */ -struct bna_cq { - int cq_id; - - struct bna_qpt qpt; - struct bna_ccb *ccb; - - struct bna_ib *ib; - u8 ib_seg_offset; - - struct bna_rx *rx; -}; - -struct bna_rss_config { - enum rss_hash_type hash_type; - u8 hash_mask; - u32 toeplitz_hash_key[BFI_RSS_HASH_KEY_LEN]; -}; - -struct bna_hds_config { - enum hds_header_type hdr_type; - int header_size; -}; - -/* This structure is used during RX creation */ -struct bna_rx_config { - enum bna_rx_type rx_type; - int num_paths; - enum bna_rxp_type rxp_type; - int paused; - int q_depth; - /* - * Small/Large (or Header/Data) buffer size to be configured - * for SLR and HDS queue type. Large buffer size comes from - * port->mtu. - */ - int small_buff_size; - - enum bna_status rss_status; - struct bna_rss_config rss_config; - - enum bna_status hds_status; - struct bna_hds_config hds_config; - - enum bna_status vlan_strip_status; -}; - -/* Rx Path structure - one per MSIX vector/CPU */ -struct bna_rxp { - /* This should be the first one */ - struct list_head qe; - - enum bna_rxp_type type; - union bna_rxq_u rxq; - struct bna_cq cq; - - struct bna_rx *rx; - - /* MSI-x vector number for configuring RSS */ - int vector; - - struct bna_mbox_qe mbox_qe; -}; - -/* HDS configuration structure */ -struct bna_rxf_hds { - enum hds_header_type hdr_type; - int header_size; -}; - -/* RSS configuration structure */ -struct bna_rxf_rss { - enum rss_hash_type hash_type; - u8 hash_mask; - u32 toeplitz_hash_key[BFI_RSS_HASH_KEY_LEN]; -}; - -/* RxF structure (hardware Rx Function) */ -struct bna_rxf { - bfa_fsm_t fsm; - int rxf_id; - enum rxf_flags ctrl_flags; - u16 default_vlan_tag; - enum bna_rxf_oper_state rxf_oper_state; - enum bna_status hds_status; - struct bna_rxf_hds hds_cfg; - enum bna_status rss_status; - struct bna_rxf_rss rss_cfg; - struct bna_rit_segment *rit_segment; - struct bna_rx *rx; - u32 forced_offset; - struct bna_mbox_qe mbox_qe; - int mcast_rxq_id; - - /* callback for bna_rxf_start() */ - void (*start_cbfn) (struct bna_rx *rx, enum bna_cb_status status); - struct bna_rx *start_cbarg; - - /* callback for bna_rxf_stop() */ - void (*stop_cbfn) (struct bna_rx *rx, enum bna_cb_status status); - struct bna_rx *stop_cbarg; - - /* callback for bna_rxf_receive_enable() / bna_rxf_receive_disable() */ - void (*oper_state_cbfn) (struct bnad *bnad, struct bna_rx *rx, - enum bna_cb_status status); - struct bnad *oper_state_cbarg; - - /** - * callback for: - * bna_rxf_ucast_set() - * bna_rxf_{ucast/mcast}_add(), - * bna_rxf_{ucast/mcast}_del(), - * bna_rxf_mode_set() - */ - void (*cam_fltr_cbfn)(struct bnad *bnad, struct bna_rx *rx, - enum bna_cb_status status); - struct bnad *cam_fltr_cbarg; - - enum bna_rxf_flags rxf_flags; - - /* List of unicast addresses yet to be applied to h/w */ - struct list_head ucast_pending_add_q; - struct list_head ucast_pending_del_q; - int ucast_pending_set; - /* ucast addresses applied to the h/w */ - struct list_head ucast_active_q; - struct bna_mac *ucast_active_mac; - - /* List of multicast addresses yet to be applied to h/w */ - struct list_head mcast_pending_add_q; - struct list_head mcast_pending_del_q; - /* multicast addresses applied to the h/w */ - struct list_head mcast_active_q; - - /* Rx modes yet to be applied to h/w */ - enum bna_rxmode rxmode_pending; - enum bna_rxmode rxmode_pending_bitmask; - /* Rx modes applied to h/w */ - enum bna_rxmode rxmode_active; - - enum bna_status vlan_filter_status; - u32 vlan_filter_table[(BFI_MAX_VLAN + 1) / 32]; -}; - -/* Rx object */ -struct bna_rx { - /* This should be the first one */ - struct list_head qe; - - bfa_fsm_t fsm; - - enum bna_rx_type type; - - /* list-head for RX path objects */ - struct list_head rxp_q; - - struct bna_rxf rxf; - - enum bna_rx_flags rx_flags; - - struct bna_mbox_qe mbox_qe; - - struct bfa_wc rxq_stop_wc; - - /* Rx event handlers */ - void (*rcb_setup_cbfn)(struct bnad *, struct bna_rcb *); - void (*rcb_destroy_cbfn)(struct bnad *, struct bna_rcb *); - void (*ccb_setup_cbfn)(struct bnad *, struct bna_ccb *); - void (*ccb_destroy_cbfn)(struct bnad *, struct bna_ccb *); - void (*rx_cleanup_cbfn)(struct bnad *, struct bna_ccb *); - void (*rx_post_cbfn)(struct bnad *, struct bna_rcb *); - - /* callback for bna_rx_disable(), bna_rx_stop() */ - void (*stop_cbfn)(void *arg, struct bna_rx *rx, - enum bna_cb_status status); - void *stop_cbarg; - - struct bna *bna; - void *priv; /* bnad's cookie */ -}; - -struct bna_rx_event_cbfn { - /* Optional */ - void (*rcb_setup_cbfn)(struct bnad *, struct bna_rcb *); - void (*rcb_destroy_cbfn)(struct bnad *, struct bna_rcb *); - void (*ccb_setup_cbfn)(struct bnad *, struct bna_ccb *); - void (*ccb_destroy_cbfn)(struct bnad *, struct bna_ccb *); - /* Mandatory */ - void (*rx_cleanup_cbfn)(struct bnad *, struct bna_ccb *); - void (*rx_post_cbfn)(struct bnad *, struct bna_rcb *); -}; - -/* Rx module - keeps track of free, active rx objects */ -struct bna_rx_mod { - struct bna *bna; /* back pointer to parent */ - struct bna_rx *rx; /* BFI_MAX_RXQ entries */ - struct bna_rxp *rxp; /* BFI_MAX_RXQ entries */ - struct bna_rxq *rxq; /* BFI_MAX_RXQ entries */ - - struct list_head rx_free_q; - struct list_head rx_active_q; - int rx_free_count; - - struct list_head rxp_free_q; - int rxp_free_count; - - struct list_head rxq_free_q; - int rxq_free_count; - - enum bna_rx_mod_flags flags; - - /* callback for bna_rx_mod_stop() */ - void (*stop_cbfn)(struct bna_port *port, - enum bna_cb_status status); - - struct bfa_wc rx_stop_wc; - u32 dim_vector[BNA_LOAD_T_MAX][BNA_BIAS_T_MAX]; - u32 rxf_bmap[2]; -}; - -/** - * - * CAM - * - */ - -struct bna_ucam_mod { - struct bna_mac *ucmac; /* BFI_MAX_UCMAC entries */ - struct list_head free_q; - - struct bna *bna; -}; - -struct bna_mcam_mod { - struct bna_mac *mcmac; /* BFI_MAX_MCMAC entries */ - struct list_head free_q; - - struct bna *bna; -}; - -/** - * - * Statistics - * - */ - -struct bna_tx_stats { - int tx_state; - int tx_flags; - int num_txqs; - u32 txq_bmap[2]; - int txf_id; -}; - -struct bna_rx_stats { - int rx_state; - int rx_flags; - int num_rxps; - int num_rxqs; - u32 rxq_bmap[2]; - u32 cq_bmap[2]; - int rxf_id; - int rxf_state; - int rxf_oper_state; - int num_active_ucast; - int num_active_mcast; - int rxmode_active; - int vlan_filter_status; - u32 vlan_filter_table[(BFI_MAX_VLAN + 1) / 32]; - int rss_status; - int hds_status; -}; - -struct bna_sw_stats { - int device_state; - int port_state; - int port_flags; - int llport_state; - int priority; - int num_active_tx; - int num_active_rx; - struct bna_tx_stats tx_stats[BFI_MAX_TXQ]; - struct bna_rx_stats rx_stats[BFI_MAX_RXQ]; -}; - -struct bna_stats { - u32 txf_bmap[2]; - u32 rxf_bmap[2]; - struct bfi_ll_stats *hw_stats; - struct bna_sw_stats *sw_stats; -}; - -/** - * - * BNA - * - */ - -struct bna { - struct bfa_pcidev pcidev; - - int port_num; - - struct bna_chip_regs regs; - - struct bna_dma_addr hw_stats_dma; - struct bna_stats stats; - - struct bna_device device; - struct bfa_cee cee; - - struct bna_mbox_mod mbox_mod; - - struct bna_port port; - - struct bna_tx_mod tx_mod; - - struct bna_rx_mod rx_mod; - - struct bna_ib_mod ib_mod; - - struct bna_ucam_mod ucam_mod; - struct bna_mcam_mod mcam_mod; - - struct bna_rit_mod rit_mod; - - int rxf_promisc_id; - - struct bna_mbox_qe mbox_qe; - - struct bnad *bnad; -}; - -#endif /* __BNA_TYPES_H__ */ |