d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#ifndef _LM_SP_REQ_MGR_H
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#define _LM_SP_REQ_MGR_H
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#include "listq.h"
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*******************************************************************************
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * slow path request manager data structures
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ******************************************************************************/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/* Frward declaration */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchistruct _lm_device_t;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _lm_sp_req_common_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_entry_t link;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void *req_post_func;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void *req_post_ctx;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t req_seq_number;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} lm_sp_req_common_t;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef lm_status_t (*req_post_function)(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void *state_ctx, /* tcp_state / iscsi_state */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_sp_req_common_t *sp_req);
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchitypedef struct _lm_sp_req_manager_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi{
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi s_list_t pending_reqs;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u32_t req_seq_number;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi u8_t blocked;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi /* ToDo: use instaed of tcpstate.sp_request */
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_sp_req_common_t * posted_req;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi void * sp_data_virt_addr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi lm_address_t sp_data_phys_addr;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi} lm_sp_req_manager_t;
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi/*******************************************************************************
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi * slow path request manager prototypes
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi ******************************************************************************/
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_sp_req_manager_set_sp_data(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN u32_t cid,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN void *virt_addr,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN lm_address_t phys_addr
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_sp_req_manager_init(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN u32_t cid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_sp_req_manager_shutdown(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN u32_t cid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_sp_req_manager_post(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN u32_t cid,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN struct _lm_sp_req_common_t *sp_req
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_sp_req_manager_complete(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN u32_t cid,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN u32_t seq_num,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi OUT lm_sp_req_common_t **sp_req
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_sp_req_manager_block(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN u32_t cid
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_status_t
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchilm_sp_req_manager_unblock(
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN struct _lm_device_t *pdev,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi IN u32_t cid,
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi OUT lm_sp_req_common_t **sp_req
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi );
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi
d14abf155341d55053c76eeec58b787a456b753bRobert Mustacchi#endif /* _LM_SP_REQ_MGR_H */