aboutsummaryrefslogtreecommitdiff
path: root/drivers/net/bna/bna_types.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/bna/bna_types.h')
-rw-r--r--drivers/net/bna/bna_types.h1127
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 2f89cb23524..00000000000
--- 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__ */