Deleted Added
sdiff udiff text old ( 170654 ) new ( 170869 )
full compact
1/**************************************************************************
2
3Copyright (c) 2007, Chelsio Inc.
4All rights reserved.
5
6Redistribution and use in source and binary forms, with or without
7modification, are permitted provided that the following conditions are met:
8

--- 12 unchanged lines hidden (view full) ---

21CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26POSSIBILITY OF SUCH DAMAGE.
27
28
29$FreeBSD: head/sys/dev/cxgb/cxgb_adapter.h 170869 2007-06-17 04:33:38Z kmacy $
30
31***************************************************************************/
32
33
34
35#ifndef _CXGB_ADAPTER_H_
36#define _CXGB_ADAPTER_H_
37
38#include <sys/cdefs.h>
39__FBSDID("$FreeBSD: head/sys/dev/cxgb/cxgb_adapter.h 170869 2007-06-17 04:33:38Z kmacy $");
40
41#include <sys/lock.h>
42#include <sys/mutex.h>
43#include <sys/sx.h>
44#include <sys/rman.h>
45#include <sys/mbuf.h>
46#include <sys/socket.h>
47#include <sys/sockio.h>
48
49#include <net/ethernet.h>
50#include <net/if.h>
51#include <net/if_media.h>

--- 9 unchanged lines hidden (view full) ---

61#include <ulp/toecore/toedev.h>
62#include <sys/mbufq.h>
63#else
64#include <dev/cxgb/cxgb_osdep.h>
65#include <dev/cxgb/sys/mbufq.h>
66#include <dev/cxgb/ulp/toecore/toedev.h>
67#endif
68
69#define USE_SX
70
71struct adapter;
72struct sge_qset;
73extern int cxgb_debug;
74
75#ifdef DEBUG_LOCKING
76#define MTX_INIT(lock, lockname, class, flags) \
77 do { \
78 printf("initializing %s at %s:%d\n", lockname, __FILE__, __LINE__); \
79 mtx_init((lock), lockname, class, flags); \
80 } while (0)
81
82#define MTX_DESTROY(lock) \
83 do { \
84 printf("destroying %s at %s:%d\n", (lock)->lock_object.lo_name, __FILE__, __LINE__); \
85 mtx_destroy((lock)); \
86 } while (0)
87
88#define SX_INIT(lock, lockname) \
89 do { \
90 printf("initializing %s at %s:%d\n", lockname, __FILE__, __LINE__); \
91 sx_init((lock), lockname); \
92 } while (0)
93
94#define SX_DESTROY(lock) \
95 do { \
96 printf("destroying %s at %s:%d\n", (lock)->lock_object.lo_name, __FILE__, __LINE__); \
97 sx_destroy((lock)); \
98 } while (0)
99#else
100#define MTX_INIT mtx_init
101#define MTX_DESTROY mtx_destroy
102#define SX_INIT sx_init
103#define SX_DESTROY sx_destroy
104#endif
105
106struct port_info {
107 struct adapter *adapter;
108 struct ifnet *ifp;
109 int if_flags;
110 const struct port_type_info *port_type;
111 struct cphy phy;
112 struct cmac mac;
113 struct link_config link_config;
114 struct ifmedia media;
115#ifdef USE_SX
116 struct sx lock;
117#else
118 struct mtx lock;
119#endif
120 int port;
121 uint8_t hw_addr[ETHER_ADDR_LEN];
122 uint8_t nqsets;
123 uint8_t first_qset;
124 struct taskqueue *tq;
125 struct task start_task;
126 struct task timer_reclaim_task;
127 struct cdev *port_cdev;
128
129#define PORT_NAME_LEN 32
130#define TASKQ_NAME_LEN 32
131 char lockbuf[PORT_NAME_LEN];
132 char taskqbuf[TASKQ_NAME_LEN];
133};
134
135enum { /* adapter flags */
136 FULL_INIT_DONE = (1 << 0),
137 USING_MSI = (1 << 1),
138 USING_MSIX = (1 << 2),
139 QUEUES_BOUND = (1 << 3),
140 FW_UPTODATE = (1 << 4),
141};
142
143
144#define FL_Q_SIZE 4096
145#define JUMBO_Q_SIZE 512
146#define RSPQ_Q_SIZE 1024
147#define TX_ETH_Q_SIZE 1024
148
149
150
151/*
152 * Types of Tx queues in each queue set. Order here matters, do not change.
153 * XXX TOE is not implemented yet, so the extra queues are just placeholders.
154 */
155enum { TXQ_ETH, TXQ_OFLD, TXQ_CTRL };
156
157
158/* careful, the following are set on priv_flags and must not collide with

--- 45 unchanged lines hidden (view full) ---

204 uint32_t offload_bundles;
205 uint32_t pure_rsps;
206 uint32_t unhandled_irqs;
207
208 bus_addr_t phys_addr;
209 bus_dma_tag_t desc_tag;
210 bus_dmamap_t desc_map;
211 struct mbuf *m;
212#define RSPQ_NAME_LEN 32
213 char lockbuf[RSPQ_NAME_LEN];
214
215};
216
217struct rx_desc;
218struct rx_sw_desc;
219
220struct sge_fl {
221 uint32_t buf_size;
222 uint32_t credits;

--- 35 unchanged lines hidden (view full) ---

258 uint32_t cntxt_id;
259 uint64_t stops;
260 uint64_t restarts;
261 bus_dma_tag_t desc_tag;
262 bus_dmamap_t desc_map;
263 bus_dma_tag_t entry_tag;
264 struct mbuf_head sendq;
265 struct mtx lock;
266#define TXQ_NAME_LEN 32
267 char lockbuf[TXQ_NAME_LEN];
268};
269
270
271enum {
272 SGE_PSTAT_TSO, /* # of TSO requests */
273 SGE_PSTAT_RX_CSUM_GOOD, /* # of successful RX csum offloads */
274 SGE_PSTAT_TX_CSUM, /* # of TX checksum offloads */
275 SGE_PSTAT_VLANEX, /* # of VLAN tag extractions */

--- 28 unchanged lines hidden (view full) ---

304
305 /* PCI register resources */
306 uint32_t regs_rid;
307 struct resource *regs_res;
308 bus_space_handle_t bh;
309 bus_space_tag_t bt;
310 bus_size_t mmio_len;
311 uint32_t link_width;
312
313 /* DMA resources */
314 bus_dma_tag_t parent_dmat;
315 bus_dma_tag_t rx_dmat;
316 bus_dma_tag_t rx_jumbo_dmat;
317 bus_dma_tag_t tx_dmat;
318
319 /* Interrupt resources */

--- 6 unchanged lines hidden (view full) ---

326
327 struct resource *msix_irq_res[SGE_QSETS];
328 int msix_irq_rid[SGE_QSETS];
329 void *msix_intr_tag[SGE_QSETS];
330
331 /* Tasks */
332 struct task ext_intr_task;
333 struct task slow_intr_task;
334 struct task tick_task;
335 struct task process_responses_task;
336 struct taskqueue *tq;
337 struct callout cxgb_tick_ch;
338 struct callout sge_timer_ch;
339
340 /* Register lock for use by the hardware layer */
341 struct mtx mdio_lock;
342 struct mtx elmer_lock;
343

--- 9 unchanged lines hidden (view full) ---

353 struct mc5 mc5;
354
355 struct port_info port[MAX_NPORTS];
356 device_t portdev[MAX_NPORTS];
357 struct toedev tdev;
358 char fw_version[64];
359 uint32_t open_device_map;
360 uint32_t registered_device_map;
361#ifdef USE_SX
362 struct sx lock;
363#else
364 struct mtx lock;
365#endif
366 driver_intr_t *cxgb_intr;
367 int msi_count;
368
369#define ADAPTER_LOCK_NAME_LEN 32
370 char lockbuf[ADAPTER_LOCK_NAME_LEN];
371 char reglockbuf[ADAPTER_LOCK_NAME_LEN];
372 char mdiolockbuf[ADAPTER_LOCK_NAME_LEN];
373 char elmerlockbuf[ADAPTER_LOCK_NAME_LEN];
374};
375
376struct t3_rx_mode {
377
378 uint32_t idx;
379 struct port_info *port;
380};
381
382
383#define MDIO_LOCK(adapter) mtx_lock(&(adapter)->mdio_lock)
384#define MDIO_UNLOCK(adapter) mtx_unlock(&(adapter)->mdio_lock)
385#define ELMR_LOCK(adapter) mtx_lock(&(adapter)->elmer_lock)
386#define ELMR_UNLOCK(adapter) mtx_unlock(&(adapter)->elmer_lock)
387
388
389#ifdef USE_SX
390#define PORT_LOCK(port) sx_xlock(&(port)->lock);
391#define PORT_UNLOCK(port) sx_xunlock(&(port)->lock);
392#define PORT_LOCK_INIT(port, name) SX_INIT(&(port)->lock, name)
393#define PORT_LOCK_DEINIT(port) SX_DESTROY(&(port)->lock)
394#define PORT_LOCK_ASSERT_OWNED(port) sx_assert(&(port)->lock, SA_LOCKED)
395
396#define ADAPTER_LOCK(adap) sx_xlock(&(adap)->lock);
397#define ADAPTER_UNLOCK(adap) sx_xunlock(&(adap)->lock);
398#define ADAPTER_LOCK_INIT(adap, name) SX_INIT(&(adap)->lock, name)
399#define ADAPTER_LOCK_DEINIT(adap) SX_DESTROY(&(adap)->lock)
400#define ADAPTER_LOCK_ASSERT_NOTOWNED(adap) sx_assert(&(adap)->lock, SA_UNLOCKED)
401#else
402#define PORT_LOCK(port) mtx_lock(&(port)->lock);
403#define PORT_UNLOCK(port) mtx_unlock(&(port)->lock);
404#define PORT_LOCK_INIT(port, name) mtx_init(&(port)->lock, name, 0, MTX_DEF)
405#define PORT_LOCK_DEINIT(port) mtx_destroy(&(port)->lock)
406#define PORT_LOCK_ASSERT_OWNED(port) mtx_assert(&(port)->lock, MA_OWNED)
407
408#define ADAPTER_LOCK(adap) mtx_lock(&(adap)->lock);
409#define ADAPTER_UNLOCK(adap) mtx_unlock(&(adap)->lock);
410#define ADAPTER_LOCK_INIT(adap, name) mtx_init(&(adap)->lock, name, 0, MTX_DEF)
411#define ADAPTER_LOCK_DEINIT(adap) mtx_destroy(&(adap)->lock)
412#define ADAPTER_LOCK_ASSERT_NOTOWNED(adap) mtx_assert(&(adap)->lock, MO_NOTOWNED)
413#endif
414
415
416static __inline uint32_t
417t3_read_reg(adapter_t *adapter, uint32_t reg_addr)
418{
419 return (bus_space_read_4(adapter->bt, adapter->bh, reg_addr));
420}
421
422static __inline void
423t3_write_reg(adapter_t *adapter, uint32_t reg_addr, uint32_t val)

--- 131 unchanged lines hidden ---