1*d14abf15SRobert Mustacchi /*******************************************************************************
2*d14abf15SRobert Mustacchi * mm_l4if.h - L4 mm interface
3*d14abf15SRobert Mustacchi ******************************************************************************/
4*d14abf15SRobert Mustacchi #ifndef _MM_L4IF_H
5*d14abf15SRobert Mustacchi #define _MM_L4IF_H
6*d14abf15SRobert Mustacchi 
7*d14abf15SRobert Mustacchi 
8*d14abf15SRobert Mustacchi /* per OS methods */
9*d14abf15SRobert Mustacchi #if defined(DOS)
10*d14abf15SRobert Mustacchi #include "sync.h"
11*d14abf15SRobert Mustacchi #define MM_INIT_TCP_LOCK_HANDLE()
12*d14abf15SRobert Mustacchi 
13*d14abf15SRobert Mustacchi #define mm_acquire_tcp_lock(_pdev, con)  LOCK()
14*d14abf15SRobert Mustacchi #define mm_release_tcp_lock(_pdev, con)  UNLOCK()
15*d14abf15SRobert Mustacchi 
16*d14abf15SRobert Mustacchi #define MM_ACQUIRE_TOE_LOCK(_pdev)      LOCK()
17*d14abf15SRobert Mustacchi #define MM_RELEASE_TOE_LOCK(_pdev)      UNLOCK()
18*d14abf15SRobert Mustacchi 
19*d14abf15SRobert Mustacchi #define MM_ACQUIRE_TOE_GRQ_LOCK(_pdev, idx)  LOCK()
20*d14abf15SRobert Mustacchi #define MM_RELEASE_TOE_GRQ_LOCK(_pdev, idx)  UNLOCK()
21*d14abf15SRobert Mustacchi 
22*d14abf15SRobert Mustacchi #define MM_ACQUIRE_TOE_GRQ_LOCK_DPC(_pdev, idx) LOCK()
23*d14abf15SRobert Mustacchi #define MM_RELEASE_TOE_GRQ_LOCK_DPC(_pdev, idx) UNLOCK()
24*d14abf15SRobert Mustacchi 
25*d14abf15SRobert Mustacchi #elif defined(__LINUX) || defined(__SunOS)
26*d14abf15SRobert Mustacchi void
27*d14abf15SRobert Mustacchi mm_acquire_tcp_lock(
28*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
29*d14abf15SRobert Mustacchi     lm_tcp_con_t *tcp_con);
30*d14abf15SRobert Mustacchi 
31*d14abf15SRobert Mustacchi void
32*d14abf15SRobert Mustacchi mm_release_tcp_lock(
33*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
34*d14abf15SRobert Mustacchi     lm_tcp_con_t *tcp_con);
35*d14abf15SRobert Mustacchi 
36*d14abf15SRobert Mustacchi #define MM_INIT_TCP_LOCK_HANDLE()
37*d14abf15SRobert Mustacchi 
38*d14abf15SRobert Mustacchi void MM_ACQUIRE_TOE_LOCK(struct _lm_device_t *_pdev);
39*d14abf15SRobert Mustacchi void MM_RELEASE_TOE_LOCK(struct _lm_device_t *_pdev);
40*d14abf15SRobert Mustacchi void MM_ACQUIRE_TOE_GRQ_LOCK(struct _lm_device_t *_pdev, u8_t idx);
41*d14abf15SRobert Mustacchi void MM_RELEASE_TOE_GRQ_LOCK(struct _lm_device_t *_pdev, u8_t idx);
42*d14abf15SRobert Mustacchi void MM_ACQUIRE_TOE_GRQ_LOCK_DPC(struct _lm_device_t *_pdev, u8_t idx);
43*d14abf15SRobert Mustacchi void MM_RELEASE_TOE_GRQ_LOCK_DPC(struct _lm_device_t *_pdev, u8_t idx);
44*d14abf15SRobert Mustacchi 
45*d14abf15SRobert Mustacchi #elif defined(_VBD_) || defined(_VBD_CMD_)
46*d14abf15SRobert Mustacchi 
47*d14abf15SRobert Mustacchi #if USE_QUEUED_SLOCK
48*d14abf15SRobert Mustacchi 
49*d14abf15SRobert Mustacchi void
50*d14abf15SRobert Mustacchi mm_acquire_tcp_q_lock(
51*d14abf15SRobert Mustacchi     lm_device_t *pdev,
52*d14abf15SRobert Mustacchi     lm_tcp_con_t *tcp_con,
53*d14abf15SRobert Mustacchi     void *ql_hdl);
54*d14abf15SRobert Mustacchi void
55*d14abf15SRobert Mustacchi mm_release_tcp_q_lock(
56*d14abf15SRobert Mustacchi     lm_device_t *pdev,
57*d14abf15SRobert Mustacchi     lm_tcp_con_t *tcp_con,
58*d14abf15SRobert Mustacchi     void *ql_hdl);
59*d14abf15SRobert Mustacchi 
60*d14abf15SRobert Mustacchi /* MM_INIT_TCP_LOCK_HANDLE:
61*d14abf15SRobert Mustacchi  * a macro for decleration of KLOCK_QUEUE_HANDLE in stack, to be declared
62*d14abf15SRobert Mustacchi  * in stack by every lm/um caller to mm_acquire_tcp_q_lock.
63*d14abf15SRobert Mustacchi  * since KLOCK_QUEUE_HANDLE is a WDM structure that can't be compiled
64*d14abf15SRobert Mustacchi  * in lm, we define a size SIZEOF_QL_HDL that should be larger/equal to
65*d14abf15SRobert Mustacchi  * sizeof(KLOCK_QUEUE_HANDLE) */
66*d14abf15SRobert Mustacchi #define SIZEOF_QL_HDL 24 // 24 is the size KLOCK_QUEUE_HANDLE structure in Win 64 bit, so it supossed to be good enough for both 32 & 64
67*d14abf15SRobert Mustacchi #define MM_INIT_TCP_LOCK_HANDLE()   u8_t __ql_hdl[SIZEOF_QL_HDL] = {0}
68*d14abf15SRobert Mustacchi #define mm_acquire_tcp_lock(pdev,tcp_con)   mm_acquire_tcp_q_lock((pdev),(tcp_con),__ql_hdl)
69*d14abf15SRobert Mustacchi #define mm_release_tcp_lock(pdev,tcp_con)   mm_release_tcp_q_lock((pdev),(tcp_con),__ql_hdl)
70*d14abf15SRobert Mustacchi 
71*d14abf15SRobert Mustacchi #else /* USE_QUEUED_SLOCK */
72*d14abf15SRobert Mustacchi 
73*d14abf15SRobert Mustacchi #define MM_INIT_TCP_LOCK_HANDLE()
74*d14abf15SRobert Mustacchi 
75*d14abf15SRobert Mustacchi void
76*d14abf15SRobert Mustacchi mm_acquire_tcp_lock(
77*d14abf15SRobert Mustacchi     lm_device_t *pdev,
78*d14abf15SRobert Mustacchi     lm_tcp_con_t *tcp_con);
79*d14abf15SRobert Mustacchi 
80*d14abf15SRobert Mustacchi void
81*d14abf15SRobert Mustacchi mm_release_tcp_lock(
82*d14abf15SRobert Mustacchi     lm_device_t *pdev,
83*d14abf15SRobert Mustacchi     lm_tcp_con_t *tcp_con);
84*d14abf15SRobert Mustacchi 
85*d14abf15SRobert Mustacchi #endif /* USE_QUEUED_SLOCK */
86*d14abf15SRobert Mustacchi 
87*d14abf15SRobert Mustacchi void MM_ACQUIRE_TOE_LOCK(lm_device_t *_pdev);
88*d14abf15SRobert Mustacchi void MM_RELEASE_TOE_LOCK(lm_device_t *_pdev);
89*d14abf15SRobert Mustacchi void MM_ACQUIRE_TOE_GRQ_LOCK(lm_device_t *_pdev, u8_t idx);
90*d14abf15SRobert Mustacchi void MM_RELEASE_TOE_GRQ_LOCK(lm_device_t *_pdev, u8_t idx);
91*d14abf15SRobert Mustacchi void MM_ACQUIRE_TOE_GRQ_LOCK_DPC(lm_device_t *_pdev, u8_t idx);
92*d14abf15SRobert Mustacchi void MM_RELEASE_TOE_GRQ_LOCK_DPC(lm_device_t *_pdev, u8_t idx);
93*d14abf15SRobert Mustacchi 
94*d14abf15SRobert Mustacchi #elif defined(__USER_MODE_DEBUG)
95*d14abf15SRobert Mustacchi 
96*d14abf15SRobert Mustacchi #define MM_INIT_TCP_LOCK_HANDLE()
97*d14abf15SRobert Mustacchi 
mm_acquire_tcp_lock(struct _lm_device_t * pdev,lm_tcp_con_t * tcp_con)98*d14abf15SRobert Mustacchi __inline static void mm_acquire_tcp_lock(
99*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
100*d14abf15SRobert Mustacchi     lm_tcp_con_t *tcp_con)
101*d14abf15SRobert Mustacchi {
102*d14abf15SRobert Mustacchi     DbgMessage(pdev, INFORMl4, "Acquiring tcp lock for con %p\n", tcp_con);
103*d14abf15SRobert Mustacchi }
104*d14abf15SRobert Mustacchi 
mm_release_tcp_lock(struct _lm_device_t * pdev,lm_tcp_con_t * tcp_con)105*d14abf15SRobert Mustacchi __inline static void mm_release_tcp_lock(
106*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
107*d14abf15SRobert Mustacchi     lm_tcp_con_t *tcp_con)
108*d14abf15SRobert Mustacchi {
109*d14abf15SRobert Mustacchi     DbgMessage(pdev, INFORMl4, "Releasing tcp lock for con %p\n", tcp_con);
110*d14abf15SRobert Mustacchi }
111*d14abf15SRobert Mustacchi 
112*d14abf15SRobert Mustacchi #define MM_ACQUIRE_TOE_LOCK(_pdev)          DbgMessage(pdev, INFORMl4, "Acquiring global toe lock\n");
113*d14abf15SRobert Mustacchi #define MM_RELEASE_TOE_LOCK(_pdev)          DbgMessage(pdev, INFORMl4, "Releasing global toe lock\n");
114*d14abf15SRobert Mustacchi #define MM_ACQUIRE_TOE_GRQ_LOCK(_pdev, idx) DbgMessage(pdev, INFORMl4, "Acquiring global toe grq lock\n");
115*d14abf15SRobert Mustacchi #define MM_RELEASE_TOE_GRQ_LOCK(_pdev, idx) DbgMessage(pdev, INFORMl4, "Releasing global toe grq lock\n");
116*d14abf15SRobert Mustacchi #define MM_ACQUIRE_TOE_GRQ_LOCK_DPC(_pdev, idx) DbgMessage(pdev, INFORMl4, "Acquiring global toe grq lock\n");
117*d14abf15SRobert Mustacchi #define MM_RELEASE_TOE_GRQ_LOCK_DPC(_pdev, idx) DbgMessage(pdev, INFORMl4, "Releasing global toe grq lock\n");
118*d14abf15SRobert Mustacchi 
119*d14abf15SRobert Mustacchi #elif defined (NDISMONO)
120*d14abf15SRobert Mustacchi /*
121*d14abf15SRobert Mustacchi  * stubs for NDIS
122*d14abf15SRobert Mustacchi  */
123*d14abf15SRobert Mustacchi #define MM_INIT_TCP_LOCK_HANDLE()
124*d14abf15SRobert Mustacchi 
125*d14abf15SRobert Mustacchi void
126*d14abf15SRobert Mustacchi mm_acquire_tcp_lock(
127*d14abf15SRobert Mustacchi     lm_device_t *pdev,
128*d14abf15SRobert Mustacchi     lm_tcp_con_t *tcp_con);
129*d14abf15SRobert Mustacchi 
130*d14abf15SRobert Mustacchi void
131*d14abf15SRobert Mustacchi mm_release_tcp_lock(
132*d14abf15SRobert Mustacchi     lm_device_t *pdev,
133*d14abf15SRobert Mustacchi     lm_tcp_con_t *tcp_con);
134*d14abf15SRobert Mustacchi 
135*d14abf15SRobert Mustacchi void MM_ACQUIRE_TOE_LOCK(lm_device_t *_pdev);
136*d14abf15SRobert Mustacchi void MM_RELEASE_TOE_LOCK(lm_device_t *_pdev);
137*d14abf15SRobert Mustacchi void MM_ACQUIRE_TOE_GRQ_LOCK(lm_device_t *_pdev, u8_t idx);
138*d14abf15SRobert Mustacchi void MM_RELEASE_TOE_GRQ_LOCK(lm_device_t *_pdev, u8_t idx);
139*d14abf15SRobert Mustacchi void MM_ACQUIRE_TOE_GRQ_LOCK_DPC(lm_device_t *_pdev, u8_t idx);
140*d14abf15SRobert Mustacchi void MM_RELEASE_TOE_GRQ_LOCK_DPC(lm_device_t *_pdev, u8_t idx);
141*d14abf15SRobert Mustacchi 
142*d14abf15SRobert Mustacchi #endif /* NDISMONO */
143*d14abf15SRobert Mustacchi 
144*d14abf15SRobert Mustacchi u32_t mm_tcp_rx_peninsula_to_rq_copy_dmae(
145*d14abf15SRobert Mustacchi     struct _lm_device_t * pdev,
146*d14abf15SRobert Mustacchi     lm_tcp_state_t      * tcp,
147*d14abf15SRobert Mustacchi     lm_address_t          gen_buf_phys,    /* Memory buffer to copy from */
148*d14abf15SRobert Mustacchi     u32_t                 gen_buf_offset,
149*d14abf15SRobert Mustacchi     lm_tcp_buffer_t     * tcp_buf,         /* TCP buffer to copy to      */
150*d14abf15SRobert Mustacchi     u32_t                 tcp_buf_offset,
151*d14abf15SRobert Mustacchi     u32_t                 nbytes
152*d14abf15SRobert Mustacchi     );
153*d14abf15SRobert Mustacchi 
154*d14abf15SRobert Mustacchi void mm_tcp_comp_slow_path_request(
155*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
156*d14abf15SRobert Mustacchi     lm_tcp_state_t *tcp,
157*d14abf15SRobert Mustacchi     lm_tcp_slow_path_request_t *sp_request);
158*d14abf15SRobert Mustacchi 
159*d14abf15SRobert Mustacchi /** Description:
160*d14abf15SRobert Mustacchi  *  - complete Tx and Rx application buffers towards the client
161*d14abf15SRobert Mustacchi  *    (with any kind of completion status)
162*d14abf15SRobert Mustacchi  *  - handle various pending �down stream� tasks: post more application buffers,
163*d14abf15SRobert Mustacchi  *    post graceful disconnect request (Tx only)
164*d14abf15SRobert Mustacchi  * Assumptions:
165*d14abf15SRobert Mustacchi  *  - in each given lm buffer with flag BUFFER_END the field �app_buf_xferred�
166*d14abf15SRobert Mustacchi  *    was correctly set by the caller */
167*d14abf15SRobert Mustacchi void mm_tcp_complete_bufs(
168*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
169*d14abf15SRobert Mustacchi     lm_tcp_state_t      *tcp,
170*d14abf15SRobert Mustacchi     lm_tcp_con_t        *tcp_con,   /* Rx OR Tx connection */
171*d14abf15SRobert Mustacchi     s_list_t            *buf_list,  /* list of lm_tcp_buffer_t */
172*d14abf15SRobert Mustacchi     lm_status_t         lm_status   /* completion status for all given TBs */
173*d14abf15SRobert Mustacchi     );
174*d14abf15SRobert Mustacchi 
175*d14abf15SRobert Mustacchi 
176*d14abf15SRobert Mustacchi 
177*d14abf15SRobert Mustacchi /**
178*d14abf15SRobert Mustacchi  * Description:
179*d14abf15SRobert Mustacchi  *        Returns TRUE if generic data OR preposted buffer is being indicated to the client
180*d14abf15SRobert Mustacchi  * for the given connection and FALSE otherwise.
181*d14abf15SRobert Mustacchi  *
182*d14abf15SRobert Mustacchi  */
183*d14abf15SRobert Mustacchi u8_t mm_tcp_indicating_bufs(
184*d14abf15SRobert Mustacchi     lm_tcp_con_t * con
185*d14abf15SRobert Mustacchi     );
186*d14abf15SRobert Mustacchi 
187*d14abf15SRobert Mustacchi /** Description:
188*d14abf15SRobert Mustacchi  *  - Completes graceful disconnect request towards client with the given status.
189*d14abf15SRobert Mustacchi  * Assumptions:
190*d14abf15SRobert Mustacchi  *  - Assumptions described in client.disconnect_tcp_done() (see design doc)
191*d14abf15SRobert Mustacchi  *  - The connection's lock is already taken by the caller
192*d14abf15SRobert Mustacchi  */
193*d14abf15SRobert Mustacchi void mm_tcp_abort_bufs (
194*d14abf15SRobert Mustacchi     IN    struct _lm_device_t     * pdev,  /* device handle */
195*d14abf15SRobert Mustacchi     IN    lm_tcp_state_t          * tcp,   /* L4 state handle */
196*d14abf15SRobert Mustacchi     IN    lm_tcp_con_t            * con,   /* connection handle */
197*d14abf15SRobert Mustacchi     IN    lm_status_t               status /* status to abort buffers with */
198*d14abf15SRobert Mustacchi     );
199*d14abf15SRobert Mustacchi 
200*d14abf15SRobert Mustacchi /**
201*d14abf15SRobert Mustacchi  * Description:
202*d14abf15SRobert Mustacchi  *    Indicates toward the client reception of the remote FIN.
203*d14abf15SRobert Mustacchi  *
204*d14abf15SRobert Mustacchi  */
205*d14abf15SRobert Mustacchi void mm_tcp_indicate_fin_received(
206*d14abf15SRobert Mustacchi     IN   struct _lm_device_t     * pdev,   /* device handle */
207*d14abf15SRobert Mustacchi     IN   lm_tcp_state_t          * tcp
208*d14abf15SRobert Mustacchi     );
209*d14abf15SRobert Mustacchi 
210*d14abf15SRobert Mustacchi /**
211*d14abf15SRobert Mustacchi  * Description:
212*d14abf15SRobert Mustacchi  *    Indicates toward the client reception of the remote RST.
213*d14abf15SRobert Mustacchi  *
214*d14abf15SRobert Mustacchi  */
215*d14abf15SRobert Mustacchi void mm_tcp_indicate_rst_received(
216*d14abf15SRobert Mustacchi     IN   struct _lm_device_t     * pdev,          /* device handle */
217*d14abf15SRobert Mustacchi     IN   lm_tcp_state_t          * tcp
218*d14abf15SRobert Mustacchi     );
219*d14abf15SRobert Mustacchi 
220*d14abf15SRobert Mustacchi 
221*d14abf15SRobert Mustacchi /**
222*d14abf15SRobert Mustacchi  * Description:
223*d14abf15SRobert Mustacchi  *      Indicates toward the client the completion of the FIN request.
224*d14abf15SRobert Mustacchi  */
225*d14abf15SRobert Mustacchi void mm_tcp_graceful_disconnect_done(
226*d14abf15SRobert Mustacchi     IN   struct _lm_device_t     * pdev,    /* device handle */
227*d14abf15SRobert Mustacchi     IN   lm_tcp_state_t          * tcp,     /* L4 state handle */
228*d14abf15SRobert Mustacchi     IN   lm_status_t               status   /* May be SUCCESS, ABORTED or UPLOAD IN PROGRESS */
229*d14abf15SRobert Mustacchi     );
230*d14abf15SRobert Mustacchi 
231*d14abf15SRobert Mustacchi 
232*d14abf15SRobert Mustacchi 
233*d14abf15SRobert Mustacchi /** Description
234*d14abf15SRobert Mustacchi  *  This function is called by lm when there are generic buffers that need indication
235*d14abf15SRobert Mustacchi  *  - indicate received data using generic buffers to the client (client.indicate_tcp_rx_buf)
236*d14abf15SRobert Mustacchi  *  - receive the buffered data by calling lm_get_buffered_data, and notify the lm of the
237*d14abf15SRobert Mustacchi  *    status by calling lm_buffer_data_indicated after returning from client.indicate_tcp_rx_buf
238*d14abf15SRobert Mustacchi  */
239*d14abf15SRobert Mustacchi void mm_tcp_rx_indicate_gen (
240*d14abf15SRobert Mustacchi     struct _lm_device_t * pdev,
241*d14abf15SRobert Mustacchi     lm_tcp_state_t      * tcp
242*d14abf15SRobert Mustacchi     );
243*d14abf15SRobert Mustacchi 
244*d14abf15SRobert Mustacchi /** Description
245*d14abf15SRobert Mustacchi  *  Removes Generic Buffers from the generic buffer pool and passes them to the LM.
246*d14abf15SRobert Mustacchi  *
247*d14abf15SRobert Mustacchi  *  Returns:
248*d14abf15SRobert Mustacchi  *  - The actual number of buffers returned (may be less than required_bufs in case there are not
249*d14abf15SRobert Mustacchi  *    enough buffers in the pool)
250*d14abf15SRobert Mustacchi  */
251*d14abf15SRobert Mustacchi u32_t mm_tcp_get_gen_bufs(
252*d14abf15SRobert Mustacchi     struct _lm_device_t * pdev,
253*d14abf15SRobert Mustacchi     d_list_t            * gb_list,
254*d14abf15SRobert Mustacchi     u32_t                 nbufs,
255*d14abf15SRobert Mustacchi     u8_t                  sb_idx
256*d14abf15SRobert Mustacchi     );
257*d14abf15SRobert Mustacchi 
258*d14abf15SRobert Mustacchi /** Description
259*d14abf15SRobert Mustacchi  *  Returns a list of generic buffers to the generic buffer pool
260*d14abf15SRobert Mustacchi  * Assumption:
261*d14abf15SRobert Mustacchi  *  gen_buf is a list of generic buffers that ALL need to be returned to the pool
262*d14abf15SRobert Mustacchi  */
263*d14abf15SRobert Mustacchi #define MM_TCP_RGB_COMPENSATE_GRQS      0x01
264*d14abf15SRobert Mustacchi #define MM_TCP_RGB_COLLECT_GEN_BUFS     0x02
265*d14abf15SRobert Mustacchi 
266*d14abf15SRobert Mustacchi #define MM_TCP_RGB_USE_ALL_GEN_BUFS     0x80
267*d14abf15SRobert Mustacchi 
268*d14abf15SRobert Mustacchi #define NON_EXISTENT_SB_IDX             0xFF
269*d14abf15SRobert Mustacchi 
270*d14abf15SRobert Mustacchi void mm_tcp_return_gen_bufs(
271*d14abf15SRobert Mustacchi     struct _lm_device_t * pdev,
272*d14abf15SRobert Mustacchi     lm_tcp_gen_buf_t    * gen_buf,
273*d14abf15SRobert Mustacchi     u32_t                 flags,
274*d14abf15SRobert Mustacchi     u8_t                  grq_idx
275*d14abf15SRobert Mustacchi     );
276*d14abf15SRobert Mustacchi 
277*d14abf15SRobert Mustacchi 
278*d14abf15SRobert Mustacchi void mm_tcp_return_list_of_gen_bufs(
279*d14abf15SRobert Mustacchi     struct _lm_device_t * pdev,
280*d14abf15SRobert Mustacchi     d_list_t            * gen_buf_list,
281*d14abf15SRobert Mustacchi     u32_t                 flags,
282*d14abf15SRobert Mustacchi     u8_t                  grq_idx
283*d14abf15SRobert Mustacchi     );
284*d14abf15SRobert Mustacchi 
285*d14abf15SRobert Mustacchi /** Description
286*d14abf15SRobert Mustacchi  *  Copys data from a memory buffer to the tcp buffer using client_if.copy_l4buffer
287*d14abf15SRobert Mustacchi  * Assumptions:
288*d14abf15SRobert Mustacchi  * - size of mem_buf is larger than nbytes
289*d14abf15SRobert Mustacchi  * Returns:
290*d14abf15SRobert Mustacchi  * - The actual number of bytes copied
291*d14abf15SRobert Mustacchi  */
292*d14abf15SRobert Mustacchi u32_t mm_tcp_copy_to_tcp_buf(
293*d14abf15SRobert Mustacchi     struct _lm_device_t * pdev,
294*d14abf15SRobert Mustacchi     lm_tcp_state_t      * tcp_state,
295*d14abf15SRobert Mustacchi     lm_tcp_buffer_t     * tcp_buf,         /* TCP buffer to copy to      */
296*d14abf15SRobert Mustacchi     u8_t                * mem_buf,         /* Memory buffer to copy from */
297*d14abf15SRobert Mustacchi     u32_t                 tcp_buf_offset,
298*d14abf15SRobert Mustacchi     u32_t                 nbytes
299*d14abf15SRobert Mustacchi     );
300*d14abf15SRobert Mustacchi 
301*d14abf15SRobert Mustacchi void
302*d14abf15SRobert Mustacchi mm_tcp_indicate_retrieve_indication(
303*d14abf15SRobert Mustacchi     struct _lm_device_t *pdev,
304*d14abf15SRobert Mustacchi     lm_tcp_state_t *tcp_state,
305*d14abf15SRobert Mustacchi     l4_upload_reason_t upload_reason);
306*d14abf15SRobert Mustacchi 
307*d14abf15SRobert Mustacchi /** Description
308*d14abf15SRobert Mustacchi  *  This function is used for updating the required number of generic buffer pools
309*d14abf15SRobert Mustacchi  *  given an old and new mss and initial receive window. It is called as a result of an
310*d14abf15SRobert Mustacchi  *  update to one of these parameters
311*d14abf15SRobert Mustacchi  */
312*d14abf15SRobert Mustacchi void mm_tcp_update_required_gen_bufs(
313*d14abf15SRobert Mustacchi     struct _lm_device_t * pdev,
314*d14abf15SRobert Mustacchi     u32_t  new_mss,
315*d14abf15SRobert Mustacchi     u32_t  old_mss,
316*d14abf15SRobert Mustacchi     u32_t  new_initial_rcv_wnd,
317*d14abf15SRobert Mustacchi     u32_t  old_initial_rcv_wnd);
318*d14abf15SRobert Mustacchi 
319*d14abf15SRobert Mustacchi /** Description
320*d14abf15SRobert Mustacchi  *  completes a path upload request. It completes the request to the client
321*d14abf15SRobert Mustacchi  *  only if coplete_to_client is true...
322*d14abf15SRobert Mustacchi  */
323*d14abf15SRobert Mustacchi void mm_tcp_complete_path_upload_request(
324*d14abf15SRobert Mustacchi     struct _lm_device_t * pdev,
325*d14abf15SRobert Mustacchi     lm_path_state_t     * path);
326*d14abf15SRobert Mustacchi 
327*d14abf15SRobert Mustacchi 
328*d14abf15SRobert Mustacchi /** Description
329*d14abf15SRobert Mustacchi  * called when the upload neigh request is completed. This occurs when the last path dependent
330*d14abf15SRobert Mustacchi  * of a path state that is in the upload_pending state has been upload completed
331*d14abf15SRobert Mustacchi  * Assumptions
332*d14abf15SRobert Mustacchi  *  - caller holds the TOE LOCK
333*d14abf15SRobert Mustacchi  */
334*d14abf15SRobert Mustacchi void mm_tcp_complete_neigh_upload_request(
335*d14abf15SRobert Mustacchi     struct _lm_device_t * pdev,
336*d14abf15SRobert Mustacchi     lm_neigh_state_t    * neigh
337*d14abf15SRobert Mustacchi     );
338*d14abf15SRobert Mustacchi 
339*d14abf15SRobert Mustacchi /* Post an empty ramrod initiated by TOE. */
340*d14abf15SRobert Mustacchi lm_status_t mm_tcp_post_empty_slow_path_request(
341*d14abf15SRobert Mustacchi     struct _lm_device_t * pdev,
342*d14abf15SRobert Mustacchi     lm_tcp_state_t      * tcp,
343*d14abf15SRobert Mustacchi     u32_t                 request_type);
344*d14abf15SRobert Mustacchi 
345*d14abf15SRobert Mustacchi /* Delete the tcp state (initiated from lm)  */
346*d14abf15SRobert Mustacchi void mm_tcp_del_tcp_state(
347*d14abf15SRobert Mustacchi     struct _lm_device_t * pdev,
348*d14abf15SRobert Mustacchi     lm_tcp_state_t * tcp);
349*d14abf15SRobert Mustacchi 
350*d14abf15SRobert Mustacchi #endif /* _MM_L4IF_H */
351