Deleted Added
full compact
cxgb_adapter.h (170654) cxgb_adapter.h (170869)
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
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 170654 2007-06-13 05:36:00Z kmacy $
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>
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 170654 2007-06-13 05:36:00Z kmacy $");
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>
40
41#include <sys/lock.h>
42#include <sys/mutex.h>
43#include <sys/sx.h>
43#include <sys/rman.h>
44#include <sys/mbuf.h>
45#include <sys/socket.h>
46#include <sys/sockio.h>
47
48#include <net/ethernet.h>
49#include <net/if.h>
50#include <net/if_media.h>

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

60#include <ulp/toecore/toedev.h>
61#include <sys/mbufq.h>
62#else
63#include <dev/cxgb/cxgb_osdep.h>
64#include <dev/cxgb/sys/mbufq.h>
65#include <dev/cxgb/ulp/toecore/toedev.h>
66#endif
67
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
68struct adapter;
69struct sge_qset;
70extern int cxgb_debug;
71
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
72struct port_info {
73 struct adapter *adapter;
74 struct ifnet *ifp;
75 int if_flags;
76 const struct port_type_info *port_type;
77 struct cphy phy;
78 struct cmac mac;
79 struct link_config link_config;
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;
80 struct ifmedia media;
114 struct ifmedia media;
115#ifdef USE_SX
116 struct sx lock;
117#else
81 struct mtx lock;
118 struct mtx lock;
82
119#endif
83 int port;
84 uint8_t hw_addr[ETHER_ADDR_LEN];
85 uint8_t nqsets;
86 uint8_t first_qset;
87 struct taskqueue *tq;
88 struct task start_task;
89 struct task timer_reclaim_task;
90 struct cdev *port_cdev;
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];
91};
92
93enum { /* adapter flags */
94 FULL_INIT_DONE = (1 << 0),
95 USING_MSI = (1 << 1),
96 USING_MSIX = (1 << 2),
97 QUEUES_BOUND = (1 << 3),
98 FW_UPTODATE = (1 << 4),
99};
100
101
102#define FL_Q_SIZE 4096
103#define JUMBO_Q_SIZE 512
104#define RSPQ_Q_SIZE 1024
105#define TX_ETH_Q_SIZE 1024
106
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
107/*
108 * Types of Tx queues in each queue set. Order here matters, do not change.
109 * XXX TOE is not implemented yet, so the extra queues are just placeholders.
110 */
111enum { TXQ_ETH, TXQ_OFLD, TXQ_CTRL };
112
113
114/* careful, the following are set on priv_flags and must not collide with

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

160 uint32_t offload_bundles;
161 uint32_t pure_rsps;
162 uint32_t unhandled_irqs;
163
164 bus_addr_t phys_addr;
165 bus_dma_tag_t desc_tag;
166 bus_dmamap_t desc_map;
167 struct mbuf *m;
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
168};
169
170struct rx_desc;
171struct rx_sw_desc;
172
173struct sge_fl {
174 uint32_t buf_size;
175 uint32_t credits;

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

211 uint32_t cntxt_id;
212 uint64_t stops;
213 uint64_t restarts;
214 bus_dma_tag_t desc_tag;
215 bus_dmamap_t desc_map;
216 bus_dma_tag_t entry_tag;
217 struct mbuf_head sendq;
218 struct mtx lock;
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];
219};
220
221
222enum {
223 SGE_PSTAT_TSO, /* # of TSO requests */
224 SGE_PSTAT_RX_CSUM_GOOD, /* # of successful RX csum offloads */
225 SGE_PSTAT_TX_CSUM, /* # of TX checksum offloads */
226 SGE_PSTAT_VLANEX, /* # of VLAN tag extractions */

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

255
256 /* PCI register resources */
257 uint32_t regs_rid;
258 struct resource *regs_res;
259 bus_space_handle_t bh;
260 bus_space_tag_t bt;
261 bus_size_t mmio_len;
262 uint32_t link_width;
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;
263
264
265 /* DMA resources */
266 bus_dma_tag_t parent_dmat;
267 bus_dma_tag_t rx_dmat;
268 bus_dma_tag_t rx_jumbo_dmat;
269 bus_dma_tag_t tx_dmat;
270
271 /* Interrupt resources */

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

278
279 struct resource *msix_irq_res[SGE_QSETS];
280 int msix_irq_rid[SGE_QSETS];
281 void *msix_intr_tag[SGE_QSETS];
282
283 /* Tasks */
284 struct task ext_intr_task;
285 struct task slow_intr_task;
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;
286 struct task process_responses_task;
335 struct task process_responses_task;
287 struct task mr_refresh_task;
288 struct taskqueue *tq;
289 struct callout cxgb_tick_ch;
290 struct callout sge_timer_ch;
291
292 /* Register lock for use by the hardware layer */
293 struct mtx mdio_lock;
294 struct mtx elmer_lock;
295

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

305 struct mc5 mc5;
306
307 struct port_info port[MAX_NPORTS];
308 device_t portdev[MAX_NPORTS];
309 struct toedev tdev;
310 char fw_version[64];
311 uint32_t open_device_map;
312 uint32_t registered_device_map;
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
313 struct mtx lock;
364 struct mtx lock;
365#endif
314 driver_intr_t *cxgb_intr;
315 int msi_count;
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];
316};
317
318struct t3_rx_mode {
319
320 uint32_t idx;
321 struct port_info *port;
322};
323
324
325#define MDIO_LOCK(adapter) mtx_lock(&(adapter)->mdio_lock)
326#define MDIO_UNLOCK(adapter) mtx_unlock(&(adapter)->mdio_lock)
327#define ELMR_LOCK(adapter) mtx_lock(&(adapter)->elmer_lock)
328#define ELMR_UNLOCK(adapter) mtx_unlock(&(adapter)->elmer_lock)
329
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
330#define PORT_LOCK(port) mtx_lock(&(port)->lock);
331#define PORT_UNLOCK(port) mtx_unlock(&(port)->lock);
332
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
333#define ADAPTER_LOCK(adap) mtx_lock(&(adap)->lock);
334#define ADAPTER_UNLOCK(adap) mtx_unlock(&(adap)->lock);
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
335
336
414
415
337
338static __inline uint32_t
339t3_read_reg(adapter_t *adapter, uint32_t reg_addr)
340{
341 return (bus_space_read_4(adapter->bt, adapter->bh, reg_addr));
342}
343
344static __inline void
345t3_write_reg(adapter_t *adapter, uint32_t reg_addr, uint32_t val)

--- 131 unchanged lines hidden ---
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 ---