d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*******************************************************************************
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi* mm_l4if.h - L4 mm interface
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi******************************************************************************/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifndef _MM_L4IF_H
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define _MM_L4IF_H
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* per OS methods */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if defined(DOS)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include "sync.h"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_INIT_TCP_LOCK_HANDLE()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_acquire_tcp_lock(_pdev, con) LOCK()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_release_tcp_lock(_pdev, con) UNLOCK()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_ACQUIRE_TOE_LOCK(_pdev) LOCK()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_RELEASE_TOE_LOCK(_pdev) UNLOCK()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_ACQUIRE_TOE_GRQ_LOCK(_pdev, idx) LOCK()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_RELEASE_TOE_GRQ_LOCK(_pdev, idx) UNLOCK()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_ACQUIRE_TOE_GRQ_LOCK_DPC(_pdev, idx) LOCK()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_RELEASE_TOE_GRQ_LOCK_DPC(_pdev, idx) UNLOCK()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#elif defined(__LINUX) || defined(__SunOS)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchimm_acquire_tcp_lock(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_con_t *tcp_con);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchimm_release_tcp_lock(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_con_t *tcp_con);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_INIT_TCP_LOCK_HANDLE()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_TOE_LOCK(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_TOE_LOCK(struct _lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_TOE_GRQ_LOCK(struct _lm_device_t *_pdev, u8_t idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_TOE_GRQ_LOCK(struct _lm_device_t *_pdev, u8_t idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_TOE_GRQ_LOCK_DPC(struct _lm_device_t *_pdev, u8_t idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_TOE_GRQ_LOCK_DPC(struct _lm_device_t *_pdev, u8_t idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#elif defined(_VBD_) || defined(_VBD_CMD_)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#if USE_QUEUED_SLOCK
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchimm_acquire_tcp_q_lock(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_con_t *tcp_con,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void *ql_hdl);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchimm_release_tcp_q_lock(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_con_t *tcp_con,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void *ql_hdl);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* MM_INIT_TCP_LOCK_HANDLE:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * a macro for decleration of KLOCK_QUEUE_HANDLE in stack, to be declared
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * in stack by every lm/um caller to mm_acquire_tcp_q_lock.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * since KLOCK_QUEUE_HANDLE is a WDM structure that can't be compiled
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * in lm, we define a size SIZEOF_QL_HDL that should be larger/equal to
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * sizeof(KLOCK_QUEUE_HANDLE) */
d14abf155341d55053c76eeec58b787a456b753bRobert 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
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_INIT_TCP_LOCK_HANDLE() u8_t __ql_hdl[SIZEOF_QL_HDL] = {0}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_acquire_tcp_lock(pdev,tcp_con) mm_acquire_tcp_q_lock((pdev),(tcp_con),__ql_hdl)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define mm_release_tcp_lock(pdev,tcp_con) mm_release_tcp_q_lock((pdev),(tcp_con),__ql_hdl)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#else /* USE_QUEUED_SLOCK */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_INIT_TCP_LOCK_HANDLE()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchimm_acquire_tcp_lock(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_con_t *tcp_con);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchimm_release_tcp_lock(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_con_t *tcp_con);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* USE_QUEUED_SLOCK */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_TOE_LOCK(lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_TOE_LOCK(lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_TOE_GRQ_LOCK(lm_device_t *_pdev, u8_t idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_TOE_GRQ_LOCK(lm_device_t *_pdev, u8_t idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_TOE_GRQ_LOCK_DPC(lm_device_t *_pdev, u8_t idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_TOE_GRQ_LOCK_DPC(lm_device_t *_pdev, u8_t idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#elif defined(__USER_MODE_DEBUG)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_INIT_TCP_LOCK_HANDLE()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline static void mm_acquire_tcp_lock(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_con_t *tcp_con)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi DbgMessage(pdev, INFORMl4, "Acquiring tcp lock for con %p\n", tcp_con);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline static void mm_release_tcp_lock(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_con_t *tcp_con)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi DbgMessage(pdev, INFORMl4, "Releasing tcp lock for con %p\n", tcp_con);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_ACQUIRE_TOE_LOCK(_pdev) DbgMessage(pdev, INFORMl4, "Acquiring global toe lock\n");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_RELEASE_TOE_LOCK(_pdev) DbgMessage(pdev, INFORMl4, "Releasing global toe lock\n");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_ACQUIRE_TOE_GRQ_LOCK(_pdev, idx) DbgMessage(pdev, INFORMl4, "Acquiring global toe grq lock\n");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_RELEASE_TOE_GRQ_LOCK(_pdev, idx) DbgMessage(pdev, INFORMl4, "Releasing global toe grq lock\n");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_ACQUIRE_TOE_GRQ_LOCK_DPC(_pdev, idx) DbgMessage(pdev, INFORMl4, "Acquiring global toe grq lock\n");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_RELEASE_TOE_GRQ_LOCK_DPC(_pdev, idx) DbgMessage(pdev, INFORMl4, "Releasing global toe grq lock\n");
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#elif defined (NDISMONO)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * stubs for NDIS
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_INIT_TCP_LOCK_HANDLE()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchimm_acquire_tcp_lock(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_con_t *tcp_con);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchimm_release_tcp_lock(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_con_t *tcp_con);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_TOE_LOCK(lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_TOE_LOCK(lm_device_t *_pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_TOE_GRQ_LOCK(lm_device_t *_pdev, u8_t idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_TOE_GRQ_LOCK(lm_device_t *_pdev, u8_t idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_ACQUIRE_TOE_GRQ_LOCK_DPC(lm_device_t *_pdev, u8_t idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid MM_RELEASE_TOE_GRQ_LOCK_DPC(lm_device_t *_pdev, u8_t idx);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* NDISMONO */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu32_t mm_tcp_rx_peninsula_to_rq_copy_dmae(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t * tcp,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_address_t gen_buf_phys, /* Memory buffer to copy from */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t gen_buf_offset,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_buffer_t * tcp_buf, /* TCP buffer to copy to */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t tcp_buf_offset,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t nbytes
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid mm_tcp_comp_slow_path_request(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t *tcp,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_slow_path_request_t *sp_request);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - complete Tx and Rx application buffers towards the client
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * (with any kind of completion status)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - handle various pending �down stream� tasks: post more application buffers,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * post graceful disconnect request (Tx only)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Assumptions:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - in each given lm buffer with flag BUFFER_END the field �app_buf_xferred�
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * was correctly set by the caller */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid mm_tcp_complete_bufs(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t *tcp,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_con_t *tcp_con, /* Rx OR Tx connection */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t *buf_list, /* list of lm_tcp_buffer_t */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_status_t lm_status /* completion status for all given TBs */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/**
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Description:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Returns TRUE if generic data OR preposted buffer is being indicated to the client
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * for the given connection and FALSE otherwise.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu8_t mm_tcp_indicating_bufs(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_con_t * con
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - Completes graceful disconnect request towards client with the given status.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Assumptions:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - Assumptions described in client.disconnect_tcp_done() (see design doc)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - The connection's lock is already taken by the caller
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid mm_tcp_abort_bufs (
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN struct _lm_device_t * pdev, /* device handle */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN lm_tcp_state_t * tcp, /* L4 state handle */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN lm_tcp_con_t * con, /* connection handle */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN lm_status_t status /* status to abort buffers with */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/**
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Description:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Indicates toward the client reception of the remote FIN.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid mm_tcp_indicate_fin_received(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN struct _lm_device_t * pdev, /* device handle */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN lm_tcp_state_t * tcp
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/**
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Description:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Indicates toward the client reception of the remote RST.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid mm_tcp_indicate_rst_received(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN struct _lm_device_t * pdev, /* device handle */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN lm_tcp_state_t * tcp
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/**
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Description:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Indicates toward the client the completion of the FIN request.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid mm_tcp_graceful_disconnect_done(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN struct _lm_device_t * pdev, /* device handle */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN lm_tcp_state_t * tcp, /* L4 state handle */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN lm_status_t status /* May be SUCCESS, ABORTED or UPLOAD IN PROGRESS */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * This function is called by lm when there are generic buffers that need indication
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - indicate received data using generic buffers to the client (client.indicate_tcp_rx_buf)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - receive the buffered data by calling lm_get_buffered_data, and notify the lm of the
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * status by calling lm_buffer_data_indicated after returning from client.indicate_tcp_rx_buf
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid mm_tcp_rx_indicate_gen (
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t * tcp
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Removes Generic Buffers from the generic buffer pool and passes them to the LM.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Returns:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - The actual number of buffers returned (may be less than required_bufs in case there are not
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * enough buffers in the pool)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu32_t mm_tcp_get_gen_bufs(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t * gb_list,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t nbufs,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t sb_idx
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Returns a list of generic buffers to the generic buffer pool
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Assumption:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * gen_buf is a list of generic buffers that ALL need to be returned to the pool
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_TCP_RGB_COMPENSATE_GRQS 0x01
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_TCP_RGB_COLLECT_GEN_BUFS 0x02
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define MM_TCP_RGB_USE_ALL_GEN_BUFS 0x80
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define NON_EXISTENT_SB_IDX 0xFF
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid mm_tcp_return_gen_bufs(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_gen_buf_t * gen_buf,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t flags,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t grq_idx
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid mm_tcp_return_list_of_gen_bufs(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t * gen_buf_list,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t flags,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t grq_idx
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Copys data from a memory buffer to the tcp buffer using client_if.copy_l4buffer
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Assumptions:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - size of mem_buf is larger than nbytes
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Returns:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - The actual number of bytes copied
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu32_t mm_tcp_copy_to_tcp_buf(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t * tcp_state,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_buffer_t * tcp_buf, /* TCP buffer to copy to */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t * mem_buf, /* Memory buffer to copy from */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t tcp_buf_offset,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t nbytes
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchimm_tcp_indicate_retrieve_indication(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t *tcp_state,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi l4_upload_reason_t upload_reason);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * This function is used for updating the required number of generic buffer pools
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * given an old and new mss and initial receive window. It is called as a result of an
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * update to one of these parameters
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid mm_tcp_update_required_gen_bufs(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t new_mss,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t old_mss,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t new_initial_rcv_wnd,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t old_initial_rcv_wnd);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * completes a path upload request. It completes the request to the client
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * only if coplete_to_client is true...
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid mm_tcp_complete_path_upload_request(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_path_state_t * path);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * called when the upload neigh request is completed. This occurs when the last path dependent
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * of a path state that is in the upload_pending state has been upload completed
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Assumptions
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - caller holds the TOE LOCK
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid mm_tcp_complete_neigh_upload_request(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_neigh_state_t * neigh
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Post an empty ramrod initiated by TOE. */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t mm_tcp_post_empty_slow_path_request(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t * tcp,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t request_type);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Delete the tcp state (initiated from lm) */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid mm_tcp_del_tcp_state(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t * tcp);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* _MM_L4IF_H */