diff options
author | np <np@FreeBSD.org> | 2011-12-16 02:09:51 +0000 |
---|---|---|
committer | np <np@FreeBSD.org> | 2011-12-16 02:09:51 +0000 |
commit | 65b6b4fa8f3369ae8f1ddf883233883607f6abb8 (patch) | |
tree | 3f54f68c887ea6a17b5427746efe66dfa931b56d /sys/dev/cxgbe/offload.h | |
parent | 8b1b8ed3cbd6bbfca00c2962853afec4ba1e1839 (diff) | |
download | FreeBSD-src-65b6b4fa8f3369ae8f1ddf883233883607f6abb8.zip FreeBSD-src-65b6b4fa8f3369ae8f1ddf883233883607f6abb8.tar.gz |
Many updates to cxgbe(4)
- Device configuration via plain text config file. Also able to operate
when not attached to the chip as the master driver.
- Generic "work request" queue that serves as the base for both ctrl and
ofld tx queues.
- Generic interrupt handler routine that can process any event on any
kind of ingress queue (via a dispatch table).
- A couple of new driver ioctls. cxgbetool can now install a firmware
to the card ("loadfw" command) and can read the card's memory
("memdump" and "tcb" commands).
- Lots of assorted information within dev.t4nex.X.misc.* This is
primarily for debugging and won't show up in sysctl -a.
- Code to manage the L2 tables on the chip.
- Updates to cxgbe(4) man page to go with the tunables that have changed.
- Updates to the shared code in common/
- Updates to the driver-firmware interface (now at fw 1.4.16.0)
MFC after: 1 month
Diffstat (limited to 'sys/dev/cxgbe/offload.h')
-rw-r--r-- | sys/dev/cxgbe/offload.h | 71 |
1 files changed, 59 insertions, 12 deletions
diff --git a/sys/dev/cxgbe/offload.h b/sys/dev/cxgbe/offload.h index f31b840..f6ada9d 100644 --- a/sys/dev/cxgbe/offload.h +++ b/sys/dev/cxgbe/offload.h @@ -31,15 +31,18 @@ #ifndef __T4_OFFLOAD_H__ #define __T4_OFFLOAD_H__ -/* CPL message priority levels */ -enum { - CPL_PRIORITY_DATA = 0, /* data messages */ - CPL_PRIORITY_SETUP = 1, /* connection setup messages */ - CPL_PRIORITY_TEARDOWN = 0, /* connection teardown messages */ - CPL_PRIORITY_LISTEN = 1, /* listen start/stop messages */ - CPL_PRIORITY_ACK = 1, /* RX ACK messages */ - CPL_PRIORITY_CONTROL = 1 /* control messages */ -}; +/* XXX: flagrant misuse of mbuf fields (during tx by TOM) */ +#define MBUF_EQ(m) (*((void **)(&(m)->m_pkthdr.rcvif))) +/* These have to work for !M_PKTHDR so we use a field from m_hdr. */ +#define MBUF_TX_CREDITS(m) ((m)->m_hdr.pad[0]) +#define MBUF_DMA_MAPPED(m) ((m)->m_hdr.pad[1]) + +#define INIT_ULPTX_WR(w, wrlen, atomic, tid) do { \ + (w)->wr.wr_hi = htonl(V_FW_WR_OP(FW_ULPTX_WR) | V_FW_WR_ATOMIC(atomic)); \ + (w)->wr.wr_mid = htonl(V_FW_WR_LEN16(DIV_ROUND_UP(wrlen, 16)) | \ + V_FW_WR_FLOWID(tid)); \ + (w)->wr.wr_lo = cpu_to_be64(0); \ +} while (0) #define INIT_TP_WR(w, tid) do { \ (w)->wr.wr_hi = htonl(V_FW_WR_OP(FW_TP_WR) | \ @@ -49,13 +52,19 @@ enum { (w)->wr.wr_lo = cpu_to_be64(0); \ } while (0) +#define INIT_TP_WR_MIT_CPL(w, cpl, tid) do { \ + INIT_TP_WR(w, tid); \ + OPCODE_TID(w) = htonl(MK_OPCODE_TID(cpl, tid)); \ +} while (0) + /* * Max # of ATIDs. The absolute HW max is 16K but we keep it lower. */ #define MAX_ATIDS 8192U -struct serv_entry { +union serv_entry { void *data; + union serv_entry *next; }; union aopen_entry { @@ -71,8 +80,7 @@ struct tid_info { void **tid_tab; unsigned int ntids; - struct serv_entry *stid_tab; - unsigned long *stid_bmap; + union serv_entry *stid_tab; unsigned int nstids; unsigned int stid_base; @@ -84,10 +92,15 @@ struct tid_info { unsigned int ftid_base; unsigned int ftids_in_use; + struct mtx atid_lock; union aopen_entry *afree; unsigned int atids_in_use; + struct mtx stid_lock; + union serv_entry *sfree; unsigned int stids_in_use; + + unsigned int tids_in_use; }; struct t4_range { @@ -101,6 +114,40 @@ struct t4_virt_res { /* virtualized HW resources */ struct t4_range stag; struct t4_range rq; struct t4_range pbl; + struct t4_range qp; + struct t4_range cq; + struct t4_range ocq; }; +#ifndef TCP_OFFLOAD_DISABLE +enum { + ULD_TOM = 1, +}; + +struct adapter; +struct port_info; +struct uld_info { + SLIST_ENTRY(uld_info) link; + int refcount; + int uld_id; + int (*attach)(struct adapter *, void **); + int (*detach)(void *); +}; + +struct uld_softc { + struct uld_info *uld; + void *softc; +}; + +struct tom_tunables { + int sndbuf; + int ddp; + int indsz; + int ddp_thres; +}; + +int t4_register_uld(struct uld_info *); +int t4_unregister_uld(struct uld_info *); +#endif + #endif |