34#ifndef _CXGB_ADAPTER_H_
35#define _CXGB_ADAPTER_H_
41#include <sys/socket.h>
42#include <sys/sockio.h>
43#include <sys/condvar.h>
44#include <sys/buf_ring.h>
45#include <sys/taskqueue.h>
47#include <net/ethernet.h>
49#include <net/if_var.h>
50#include <net/if_media.h>
52#include <netinet/in.h>
53#include <netinet/tcp_lro.h>
55#include <machine/bus.h>
56#include <machine/resource.h>
58#include <dev/pci/pcireg.h>
59#include <dev/pci/pcivar.h>
68#define MTX_INIT(lock, lockname, class, flags) \
70 printf("initializing %s at %s:%d\n", lockname, __FILE__, __LINE__); \
71 mtx_init((lock), lockname, class, flags); \
74#define MTX_DESTROY(lock) \
76 printf("destroying %s at %s:%d\n", (lock)->lock_object.lo_name, __FILE__, __LINE__); \
77 mtx_destroy((lock)); \
81#define MTX_INIT mtx_init
82#define MTX_DESTROY mtx_destroy
116#define PORT_LOCK_NAME_LEN 32
117#define PORT_NAME_LEN 32
139#define IS_DOOMED(p) (p->flags & DOOMED)
140#define SET_DOOMED(p) do {p->flags |= DOOMED;} while (0)
141#define IS_BUSY(sc) (sc->flags & CXGB_BUSY)
142#define SET_BUSY(sc) do {sc->flags |= CXGB_BUSY;} while (0)
143#define CLR_BUSY(sc) do {sc->flags &= ~CXGB_BUSY;} while (0)
145#define FL_Q_SIZE 4096
146#define JUMBO_Q_SIZE 1024
147#define RSPQ_Q_SIZE 2048
148#define TX_ETH_Q_SIZE 1024
149#define TX_OFLD_Q_SIZE 1024
150#define TX_CTRL_Q_SIZE 256
160#define WR_LEN (WR_FLITS * 8)
161#define PIO_LEN (WR_LEN - sizeof(struct cpl_tx_pkt_lso))
168#define RX_BUNDLE_SIZE 8
195#define RSPQ_NAME_LEN 32
227#define TXQ_TRANSMITTING 0x1
270#define SGE_PSTAT_MAX (SGE_PSTAT_VLANINS+1)
272#define QS_EXITING 0x1
273#define QS_RUNNING 0x2
275#define QS_FLUSHING 0x8
276#define QS_TIMEOUT 0x10
291#define QS_NAME_LEN 32
315 bus_space_handle_t
bh;
345#define tunq_fill u.fill
346#define tunq_coalesce u.coalesce
353 struct taskqueue *
tq;
389#define ADAPTER_LOCK_NAME_LEN 32
398#define NUM_CPL_HANDLERS 0xa7
409#define MDIO_LOCK(adapter) mtx_lock(&(adapter)->mdio_lock)
410#define MDIO_UNLOCK(adapter) mtx_unlock(&(adapter)->mdio_lock)
411#define ELMR_LOCK(adapter) mtx_lock(&(adapter)->elmer_lock)
412#define ELMR_UNLOCK(adapter) mtx_unlock(&(adapter)->elmer_lock)
415#define PORT_LOCK(port) mtx_lock(&(port)->lock);
416#define PORT_UNLOCK(port) mtx_unlock(&(port)->lock);
417#define PORT_LOCK_INIT(port, name) mtx_init(&(port)->lock, name, 0, MTX_DEF)
418#define PORT_LOCK_DEINIT(port) mtx_destroy(&(port)->lock)
419#define PORT_LOCK_ASSERT_NOTOWNED(port) mtx_assert(&(port)->lock, MA_NOTOWNED)
420#define PORT_LOCK_ASSERT_OWNED(port) mtx_assert(&(port)->lock, MA_OWNED)
422#define ADAPTER_LOCK(adap) mtx_lock(&(adap)->lock);
423#define ADAPTER_UNLOCK(adap) mtx_unlock(&(adap)->lock);
424#define ADAPTER_LOCK_INIT(adap, name) mtx_init(&(adap)->lock, name, 0, MTX_DEF)
425#define ADAPTER_LOCK_DEINIT(adap) mtx_destroy(&(adap)->lock)
426#define ADAPTER_LOCK_ASSERT_NOTOWNED(adap) mtx_assert(&(adap)->lock, MA_NOTOWNED)
427#define ADAPTER_LOCK_ASSERT_OWNED(adap) mtx_assert(&(adap)->lock, MA_OWNED)
430static __inline uint32_t
476 return &adap->
port[idx];
484 int speed,
int duplex,
int fc,
int mac_was_reset);
488int t3_offload_tx(
struct adapter *,
struct mbuf *);
515 unsigned char *data);
521#define desc_reclaimable(q) ((int)((q)->processed - (q)->cleaned - TX_MAX_DESC))
523#define container_of(p, stype, field) ((stype *)(((uint8_t *)(p)) - offsetof(stype, field)))
545#define OFFLOAD_DEVMAP_BIT (1 << MAX_NPORTS)
558int cxgb_debugnet_encap(
struct sge_qset *qs,
struct mbuf **m);
560int cxgb_debugnet_poll_tx(
struct sge_qset *qs);
static __inline struct sge_qset * txq_to_qset(struct sge_txq *q, int qidx)
static __inline struct sge_qset * rspq_to_qset(struct sge_rspq *q)
void t3_free_tx_desc(struct sge_qset *qs, int n, int qid)
void t3_update_qset_coalesce(struct sge_qset *qs, const struct qset_params *p)
uint8_t hw_addr[ETHER_ADDR_LEN]
void t3_intr_msi(void *data)
#define ADAPTER_LOCK_NAME_LEN
void t3_sge_err_intr_handler(adapter_t *adapter)
static __inline void t3_write_reg(adapter_t *adapter, uint32_t reg_addr, uint32_t val)
void t3_add_configured_sysctls(adapter_t *sc)
void t3_iterate(void(*)(struct adapter *, void *), void *)
int t3_mgmt_tx(adapter_t *adap, struct mbuf *m)
static __inline uint32_t t3_read_reg(adapter_t *adapter, uint32_t reg_addr)
static __inline void t3_os_pci_read_config_4(adapter_t *adapter, int reg, uint32_t *val)
int t3_os_pci_save_state(struct adapter *adapter)
int t3_os_pci_restore_state(struct adapter *adapter)
void t3_free_sge_resources(adapter_t *, int)
int t3_sge_reset_adapter(adapter_t *)
void t3_os_phymod_changed(struct adapter *adap, int port_id)
static __inline struct sge_qset * fl_to_qset(struct sge_fl *q, int qidx)
int t3_sge_alloc_qset(adapter_t *, uint32_t, int, int, const struct qset_params *, int, struct port_info *)
void cxgb_refresh_stats(struct port_info *)
int t3_sge_init_port(struct port_info *)
int(* cpl_handler_t)(struct sge_qset *, struct rsp_desc *, struct mbuf *)
void t3_sge_stop(adapter_t *)
void t3_intr_msix(void *data)
int t3_register_cpl_handler(struct adapter *, int, cpl_handler_t)
static __inline void t3_os_pci_read_config_2(adapter_t *adapter, int reg, uint16_t *val)
void t3_add_attach_sysctls(adapter_t *sc)
#define container_of(p, stype, field)
int t3_get_desc(const struct sge_qset *qs, unsigned int qnum, unsigned int idx, unsigned char *data)
void cxgb_tx_watchdog(void *arg)
int t3_os_find_pci_capability(adapter_t *adapter, int cap)
void t3_os_link_changed(adapter_t *adapter, int port_id, int link_status, int speed, int duplex, int fc, int mac_was_reset)
int t3_sge_free(struct adapter *)
void cxgb_qflush(struct ifnet *ifp)
void t3_rx_eth(struct adapter *adap, struct mbuf *m, int ethpad)
int t3_sge_alloc(struct adapter *)
void t3_os_set_hw_addr(adapter_t *adapter, int port_idx, u8 hw_addr[])
#define OFFLOAD_DEVMAP_BIT
static __inline struct port_info * adap2pinfo(struct adapter *adap, int idx)
static __inline void t3_os_pci_write_config_2(adapter_t *adapter, int reg, uint16_t val)
void t3_sge_start(adapter_t *)
int t3_sge_init_adapter(adapter_t *)
#define PORT_LOCK_NAME_LEN
static __inline void t3_os_pci_write_config_4(adapter_t *adapter, int reg, uint32_t val)
void t3b_intr(void *data)
void t3_os_link_intr(struct port_info *)
static int offload_running(adapter_t *adapter)
static __inline void t3_init_rx_mode(struct t3_rx_mode *rm, struct port_info *port)
int cxgb_transmit(struct ifnet *ifp, struct mbuf *m)
char mdiolockbuf[ADAPTER_LOCK_NAME_LEN]
struct resource * msix_regs_res
char port_types[MAX_NPORTS+1]
int msix_irq_rid[SGE_QSETS]
unsigned int slow_intr_mask
struct resource * irq_res
driver_intr_t * cxgb_intr
struct port_info port[MAX_NPORTS]
struct callout sge_timer_ch
device_t portdev[MAX_NPORTS]
SLIST_ENTRY(adapter) link
struct resource * regs_res
struct resource * udbs_res
struct callout cxgb_tick_ch
struct adapter_params params
struct task slow_intr_task
char reglockbuf[ADAPTER_LOCK_NAME_LEN]
char elmerlockbuf[ADAPTER_LOCK_NAME_LEN]
bus_dma_tag_t parent_dmat
uint8_t rrss_map[SGE_QSETS]
struct filter_info * filters
bus_dma_tag_t rx_jumbo_dmat
struct resource * msix_irq_res[SGE_QSETS]
unsigned long irq_stats[IRQ_NUM_STATS]
uint16_t rspq_map[RSS_TABLE_SIZE]
char lockbuf[ADAPTER_LOCK_NAME_LEN]
void * msix_intr_tag[SGE_QSETS]
uint8_t hw_addr[ETHER_ADDR_LEN]
struct task timer_reclaim_task
struct task link_check_task
struct timeval last_refreshed
char namebuf[PORT_NAME_LEN]
char lockbuf[PORT_LOCK_NAME_LEN]
struct callout link_check_ch
const struct port_type_info * port_type
struct rx_sw_desc * sdesc
char namebuf[QS_NAME_LEN]
struct sge_fl fl[SGE_RXQ_PER_SET]
struct sge_txq txq[SGE_TXQ_PER_SET]
char lockbuf[RSPQ_NAME_LEN]
struct t3_mbuf_hdr rspq_mh
uint64_t txq_direct_bytes
struct tx_sw_desc * sdesc
struct callout txq_watchdog
struct sg_ent txq_sgl[TX_MAX_SEGS/2+1]
uint64_t txq_direct_packets
struct task qreclaim_task
struct sge_qset qs[SGE_QSETS]