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 --- |