xref: /freebsd-11-stable/sys/dev/cxgb/ulp/tom/cxgb_toepcb.h (revision 98e0ffaefb0f241cda3a72395d3be04192ae0d47)
1 /*-
2  * Copyright (c) 2007-2009, Chelsio Inc.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *
8  * 1. Redistributions of source code must retain the above copyright notice,
9  *    this list of conditions and the following disclaimer.
10  *
11  * 2. Neither the name of the Chelsio Corporation nor the names of its
12  *    contributors may be used to endorse or promote products derived from
13  *    this software without specific prior written permission.
14  *
15  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
16  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
19  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25  * POSSIBILITY OF SUCH DAMAGE.
26  *
27  * $FreeBSD$
28  */
29 #ifndef CXGB_TOEPCB_H_
30 #define CXGB_TOEPCB_H_
31 #include <sys/bus.h>
32 #include <sys/condvar.h>
33 #include <sys/limits.h>
34 
35 #define TP_DATASENT         	(1 << 0)
36 #define TP_TX_WAIT_IDLE      	(1 << 1)
37 #define TP_FIN_SENT          	(1 << 2)
38 #define TP_ABORT_RPL_PENDING 	(1 << 3)
39 #define TP_ABORT_SHUTDOWN    	(1 << 4)
40 #define TP_ABORT_RPL_RCVD    	(1 << 5)
41 #define TP_ABORT_REQ_RCVD    	(1 << 6)
42 #define TP_ATTACHED	    	(1 << 7)
43 #define TP_CPL_DONE		(1 << 8)
44 #define TP_IS_A_SYNQ_ENTRY	(1 << 9)
45 #define TP_ABORT_RPL_SENT	(1 << 10)
46 #define TP_SEND_FIN          	(1 << 11)
47 #define TP_SYNQE_EXPANDED	(1 << 12)
48 
49 struct toepcb {
50 	TAILQ_ENTRY(toepcb) link; /* toep_list */
51 	int 			tp_flags;
52 	struct toedev 		*tp_tod;
53 	struct l2t_entry 	*tp_l2t;
54 	int			tp_tid;
55 	int 			tp_wr_max;
56 	int 			tp_wr_avail;
57 	int 			tp_wr_unacked;
58 	int 			tp_delack_mode;
59 	int 			tp_ulp_mode;
60 	int 			tp_qset;
61 	int 			tp_enqueued;
62 	int 			tp_rx_credits;
63 
64 	struct inpcb 		*tp_inp;
65 	struct mbuf		*tp_m_last;
66 
67 	struct mbufq 		wr_list;
68 	struct mbufq 		out_of_order_queue;
69 };
70 
71 static inline void
reset_wr_list(struct toepcb * toep)72 reset_wr_list(struct toepcb *toep)
73 {
74 	mbufq_init(&toep->wr_list, INT_MAX);	/* XXX: sane limit needed */
75 }
76 
77 static inline void
enqueue_wr(struct toepcb * toep,struct mbuf * m)78 enqueue_wr(struct toepcb *toep, struct mbuf *m)
79 {
80 	(void )mbufq_enqueue(&toep->wr_list, m);
81 }
82 
83 static inline struct mbuf *
peek_wr(const struct toepcb * toep)84 peek_wr(const struct toepcb *toep)
85 {
86 	return (mbufq_first(&toep->wr_list));
87 }
88 
89 static inline struct mbuf *
dequeue_wr(struct toepcb * toep)90 dequeue_wr(struct toepcb *toep)
91 {
92 	return (mbufq_dequeue(&toep->wr_list));
93 }
94 
95 #endif
96