FreeBSD kernel CXGB device code
cxgb_adapter.h
Go to the documentation of this file.
1/**************************************************************************
2SPDX-License-Identifier: BSD-2-Clause-FreeBSD
4Copyright (c) 2007-2009, Chelsio Inc.
5All rights reserved.
7Redistribution and use in source and binary forms, with or without
8modification, are permitted provided that the following conditions are met:
10 1. Redistributions of source code must retain the above copyright notice,
11 this list of conditions and the following disclaimer.
13 2. Neither the name of the Chelsio Corporation nor the names of its
14 contributors may be used to endorse or promote products derived from
15 this software without specific prior written permission.
17THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
21LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27POSSIBILITY OF SUCH DAMAGE.
28
29$FreeBSD$
30
31***************************************************************************/
32
33
34#ifndef _CXGB_ADAPTER_H_
35#define _CXGB_ADAPTER_H_
36
37#include <sys/lock.h>
38#include <sys/mutex.h>
39#include <sys/rman.h>
40#include <sys/mbuf.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>
46
47#include <net/ethernet.h>
48#include <net/if.h>
49#include <net/if_var.h>
50#include <net/if_media.h>
51#include <net/if_dl.h>
52#include <netinet/in.h>
53#include <netinet/tcp_lro.h>
54
55#include <machine/bus.h>
56#include <machine/resource.h>
57
58#include <dev/pci/pcireg.h>
59#include <dev/pci/pcivar.h>
60
61#include <cxgb_osdep.h>
62
63struct adapter;
64struct sge_qset;
65extern int cxgb_debug;
66
67#ifdef DEBUG_LOCKING
68#define MTX_INIT(lock, lockname, class, flags) \
69 do { \
70 printf("initializing %s at %s:%d\n", lockname, __FILE__, __LINE__); \
71 mtx_init((lock), lockname, class, flags); \
72 } while (0)
73
74#define MTX_DESTROY(lock) \
75 do { \
76 printf("destroying %s at %s:%d\n", (lock)->lock_object.lo_name, __FILE__, __LINE__); \
77 mtx_destroy((lock)); \
78 } while (0)
79
80#else
81#define MTX_INIT mtx_init
82#define MTX_DESTROY mtx_destroy
83#endif
84
85enum {
86 LF_NO = 0,
88 LF_YES
89};
90
91struct port_info {
93 struct ifnet *ifp;
95 int flags;
97 struct cphy phy;
98 struct cmac mac;
99 struct timeval last_refreshed;
101 struct ifmedia media;
102 struct mtx lock;
103 uint32_t port_id;
104 uint32_t tx_chan;
105 uint32_t txpkt_intf;
106 uint32_t first_qset;
107 uint32_t nqsets;
109
110 uint8_t hw_addr[ETHER_ADDR_LEN];
111 struct callout link_check_ch;
112 struct task link_check_task;
114 struct cdev *port_cdev;
115
116#define PORT_LOCK_NAME_LEN 32
117#define PORT_NAME_LEN 32
120} __aligned(CACHE_LINE_SIZE);
121
122enum {
123 /* adapter flags */
124 FULL_INIT_DONE = (1 << 0),
125 USING_MSI = (1 << 1),
126 USING_MSIX = (1 << 2),
127 QUEUES_BOUND = (1 << 3),
128 FW_UPTODATE = (1 << 4),
129 TPS_UPTODATE = (1 << 5),
130 CXGB_SHUTDOWN = (1 << 6),
131 CXGB_OFLD_INIT = (1 << 7),
132 TP_PARITY_INIT = (1 << 8),
133 CXGB_BUSY = (1 << 9),
134 TOM_INIT_DONE = (1 << 10),
135
136 /* port flags */
137 DOOMED = (1 << 0),
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)
144
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
151
152enum { TXQ_ETH = 0,
154 TXQ_CTRL = 2, };
155
156
157/*
158 * work request size in bytes
159 */
160#define WR_LEN (WR_FLITS * 8)
161#define PIO_LEN (WR_LEN - sizeof(struct cpl_tx_pkt_lso))
162
163struct lro_state {
164 unsigned short enabled;
165 struct lro_ctrl ctrl;
166};
167
168#define RX_BUNDLE_SIZE 8
169
170struct rsp_desc;
171
172struct sge_rspq {
173 uint32_t credits;
174 uint32_t size;
175 uint32_t cidx;
176 uint32_t gen;
177 uint32_t polling;
178 uint32_t holdoff_tmr;
179 uint32_t next_holdoff;
180 uint32_t imm_data;
181 uint32_t async_notif;
182 uint32_t cntxt_id;
183 uint32_t offload_pkts;
184 uint32_t pure_rsps;
186 uint32_t starved;
187
188 bus_addr_t phys_addr;
189 bus_dma_tag_t desc_tag;
190 bus_dmamap_t desc_map;
191
193 struct rsp_desc *desc;
194 struct mtx lock;
195#define RSPQ_NAME_LEN 32
199};
200
201struct rx_desc;
202struct rx_sw_desc;
203
204struct sge_fl {
205 uint32_t buf_size;
206 uint32_t credits;
207 uint32_t size;
208 uint32_t cidx;
209 uint32_t pidx;
210 uint32_t gen;
211 uint32_t db_pending;
212 bus_addr_t phys_addr;
213 uint32_t cntxt_id;
214 uint32_t empty;
215 bus_dma_tag_t desc_tag;
216 bus_dmamap_t desc_map;
217 bus_dma_tag_t entry_tag;
218 uma_zone_t zone;
219 struct rx_desc *desc;
221 int type;
222};
223
224struct tx_desc;
225struct tx_sw_desc;
226
227#define TXQ_TRANSMITTING 0x1
228
229struct sge_txq {
230 uint64_t flags;
231 uint32_t in_use;
232 uint32_t size;
233 uint32_t processed;
234 uint32_t cleaned;
235 uint32_t stop_thres;
236 uint32_t cidx;
237 uint32_t pidx;
238 uint32_t gen;
239 uint32_t unacked;
240 uint32_t db_pending;
241 struct tx_desc *desc;
243 uint32_t token;
244 bus_addr_t phys_addr;
245 struct task qresume_task;
246 struct task qreclaim_task;
247 uint32_t cntxt_id;
248 uint64_t stops;
249 uint64_t restarts;
250 bus_dma_tag_t desc_tag;
251 bus_dmamap_t desc_map;
252 bus_dma_tag_t entry_tag;
253 struct mbufq sendq;
254
255 struct buf_ring *txq_mr;
256 struct ifaltq *txq_ifq;
257 struct callout txq_timer;
258 struct callout txq_watchdog;
260 uint32_t txq_skipped;
261 uint32_t txq_enqueued;
266 uint64_t txq_frees;
267 struct sg_ent txq_sgl[TX_MAX_SEGS / 2 + 1];
268};
269
270#define SGE_PSTAT_MAX (SGE_PSTAT_VLANINS+1)
271
272#define QS_EXITING 0x1
273#define QS_RUNNING 0x2
274#define QS_BOUND 0x4
275#define QS_FLUSHING 0x8
276#define QS_TIMEOUT 0x10
277
278struct sge_qset {
283 uint32_t txq_stopped; /* which Tx queues are stopped */
285 struct adapter *adap;
286 int idx; /* qset # */
289 struct cv qs_cv;
290 struct mtx lock;
291#define QS_NAME_LEN 32
293};
294
295struct sge {
297 struct mtx reg_lock;
298};
299
300struct filter_info;
301
302typedef int (*cpl_handler_t)(struct sge_qset *, struct rsp_desc *,
303 struct mbuf *);
304
305struct adapter {
307 device_t dev;
308 int flags;
309
310 /* PCI register resources */
312 struct resource *regs_res;
314 struct resource *udbs_res;
315 bus_space_handle_t bh;
316 bus_space_tag_t bt;
317 bus_size_t mmio_len;
318 uint32_t link_width;
319
320 /* DMA resources */
321 bus_dma_tag_t parent_dmat;
322 bus_dma_tag_t rx_dmat;
323 bus_dma_tag_t rx_jumbo_dmat;
324 bus_dma_tag_t tx_dmat;
325
326 /* Interrupt resources */
327 struct resource *irq_res;
329 void *intr_tag;
330
332 struct resource *msix_regs_res;
333
334 struct resource *msix_irq_res[SGE_QSETS];
337 uint8_t rxpkt_map[8]; /* maps RX_PKT interface values to port ids */
338 uint8_t rrss_map[SGE_QSETS]; /* revers RSS map table */
339 uint16_t rspq_map[RSS_TABLE_SIZE]; /* maps 7-bit cookie to qidx */
340 union {
341 uint8_t fill[SGE_QSETS];
342 uint64_t coalesce;
343 } u;
344
345#define tunq_fill u.fill
346#define tunq_coalesce u.coalesce
347
349
350 /* Tasks */
351 struct task slow_intr_task;
352 struct task tick_task;
353 struct taskqueue *tq;
354 struct callout cxgb_tick_ch;
355 struct callout sge_timer_ch;
356
357 /* Register lock for use by the hardware layer */
358 struct mtx mdio_lock;
359 struct mtx elmer_lock;
360
361 /* Bookkeeping for the hardware layer */
363 unsigned int slow_intr_mask;
364 unsigned long irq_stats[IRQ_NUM_STATS];
365
366 unsigned nqsets;
367 struct sge sge;
368 struct mc7 pmrx;
369 struct mc7 pmtx;
370 struct mc7 cm;
371 struct mc5 mc5;
372
375#ifdef TCP_OFFLOAD
376 void *tom_softc;
377 void *iwarp_softc;
378#endif
379 char fw_version[64];
382#ifdef TCP_OFFLOAD
383 int offload_map;
384#endif
385 struct mtx lock;
386 driver_intr_t *cxgb_intr;
388
389#define ADAPTER_LOCK_NAME_LEN 32
394
396
397#ifdef TCP_OFFLOAD
398#define NUM_CPL_HANDLERS 0xa7
399 cpl_handler_t cpl_handler[NUM_CPL_HANDLERS] __aligned(CACHE_LINE_SIZE);
400#endif
401};
402
404
405 uint32_t idx;
407};
408
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)
413
414
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)
421
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)
428
429
430static __inline uint32_t
431t3_read_reg(adapter_t *adapter, uint32_t reg_addr)
432{
433 return (bus_space_read_4(adapter->bt, adapter->bh, reg_addr));
434}
435
436static __inline void
437t3_write_reg(adapter_t *adapter, uint32_t reg_addr, uint32_t val)
438{
439 bus_space_write_4(adapter->bt, adapter->bh, reg_addr, val);
440}
441
442static __inline void
444{
445 *val = pci_read_config(adapter->dev, reg, 4);
446}
447
448static __inline void
450{
451 pci_write_config(adapter->dev, reg, val, 4);
452}
453
454static __inline void
456{
457 *val = pci_read_config(adapter->dev, reg, 2);
458}
459
460static __inline void
462{
463 pci_write_config(adapter->dev, reg, val, 2);
464}
465
466static __inline void
467t3_init_rx_mode(struct t3_rx_mode *rm, struct port_info *port)
468{
469 rm->idx = 0;
470 rm->port = port;
471}
472
473static __inline struct port_info *
474adap2pinfo(struct adapter *adap, int idx)
475{
476 return &adap->port[idx];
477}
478
482void t3_os_link_intr(struct port_info *);
483void t3_os_link_changed(adapter_t *adapter, int port_id, int link_status,
484 int speed, int duplex, int fc, int mac_was_reset);
485void t3_os_phymod_changed(struct adapter *adap, int port_id);
487#ifdef TCP_OFFLOAD
488int t3_offload_tx(struct adapter *, struct mbuf *);
489#endif
490void t3_os_set_hw_addr(adapter_t *adapter, int port_idx, u8 hw_addr[]);
491int t3_mgmt_tx(adapter_t *adap, struct mbuf *m);
493
494int t3_sge_alloc(struct adapter *);
495int t3_sge_free(struct adapter *);
496int t3_sge_alloc_qset(adapter_t *, uint32_t, int, int, const struct qset_params *,
497 int, struct port_info *);
499void t3_sge_start(adapter_t *);
500void t3_sge_stop(adapter_t *);
501void t3b_intr(void *data);
502void t3_intr_msi(void *data);
503void t3_intr_msix(void *data);
504
507int t3_sge_init_port(struct port_info *);
508void t3_free_tx_desc(struct sge_qset *qs, int n, int qid);
509
510void t3_rx_eth(struct adapter *adap, struct mbuf *m, int ethpad);
511
514int t3_get_desc(const struct sge_qset *qs, unsigned int qnum, unsigned int idx,
515 unsigned char *data);
516void t3_update_qset_coalesce(struct sge_qset *qs, const struct qset_params *p);
517
518/*
519 * XXX figure out how we can return this to being private to sge
520 */
521#define desc_reclaimable(q) ((int)((q)->processed - (q)->cleaned - TX_MAX_DESC))
522
523#define container_of(p, stype, field) ((stype *)(((uint8_t *)(p)) - offsetof(stype, field)))
524
525static __inline struct sge_qset *
526fl_to_qset(struct sge_fl *q, int qidx)
527{
528 return container_of(q, struct sge_qset, fl[qidx]);
529}
530
531static __inline struct sge_qset *
533{
534 return container_of(q, struct sge_qset, rspq);
535}
536
537static __inline struct sge_qset *
538txq_to_qset(struct sge_txq *q, int qidx)
539{
540 return container_of(q, struct sge_qset, txq[qidx]);
541}
542
543#undef container_of
544
545#define OFFLOAD_DEVMAP_BIT (1 << MAX_NPORTS)
547{
549}
550
551void cxgb_tx_watchdog(void *arg);
552int cxgb_transmit(struct ifnet *ifp, struct mbuf *m);
553void cxgb_qflush(struct ifnet *ifp);
554void t3_iterate(void (*)(struct adapter *, void *), void *);
555void cxgb_refresh_stats(struct port_info *);
556
557#ifdef DEBUGNET
558int cxgb_debugnet_encap(struct sge_qset *qs, struct mbuf **m);
559int cxgb_debugnet_poll_rx(adapter_t *adap, struct sge_qset *qs);
560int cxgb_debugnet_poll_tx(struct sge_qset *qs);
561#endif
562
563#endif
static __inline struct sge_qset * txq_to_qset(struct sge_txq *q, int qidx)
Definition: cxgb_adapter.h:538
static __inline struct sge_qset * rspq_to_qset(struct sge_rspq *q)
Definition: cxgb_adapter.h:532
void t3_free_tx_desc(struct sge_qset *qs, int n, int qid)
Definition: cxgb_sge.c:2126
#define RSPQ_NAME_LEN
Definition: cxgb_adapter.h:195
void t3_update_qset_coalesce(struct sge_qset *qs, const struct qset_params *p)
Definition: cxgb_sge.c:679
uint8_t hw_addr[ETHER_ADDR_LEN]
Definition: cxgb_adapter.h:18
void t3_intr_msi(void *data)
Definition: cxgb_sge.c:3070
#define ADAPTER_LOCK_NAME_LEN
Definition: cxgb_adapter.h:389
@ TXQ_ETH
Definition: cxgb_adapter.h:152
@ TXQ_OFLD
Definition: cxgb_adapter.h:153
@ TXQ_CTRL
Definition: cxgb_adapter.h:154
void t3_sge_err_intr_handler(adapter_t *adapter)
Definition: cxgb_sge.c:522
static __inline void t3_write_reg(adapter_t *adapter, uint32_t reg_addr, uint32_t val)
Definition: cxgb_adapter.h:437
void t3_add_configured_sysctls(adapter_t *sc)
Definition: cxgb_sge.c:3421
void t3_iterate(void(*)(struct adapter *, void *), void *)
Definition: cxgb_main.c:3368
int t3_mgmt_tx(adapter_t *adap, struct mbuf *m)
Definition: cxgb_sge.c:1980
enum @54 __aligned
static __inline uint32_t t3_read_reg(adapter_t *adapter, uint32_t reg_addr)
Definition: cxgb_adapter.h:431
static __inline void t3_os_pci_read_config_4(adapter_t *adapter, int reg, uint32_t *val)
Definition: cxgb_adapter.h:443
int t3_os_pci_save_state(struct adapter *adapter)
Definition: cxgb_main.c:1193
struct ifnet * ifp
Definition: cxgb_adapter.h:1
int t3_os_pci_restore_state(struct adapter *adapter)
Definition: cxgb_main.c:1206
void t3_free_sge_resources(adapter_t *, int)
Definition: cxgb_sge.c:2069
int t3_sge_reset_adapter(adapter_t *)
Definition: cxgb_sge.c:1023
void t3_os_phymod_changed(struct adapter *adap, int port_id)
Definition: cxgb_main.c:1264
static __inline struct sge_qset * fl_to_qset(struct sge_fl *q, int qidx)
Definition: cxgb_adapter.h:526
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 *)
Definition: cxgb_main.c:2378
#define PORT_NAME_LEN
Definition: cxgb_adapter.h:25
int t3_sge_init_port(struct port_info *)
Definition: cxgb_sge.c:1030
#define QS_NAME_LEN
Definition: cxgb_adapter.h:291
uint32_t port_id
Definition: cxgb_adapter.h:11
int(* cpl_handler_t)(struct sge_qset *, struct rsp_desc *, struct mbuf *)
Definition: cxgb_adapter.h:302
void t3_sge_stop(adapter_t *)
Definition: cxgb_sge.c:2106
void t3_intr_msix(void *data)
Definition: cxgb_sge.c:3090
int t3_register_cpl_handler(struct adapter *, int, cpl_handler_t)
int cxgb_debug
Definition: cxgb_sge.c:243
static __inline void t3_os_pci_read_config_2(adapter_t *adapter, int reg, uint16_t *val)
Definition: cxgb_adapter.h:455
void t3_add_attach_sysctls(adapter_t *sc)
Definition: cxgb_sge.c:3358
#define container_of(p, stype, field)
Definition: cxgb_adapter.h:523
int t3_get_desc(const struct sge_qset *qs, unsigned int qnum, unsigned int idx, unsigned char *data)
Definition: cxgb_sge.c:3703
@ FW_UPTODATE
Definition: cxgb_adapter.h:128
@ CXGB_SHUTDOWN
Definition: cxgb_adapter.h:130
@ USING_MSI
Definition: cxgb_adapter.h:125
@ QUEUES_BOUND
Definition: cxgb_adapter.h:127
@ DOOMED
Definition: cxgb_adapter.h:137
@ TOM_INIT_DONE
Definition: cxgb_adapter.h:134
@ TPS_UPTODATE
Definition: cxgb_adapter.h:129
@ USING_MSIX
Definition: cxgb_adapter.h:126
@ CXGB_OFLD_INIT
Definition: cxgb_adapter.h:131
@ FULL_INIT_DONE
Definition: cxgb_adapter.h:124
@ TP_PARITY_INIT
Definition: cxgb_adapter.h:132
@ CXGB_BUSY
Definition: cxgb_adapter.h:133
void cxgb_tx_watchdog(void *arg)
Definition: cxgb_sge.c:1614
int t3_os_find_pci_capability(adapter_t *adapter, int cap)
Definition: cxgb_main.c:1153
void t3_os_link_changed(adapter_t *adapter, int port_id, int link_status, int speed, int duplex, int fc, int mac_was_reset)
Definition: cxgb_main.c:1232
int t3_sge_free(struct adapter *)
Definition: cxgb_sge.c:660
void cxgb_qflush(struct ifnet *ifp)
Definition: cxgb_sge.c:1776
void t3_rx_eth(struct adapter *adap, struct mbuf *m, int ethpad)
Definition: cxgb_sge.c:2623
int t3_sge_alloc(struct adapter *)
Definition: cxgb_sge.c:606
void t3_os_set_hw_addr(adapter_t *adapter, int port_idx, u8 hw_addr[])
Definition: cxgb_main.c:1285
#define OFFLOAD_DEVMAP_BIT
Definition: cxgb_adapter.h:545
static __inline struct port_info * adap2pinfo(struct adapter *adap, int idx)
Definition: cxgb_adapter.h:474
static __inline void t3_os_pci_write_config_2(adapter_t *adapter, int reg, uint16_t val)
Definition: cxgb_adapter.h:461
void t3_sge_start(adapter_t *)
Definition: cxgb_sge.c:2087
int t3_sge_init_adapter(adapter_t *)
Definition: cxgb_sge.c:1014
#define PORT_LOCK_NAME_LEN
Definition: cxgb_adapter.h:24
static __inline void t3_os_pci_write_config_4(adapter_t *adapter, int reg, uint32_t val)
Definition: cxgb_adapter.h:449
void t3b_intr(void *data)
Definition: cxgb_sge.c:3038
void t3_os_link_intr(struct port_info *)
Definition: cxgb_main.c:2315
@ LF_MAYBE
Definition: cxgb_adapter.h:87
@ LF_YES
Definition: cxgb_adapter.h:88
@ LF_NO
Definition: cxgb_adapter.h:86
static int offload_running(adapter_t *adapter)
Definition: cxgb_adapter.h:546
static __inline void t3_init_rx_mode(struct t3_rx_mode *rm, struct port_info *port)
Definition: cxgb_adapter.h:467
int cxgb_transmit(struct ifnet *ifp, struct mbuf *m)
Definition: cxgb_sge.c:1748
@ SGE_TXQ_PER_SET
Definition: cxgb_common.h:117
@ SGE_RXQ_PER_SET
Definition: cxgb_common.h:116
@ SGE_QSETS
Definition: cxgb_common.h:115
@ RSS_TABLE_SIZE
Definition: cxgb_common.h:42
@ IRQ_NUM_STATS
Definition: cxgb_common.h:71
@ MAX_NPORTS
Definition: cxgb_osdep.h:56
uint8_t u8
Definition: cxgb_osdep.h:200
#define TX_MAX_SEGS
Definition: cxgb_osdep.h:81
int timestamp
Definition: cxgb_adapter.h:395
char mdiolockbuf[ADAPTER_LOCK_NAME_LEN]
Definition: cxgb_adapter.h:392
uint32_t open_device_map
Definition: cxgb_adapter.h:381
struct mc7 cm
Definition: cxgb_adapter.h:370
uint8_t rxpkt_map[8]
Definition: cxgb_adapter.h:337
struct resource * msix_regs_res
Definition: cxgb_adapter.h:332
int msi_count
Definition: cxgb_adapter.h:387
struct mtx mdio_lock
Definition: cxgb_adapter.h:358
char port_types[MAX_NPORTS+1]
Definition: cxgb_adapter.h:380
int msix_irq_rid[SGE_QSETS]
Definition: cxgb_adapter.h:335
uint32_t link_width
Definition: cxgb_adapter.h:318
void * intr_tag
Definition: cxgb_adapter.h:329
unsigned int slow_intr_mask
Definition: cxgb_adapter.h:363
struct resource * irq_res
Definition: cxgb_adapter.h:327
unsigned nqsets
Definition: cxgb_adapter.h:366
struct task tick_task
Definition: cxgb_adapter.h:352
struct mc7 pmtx
Definition: cxgb_adapter.h:369
driver_intr_t * cxgb_intr
Definition: cxgb_adapter.h:386
char fw_version[64]
Definition: cxgb_adapter.h:379
struct mtx elmer_lock
Definition: cxgb_adapter.h:359
struct port_info port[MAX_NPORTS]
Definition: cxgb_adapter.h:373
bus_space_handle_t bh
Definition: cxgb_adapter.h:315
struct callout sge_timer_ch
Definition: cxgb_adapter.h:355
bus_size_t mmio_len
Definition: cxgb_adapter.h:317
device_t portdev[MAX_NPORTS]
Definition: cxgb_adapter.h:374
SLIST_ENTRY(adapter) link
struct resource * regs_res
Definition: cxgb_adapter.h:312
struct resource * udbs_res
Definition: cxgb_adapter.h:314
struct mc7 pmrx
Definition: cxgb_adapter.h:368
union adapter::@56 u
struct callout cxgb_tick_ch
Definition: cxgb_adapter.h:354
struct adapter_params params
Definition: cxgb_adapter.h:362
struct task slow_intr_task
Definition: cxgb_adapter.h:351
char reglockbuf[ADAPTER_LOCK_NAME_LEN]
Definition: cxgb_adapter.h:391
uint64_t coalesce
Definition: cxgb_adapter.h:342
int udbs_rid
Definition: cxgb_adapter.h:313
bus_dma_tag_t tx_dmat
Definition: cxgb_adapter.h:324
char elmerlockbuf[ADAPTER_LOCK_NAME_LEN]
Definition: cxgb_adapter.h:393
bus_dma_tag_t parent_dmat
Definition: cxgb_adapter.h:321
bus_space_tag_t bt
Definition: cxgb_adapter.h:316
uint32_t msix_regs_rid
Definition: cxgb_adapter.h:331
uint8_t rrss_map[SGE_QSETS]
Definition: cxgb_adapter.h:338
struct filter_info * filters
Definition: cxgb_adapter.h:348
bus_dma_tag_t rx_jumbo_dmat
Definition: cxgb_adapter.h:323
bus_dma_tag_t rx_dmat
Definition: cxgb_adapter.h:322
struct resource * msix_irq_res[SGE_QSETS]
Definition: cxgb_adapter.h:334
unsigned long irq_stats[IRQ_NUM_STATS]
Definition: cxgb_adapter.h:364
struct taskqueue * tq
Definition: cxgb_adapter.h:353
uint8_t fill[SGE_QSETS]
Definition: cxgb_adapter.h:341
struct mtx lock
Definition: cxgb_adapter.h:385
device_t dev
Definition: cxgb_adapter.h:307
int irq_rid
Definition: cxgb_adapter.h:328
int regs_rid
Definition: cxgb_adapter.h:311
uint16_t rspq_map[RSS_TABLE_SIZE]
Definition: cxgb_adapter.h:339
char lockbuf[ADAPTER_LOCK_NAME_LEN]
Definition: cxgb_adapter.h:390
void * msix_intr_tag[SGE_QSETS]
Definition: cxgb_adapter.h:336
struct lro_ctrl ctrl
Definition: cxgb_adapter.h:165
unsigned short enabled
Definition: cxgb_adapter.h:164
uint32_t port_id
Definition: cxgb_adapter.h:103
uint8_t hw_addr[ETHER_ADDR_LEN]
Definition: cxgb_adapter.h:110
int link_fault
Definition: cxgb_adapter.h:108
struct ifmedia media
Definition: cxgb_adapter.h:101
uint32_t nqsets
Definition: cxgb_adapter.h:107
struct cmac mac
Definition: cxgb_adapter.h:98
struct cphy phy
Definition: cxgb_adapter.h:97
struct ifnet * ifp
Definition: cxgb_adapter.h:93
uint32_t first_qset
Definition: cxgb_adapter.h:106
struct task timer_reclaim_task
Definition: cxgb_adapter.h:113
struct task link_check_task
Definition: cxgb_adapter.h:112
struct timeval last_refreshed
Definition: cxgb_adapter.h:99
char namebuf[PORT_NAME_LEN]
Definition: cxgb_adapter.h:119
char lockbuf[PORT_LOCK_NAME_LEN]
Definition: cxgb_adapter.h:118
uint32_t txpkt_intf
Definition: cxgb_adapter.h:105
struct callout link_check_ch
Definition: cxgb_adapter.h:111
const struct port_type_info * port_type
Definition: cxgb_adapter.h:96
struct cdev * port_cdev
Definition: cxgb_adapter.h:114
struct adapter * adapter
Definition: cxgb_adapter.h:92
int if_flags
Definition: cxgb_adapter.h:94
struct mtx lock
Definition: cxgb_adapter.h:102
uint32_t tx_chan
Definition: cxgb_adapter.h:104
uint32_t cidx
Definition: cxgb_adapter.h:208
bus_dmamap_t desc_map
Definition: cxgb_adapter.h:216
struct rx_desc * desc
Definition: cxgb_adapter.h:219
bus_addr_t phys_addr
Definition: cxgb_adapter.h:212
uint32_t cntxt_id
Definition: cxgb_adapter.h:213
uint32_t credits
Definition: cxgb_adapter.h:206
bus_dma_tag_t desc_tag
Definition: cxgb_adapter.h:215
int type
Definition: cxgb_adapter.h:221
uint32_t buf_size
Definition: cxgb_adapter.h:205
bus_dma_tag_t entry_tag
Definition: cxgb_adapter.h:217
uint32_t size
Definition: cxgb_adapter.h:207
uma_zone_t zone
Definition: cxgb_adapter.h:218
uint32_t gen
Definition: cxgb_adapter.h:210
uint32_t pidx
Definition: cxgb_adapter.h:209
struct rx_sw_desc * sdesc
Definition: cxgb_adapter.h:220
uint32_t empty
Definition: cxgb_adapter.h:214
uint32_t db_pending
Definition: cxgb_adapter.h:211
struct adapter * adap
Definition: cxgb_adapter.h:285
char namebuf[QS_NAME_LEN]
Definition: cxgb_adapter.h:292
struct mtx lock
Definition: cxgb_adapter.h:290
uint32_t txq_stopped
Definition: cxgb_adapter.h:283
struct sge_fl fl[SGE_RXQ_PER_SET]
Definition: cxgb_adapter.h:280
int qs_flags
Definition: cxgb_adapter.h:287
struct sge_txq txq[SGE_TXQ_PER_SET]
Definition: cxgb_adapter.h:282
struct port_info * port
Definition: cxgb_adapter.h:284
struct lro_state lro
Definition: cxgb_adapter.h:281
int coalescing
Definition: cxgb_adapter.h:288
struct sge_rspq rspq
Definition: cxgb_adapter.h:279
struct cv qs_cv
Definition: cxgb_adapter.h:289
uint32_t polling
Definition: cxgb_adapter.h:177
uint32_t holdoff_tmr
Definition: cxgb_adapter.h:178
uint32_t pure_rsps
Definition: cxgb_adapter.h:184
bus_addr_t phys_addr
Definition: cxgb_adapter.h:188
struct rsp_desc * desc
Definition: cxgb_adapter.h:193
uint32_t size
Definition: cxgb_adapter.h:174
uint32_t cidx
Definition: cxgb_adapter.h:175
uint32_t async_notif
Definition: cxgb_adapter.h:181
bus_dma_tag_t desc_tag
Definition: cxgb_adapter.h:189
uint32_t imm_data
Definition: cxgb_adapter.h:180
uint32_t rspq_dump_start
Definition: cxgb_adapter.h:197
struct mtx lock
Definition: cxgb_adapter.h:194
char lockbuf[RSPQ_NAME_LEN]
Definition: cxgb_adapter.h:196
bus_dmamap_t desc_map
Definition: cxgb_adapter.h:190
uint32_t rspq_dump_count
Definition: cxgb_adapter.h:198
uint32_t credits
Definition: cxgb_adapter.h:173
uint32_t cntxt_id
Definition: cxgb_adapter.h:182
uint32_t offload_pkts
Definition: cxgb_adapter.h:183
uint32_t starved
Definition: cxgb_adapter.h:186
struct t3_mbuf_hdr rspq_mh
Definition: cxgb_adapter.h:192
uint32_t unhandled_irqs
Definition: cxgb_adapter.h:185
uint32_t gen
Definition: cxgb_adapter.h:176
uint32_t next_holdoff
Definition: cxgb_adapter.h:179
uint32_t processed
Definition: cxgb_adapter.h:233
uint32_t txq_skipped
Definition: cxgb_adapter.h:260
uint64_t txq_direct_bytes
Definition: cxgb_adapter.h:265
uint32_t txq_dump_start
Definition: cxgb_adapter.h:262
uint32_t token
Definition: cxgb_adapter.h:243
bus_dmamap_t desc_map
Definition: cxgb_adapter.h:251
uint64_t txq_frees
Definition: cxgb_adapter.h:266
bus_dma_tag_t desc_tag
Definition: cxgb_adapter.h:250
struct tx_sw_desc * sdesc
Definition: cxgb_adapter.h:242
struct mbufq sendq
Definition: cxgb_adapter.h:253
uint32_t unacked
Definition: cxgb_adapter.h:239
uint32_t gen
Definition: cxgb_adapter.h:238
uint64_t restarts
Definition: cxgb_adapter.h:249
uint64_t txq_coalesced
Definition: cxgb_adapter.h:259
struct callout txq_watchdog
Definition: cxgb_adapter.h:258
struct tx_desc * desc
Definition: cxgb_adapter.h:241
bus_dma_tag_t entry_tag
Definition: cxgb_adapter.h:252
bus_addr_t phys_addr
Definition: cxgb_adapter.h:244
uint32_t size
Definition: cxgb_adapter.h:232
uint64_t stops
Definition: cxgb_adapter.h:248
struct callout txq_timer
Definition: cxgb_adapter.h:257
uint32_t cntxt_id
Definition: cxgb_adapter.h:247
uint32_t in_use
Definition: cxgb_adapter.h:231
uint32_t txq_enqueued
Definition: cxgb_adapter.h:261
uint32_t txq_dump_count
Definition: cxgb_adapter.h:263
struct sg_ent txq_sgl[TX_MAX_SEGS/2+1]
Definition: cxgb_adapter.h:267
struct buf_ring * txq_mr
Definition: cxgb_adapter.h:255
uint32_t stop_thres
Definition: cxgb_adapter.h:235
uint64_t txq_direct_packets
Definition: cxgb_adapter.h:264
uint32_t cidx
Definition: cxgb_adapter.h:236
struct task qresume_task
Definition: cxgb_adapter.h:245
uint32_t pidx
Definition: cxgb_adapter.h:237
uint64_t flags
Definition: cxgb_adapter.h:230
uint32_t db_pending
Definition: cxgb_adapter.h:240
struct task qreclaim_task
Definition: cxgb_adapter.h:246
uint32_t cleaned
Definition: cxgb_adapter.h:234
struct ifaltq * txq_ifq
Definition: cxgb_adapter.h:256
struct mtx reg_lock
Definition: cxgb_adapter.h:297
struct sge_qset qs[SGE_QSETS]
Definition: cxgb_adapter.h:296
struct port_info * port
Definition: cxgb_adapter.h:406
uint32_t idx
Definition: cxgb_adapter.h:405