d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*******************************************************************************
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi* lm_l4if.h - L4 lm interface
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi******************************************************************************/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifndef _LM_L4IF_H
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define _LM_L4IF_H
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_tcp_init_chip_common(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_tcp_init(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_tcp_init_resc(struct _lm_device_t *pdev, u8_t b_is_init );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_tcp_init_chip(struct _lm_device_t *pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_tcp_start_chip(struct _lm_device_t *pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_tcp_set_ofld_params(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_state_block_t *state_blk,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi l4_ofld_params_t *params);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_tcp_init_neigh_state(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_state_block_t *state_blk,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_neigh_state_t *neigh,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi l4_neigh_const_state_t *neigh_const,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi l4_neigh_cached_state_t *neigh_cached,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi l4_neigh_delegated_state_t *neigh_delegated);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_tcp_init_path_state(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_state_block_t *state_blk,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_path_state_t *path,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_neigh_state_t *neigh,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi l4_path_const_state_t *path_const,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi l4_path_cached_state_t *path_cached,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi l4_path_delegated_state_t *path_delegated);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_tcp_init_tcp_state(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_state_block_t *state_blk,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t *tcp,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_path_state_t *path,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi l4_tcp_const_state_t *tcp_const,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi l4_tcp_cached_state_t *tcp_cached,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi l4_tcp_delegated_state_t *tcp_delegated,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t tcp_cid_addr);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Initialize the tx/rx connection fields and resources
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Parameters
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - mblk: memory block for the virtual memory
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - phy_mblk: memory block for the physical memory
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_tcp_init_tcp_resc(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t *tcp,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_mem_block_t * mblk,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_phy_mem_block_t * phy_mblk);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Post buffered data
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_tcp_post_buffered_data(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t *tcp,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi d_list_t *buffered_data);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Init sp_data phys and virt memory for a given tcp state to
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * the sp_req_mgr sp_data memory
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid lm_tcp_init_tcp_sp_data_mem(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t *tcp
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Initialize the common fields, or fields specific for rx/tx that use the
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * same space in the memory block (such as doorbell-data)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Parameters
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - mblk: memory block for the virtual memory
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - phy_mblk: memory block for the physical memory
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_tcp_init_tcp_common(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t *tcp);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Get the required size for a connections virtual memory
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Parameters:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - tcp_state: A specific tcp state that the size is requested for. If NULL, then
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * the default size is returned
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu32_t lm_tcp_get_virt_size(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t * tcp_state);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Get the required size for a connections physical memory
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Assumptions: Physical memory size is the same for all connections
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu32_t lm_tcp_get_phys_size(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t * pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_tcp_post_upload_path_request (
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_path_state_t * path_state,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi l4_path_delegated_state_t * ret_delegated);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_tcp_post_upload_neigh_request(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_neigh_state_t * neigh_state);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Desciption:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * delete tcp state from lm _except_ from actual freeing of memory.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * the task of freeing of memory is done in lm_tcp_free_tcp_state()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Assumptions:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * global toe lock is taken by the caller
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid lm_tcp_del_tcp_state(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t *tcp);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Desciption:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * delete path state from lm
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Assumptions:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * global toe lock is taken by the caller
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid lm_tcp_del_path_state(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_path_state_t *path);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Desciption:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * delete neigh state from lm
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Assumptions:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * global toe lock is taken by the caller
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid lm_tcp_del_neigh_state(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_neigh_state_t *neigh);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid lm_tcp_free_tcp_resc(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t *tcp);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_tcp_post_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 *request);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* initiate offload request completion */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid lm_tcp_comp_initiate_offload_request(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t *tcp,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t comp_status);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_tcp_tx_post_buf(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t *tcp,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_buffer_t *tcp_buf,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_frag_list_t *frag_list);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_tcp_rx_post_buf(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t *tcp,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_buffer_t *tcp_buf,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_frag_list_t *frag_list
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Returns data that is buffered in the generic buffers to the mm.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * after this function completes, and the data is indicated to the client
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * the next function (lm_tcp_rx_buffered_data_indicated) should be called.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Assumptions:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - function is called as a result of a call to mm_tcp_rx_indicate_gen
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - return_buf_ctx will be sent to lm_tcp_rx_buffered_data_indicated and to l4_buffer_return
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Returns:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - LM_STATUS_SUCCESS - buffered data succesfully passed to mm
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - LM_STATUS_FAILURE - no more buffered data
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_tcp_rx_get_buffered_data(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN lm_tcp_state_t * tcp,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi OUT lm_frag_list_t ** frag_list,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi OUT lm_tcp_gen_buf_t ** gen_buf /* head of indications generic buffer */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Called from the flow of terminate. Returns data that is buffered in the generic buffers
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * with no conditions
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Assumptions:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - function is called as a result of a terminate
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - return_buf_ctx will be sent to l4_buffer_return
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_tcp_rx_get_buffered_data_from_terminate (
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN lm_tcp_state_t * tcp,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi OUT lm_frag_list_t ** frag_list,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi OUT lm_tcp_gen_buf_t ** gen_buf /* head of indications generic buffer */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Called by the mm to notify the result of the indication
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * accepted_bytes contains the number of bytes that were accepted by the client. This value can
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * be less than the indicated number of bytes. In which case the indication was a partially succesful
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * indication
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Assumption:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - This function is called as a result of a call to mm_tcp_rx_indicate_gen call
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * and only after lm_tcp_rx_get_buffered_data was called.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - return_buf_ctx is the buffer returned to lm_tcp_rx_get_buffered_data
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - accepted_bytes <= indicated number of bytes
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid lm_tcp_rx_buffered_data_indicated(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t * tcp,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t accepted_bytes,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_gen_buf_t * gen_buf /* head of indications generic buffer */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * If connection is still open updates the sws, updates the pending return indications
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid lm_tcp_rx_indication_returned(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t * tcp,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_gen_buf_t * gen_buf/* head of indications generic buffer */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Called:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * 1. when a buffer is returned from a client and the connection is already closed
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * 2. when upload_completion returns from the client
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Checks if the connection is dead and can be deleted (depending on state,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * and pending return indications)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * If the call is due to (2), changes the state to UPLOAD_DONE
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * 3. when offload completion is proceesed and we service deferred cqes,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * its possible that the connection was uploaded while waiting to the offload completion
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Assumptions:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * SP and Rx locks are taken by the caller
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Return:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * TRUE - if connection can be deleted i.e. state = UPLOAD_DONE,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * and all pending indications returned
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * FALSE - o/w
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu8_t lm_tcp_is_tcp_dead(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t * tcp,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t op
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define TCP_IS_DEAD_OP_RTRN_BUFS (0)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define TCP_IS_DEAD_OP_UPLD_COMP (1)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define TCP_IS_DEAD_OP_OFLD_COMP_DFRD (2)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * checks the state of the connection (POST_BLOCKED or NOT)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Returns
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * SUCCESS - if connection is open
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * CONNECTION_CLOSED - if connection is blocked
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_tcp_con_status(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_con_t * rx_con);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * calculates the size of a generic buffer based on min_gen_buf_size and mtu
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * this function should be called at init, it does not initialize the lm
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * toe_info parameter
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Assumptions:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * mtu and min_gen_buf_size are initialized
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Returns:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * size of generic buffer
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu32_t lm_tcp_calc_gen_buf_size(struct _lm_device_t * pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * extracts the size of a generic buffer from the lmdev
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define LM_TCP_GEN_BUF_SIZE(lmdev) ((lmdev)->toe_info.gen_buf_size)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu8_t lm_toe_is_tx_completion(struct _lm_device_t *pdev, u8_t drv_toe_rss_id);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu8_t lm_toe_is_rx_completion(struct _lm_device_t *pdev, u8_t drv_toe_rss_id);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu8_t lm_toe_is_rcq_suspended(struct _lm_device_t *pdev, u8_t drv_toe_rss_id);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid lm_toe_service_tx_intr(struct _lm_device_t *pdev, u8_t drv_toe_rss_id);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid lm_toe_service_rx_intr(struct _lm_device_t *pdev, u8_t drv_toe_rss_id);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid lm_tcp_clear_grqs(struct _lm_device_t * lmdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*********************** TOE RSS ******************************/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/**
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @Description: Update TOE RSS. The origin of this call is when getting
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * an OS RSS update. It's actually by L2 interface and not
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * L4. However, the ramrods are separate for L4 + L2 due to the
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * assumptions by the different protocols of what the data is
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * in the indirection table.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @Assumptions: Called BEFORE calling L2
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * enable-rss!!
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param pdev
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param chain_indirection_table - table of TOE RCQ chain values
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param table_size - size of table above
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @param enable - is this enable/disable rss if it's disable, the
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * table will all point to the same entry
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * @return lm_status_t - PENDING is completion will arrive asyncrounoulsy
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - SUCCESS if no ramrod is sent (for example table didn't change)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - FAILURE o/w
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_tcp_update_rss(struct _lm_device_t * pdev, u8_t * chain_indirection_table,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t table_size, u8_t enable);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* This functions sets the update window mode. We work in two modes:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * SHORT_LOOP and LONG_LOOP.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * SHORT_LOOP: if generic indication succeeded, the window is update immediately by the accepted bytes
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * LONG_LOOP: if generic indication succeeded, the window is updated only when the buffer is returned via l4_return_buffer
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define LM_TCP_SET_UPDATE_WINDOW_MODE(lmdev, mode) (lmdev)->toe_info.update_window_mode = mode
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define LM_TCP_GET_UPDATE_WINDOW_MODE(lmdev) ((lmdev)->toe_info.update_window_mode)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/**
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Description:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - Post a fin request BD in the bd chain
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Returns:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - SUCCESS - fin request was posted on the BD chain
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * - CONNECTION CLOSED- as described in lm_tcp_tx_post_buf()
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_tcp_graceful_disconnect(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN struct _lm_device_t * pdev, /* device handle */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN lm_tcp_state_t * tcp_state /* L4 state */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * check if there is a pending remote disconnect on the rx connection.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * This function is called from the um, after buffers have been posted. If there is a
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * remote disconnect pending, it will be processed.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline static u8_t lm_tcp_rx_is_remote_disconnect_pending(lm_tcp_state_t * tcp_state)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_con_t * rx_con = tcp_state->rx_con;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_con_rx_gen_info_t * gen_info = &rx_con->u.rx.gen_info;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return (u8_t)(!(rx_con->flags & TCP_RX_POST_BLOCKED) &&
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (gen_info->peninsula_nbytes == 0) &&
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (rx_con->u.rx.flags & (TCP_CON_FIN_IND_PENDING | TCP_CON_RST_IND_PENDING)));
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * checks whether it is OK to update the tcp state. We only update if the connection
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * is not being offload/uploaded/invalidated i.e. normal or aborted.
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi__inline static u8_t lm_tcp_ok_to_update(lm_tcp_state_t * tcp)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* a state status is changed to invalidate only after the invalidate is completed, therefore
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * to make sure a state isn't in the process of being invalidated we check it's flags to see
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * whether an invalidate request has already been posted. */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi return (u8_t)(((tcp->hdr.status == STATE_STATUS_NORMAL) ||
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi (tcp->hdr.status == STATE_STATUS_ABORTED)) &&
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi !(tcp->rx_con->flags & TCP_INV_REQ_POSTED));
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi}
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/**
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Description:
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * initializes the lm data in a slow path request given the request parameters
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid lm_init_sp_req_type (
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t * tcp,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_slow_path_request_t * lm_req,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void * req_input_data);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/**
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Description (for following two functions)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * finds the next tcp states dependent of the path/neigh
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * given the previous tcp state. If tcp_state is NULL, it
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * returns the first such tcp_state
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Returns
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * tcp_state: if such exists
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * NULL: if there are no more tcp states dependent of the
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * given path/neigh
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_tcp_state_t * lm_tcp_get_next_path_dependent(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void *path_state,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t * tcp_state);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_tcp_state_t * lm_tcp_get_next_neigh_dependent(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void * neigh_state,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t * tcp_state);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/**
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * finds the next neigh state following by given the
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * previous neigh_state. If neigh_state is NULL, it returns
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * the first neigh_state in list of neigh states
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Returns
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * neigh_state: if exists
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * NULL: if neigh list is empty or no more neigh states in
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * the list
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_neigh_state_t * lm_tcp_get_next_neigh(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_neigh_state_t * neigh_state);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/**
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * finds the next path states matched non NULL neigh
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * If neigh_state is NULL, it returns the next path state in
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * list of path states
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Returns
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * path_state: if such exists
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * NULL: if there are no more path states dependent of the
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * given neigh (in not NULL)
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_path_state_t * lm_tcp_get_next_path(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_neigh_state_t * neigh_state,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_path_state_t * path_state);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/**
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * finds the next tcp states in list of tcp
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi *
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Returns
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * tcp_state: if such exists
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * NULL: if there are no more tcp states in the list
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_tcp_state_t * lm_tcp_get_next_tcp(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t * tcp_state);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* GilR 8/22/2006 - TBD - temp implementation, for debugging. to be removed?/wrapped with "#if DBG"? */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid lm_tcp_internal_query(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN struct _lm_device_t * pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/**
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Returns the number of entries needed in frag list
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * taking into an account the CWnd and MSS
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu32_t lm_tcp_calc_frag_cnt(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t * tcp
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * function is called whenever the UM allocates more generic buffers
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid lm_tcp_rx_gen_bufs_alloc_cb(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t * pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/** Description
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * Callback function for cids being recylced
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid lm_tcp_recycle_cid_cb(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void *cookie,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s32_t cid);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid lm_tcp_init_num_of_blocks_per_connection(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t num);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu8_t lm_tcp_get_num_of_blocks_per_connection(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t lm_tcp_erase_connection(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN lm_tcp_state_t * tcp);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu8_t lm_tcp_get_src_ip_cam_byte(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN lm_path_state_t * path);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_tcp_state_t* lm_tcp_find_offloaded_tcp_tuple(struct _lm_device_t * pdev, u8_t src_ip_byte, u8_t src_tcp_b, u8_t dst_tcp_b, lm_tcp_state_t * prev_tcp);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid lm_tcp_rx_clear_isles(struct _lm_device_t * pdev, lm_tcp_state_t * tcp_state, d_list_t * isles_list);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu8_t * lm_tcp_get_pattern(struct _lm_device_t *,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t * tcp,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t pattern_idx,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t offset,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t * pattern_size);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchivoid lm_tcp_set_pattern_offset(struct _lm_device_t * pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_tcp_state_t * tcp,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t pattern_idx,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t offset);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchiu32_t lm_tcp_find_pattern_offset(struct _lm_device_t * pdev, u8_t * sub_buf, u32_t sub_buf_size);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* _LM_L4IF_H */